Anyone in the same boat?
I've been struggling with this for years now; after 4 boring jobs I finally gave up even the expectation that what I'll be asked to do will be even remotely interesting (or socially useful). The chance of landing an interesting job is absolutely minuscule - the market rewards whatever it rewards at the moment, and that's where jobs flock. These days, one of the bigger thing the market rewards is writing a web-based CRUD that's 99% chrome, 1% of actual functionality. Extra points if you can get some user data to sell to adtech industry.
(My own criteria for "interesting" these days are a bit different. I'm not looking for "interesting technical problems", as in advanced CS stuff, but "interesting outcomes" - pushing the humanity forward, or alleviating a social problem for some group of people. I find it hard to even find companies that apparently work on something like that, and even then it seems they have to do lots of boring work as well.)
--
EDIT: Then again there's this topic that has been casting shadow on my happiness for a long time, that I finally seem to be able to define. Maybe our civilization has finally crushed my soul, and I noticed it just now. But it feels to me that the revealed goal of our market-driven world is to abstract everything away with money. The end-game is that as an individual, your responsibility in the society is to pick a skill - whatever skill - that makes you money, and then to use money to solve everything else with your life. It doesn't matter what you do, there is only one meaningful meta-skill - making money fall out of the system, into your bank account.
Maybe I'm just realizing something obvious that parents should have taught me when I was a kid. I don't know. Maybe it was wrong of me to seek meaning in the things one does? Maybe that approach is no longer supported by our civilization?
Not all of us are raising families, but I think it highlights a bigger points. Work is not what builds societies (certain jobs do harm society I think, mostly by destroying it's moral virtues). People relationships are what build societies and build happiness.
And you're right - there are a lucky, select few who get jobs that can also influence society.
I'm not worried about that though (anymore - I was for a time though). With my job, I can provide and care for those around me (provide for my family and generally have positive, uplifting interactions with those around me).
I have resigned myself that it's not my job to fix society, it's our job to fix society, and I'm doing my part where I am. From my perspective I have more than enough to do locally anyway: https://news.ycombinator.com/item?id=17176036
It's as if childhood primes us to think that life is all about figuring out what the heck is going on around us, and as a consequence some of us go into something science-y, but then we reach a certain stage in adulthood where we feel like we have a pretty good rough closed form solution to the problem, and now the journey all of a sudden seems empty and without purpose and we just keep going with the lives 16-year old selves planned out for us, with too much cost sunk to pivot. I almost suspect the end-state of science is not some sort of blissful state where we feel like we understand everything, but an utter dread and feeling of emptiness at no longer having a purpose.
In my mid twenties this was hard for me to grasp. I was working as an electronics design engineer for a company that made low-end industrial controls. We had a customer who had what seemed like the dream company to me: he made robots for animatronics and lab applications. One day I was talking to him about how exciting the work was and his answer surprised me: it used to be fun in the beginning but after doing it for a few years, it was just another job.
I work with wireless sensors now. Yes, it's technically interesting, but it's pretty boring.
Why? I've discovered over the years that I am far more excited by making customers happy than by doing technically interesting work. I've come to see the technology as a means to an end, not the end in itself.
Two kinds of "work": work that gives you money, and work that gives you value. They are not necessarily the same one.
Most people have to work for money. The best we can do is to gather more "money" (or resources). So that you can dedicate more of your time to generate, as you said, "interesting outcomes".
I recommend the book "Your Money or Your Life" by Vicki Robin. I learnt a lot relevant ideas from it.
Ouch, this resonated. I've been walking this path with you.
Sometimes I make my own food. Or grow it. Or pickle it. It would be more "efficient" to buy such food in many cases. But if it gives me pleasure, I trade my time to do it.
My opinion: the point of life is not to acquire so much money that you can avoid doing any difficult things and wrap yourself in a cocoon of comfort. The point of life is to find your own good life and live it. That will entail some difficulties (at a minimum the difficulty of seeking your own definition of the good life, which is hard!). You may find that in your work (lucky you!) or you may have to work to support yourself and find this good life in other areas.
This is the lens through which von Neumann and Morgenstern saw all of human behavior, and their "rational" economics has been hugely influential in public policy. I use scare quotes because I disagree that the approach is rational -- many things in life can't be measured in dollars, not even dollars! (E.g. you can't compare a dollar today with a dollar ten years from now. Regardless of your discounting strategy, that money is going to mean something different to you in ten years.)
Your position is a great example of this phenomenon -- there's not really any amount of money that can compensate for a lack of inspiration at work. You might be willing to give up on interesting work for enough dollars, and the rational economist would say that this is the measure of how valuable interesting work is. But there's a long history of studies, notably by Kahneman and Tversky among many others, showing that framing human motivation this way leads to all sorts of paradoxes.
So yes, we have a strong tendency to measure everything with money -- this outlook is deeply embedded in our economic and political systems -- and it makes people miserable because it's a terrible way to account for human happiness.
These days, one of the bigger thing the market rewards is writing a web-based CRUD that's 99% chrome, 1% of actual functionality. Extra points if you can get some user data to sell to adtech industry.
I don't think they are rewarded on the grand scheme of things. Software has always showed a winner-takes-all structure and most software disappear. Take for example the game industry. 15 years ago, you would have talk to anybody, they would have told you the market is mature and they are making money on making movie-based games. Today, most players (publishers, studios, etc) of that era have disappeared (Im too lazy to get the long list of publishers that are gone).
Also innovation can act in a subtle way. Take the iphone for example. People are more productive because of it. That means that hospital, universities, research labs, non-profits, etc, all are doing better jobs which means we cure more disease, teach, help and study better, etc. because of the iphone.
But yeah, if you dont work in innovation, then you work for the current "government", the current group-thinked direction made by some smart "politicians" (by "politician" I mean that guy who lick asses all day long, who goes always in the direction that's well accepted and who use words to seduce people and get what he wants). It's either innovate (rare) or maintain.
Maybe our civilisation has finally crushed my soul, and I noticed it just now. But it feels to me that the revealed goal of our market-driven world is to abstract everything away with money.
There is a passage in the movie "1492: Conquest of Paradise" by Ridley Scott that I love:
"Look outside, what do you see?" ask Colombus to some royal acolyte
"I see towers, I see palaces, I see steeples, I see civilisation. And I see spires that reach to the sky!" answer the politician contrasting with the wild america of that time.
"All of them created by people like me" say Colombus
Isn't this what humans like to strive for? Making an impact, being remembered after death, thus living forever. That's one of the things a family (with kids) helps you get over, you know, the whole "living on through your kids" thing. If they don't end up as homeless drug addicts, it probably kinda works.
I've taken a job at a university two years ago. Pay is much lower than before. Haven't felt anywhere close to overworked or burnt out ever since, even though I've stayed until late at night occasionally when we fucked something up by deploying without any proper testing again, because hey, it's such a tiny change. I'm not doing frontier science or anything, we're just working on a custom netbooted Linux distro that also runs windows vms via qemu-kvm, for teaching environments. A lot of what we do could be dismissed as NiH-syndrome or creating solutions to problems that have already been solved by big companies, but as long as someone is paying for it I'm good with this job. Because there pop up a lot of problems or requirements that are just interesting to solve by yourself, actually not just for fun but for actual use cases. Nothing game changing for humanity, not for millions of people, but for some. And I will interact with them directly, and sometimes they tell you that they like the system you helped develop. That, and the fact that you're not in competition with your coworkers or another team or anything really makes for a great work atmosphere that I'm currently really enjoying. I don't know how long I can/want to stay, but for now I can say it greatly improved my overall happiness.
That's one mental model but it doesn't fit exactly with reality and there are others. See the Love & Money graph here for example. Not quite sure how that fits in with the job hunting. https://www.theatlantic.com/magazine/archive/2003/01/does-mo...
Not sure what you mean by "social" problems specifically, but when you alleviate a problem for a group of people, they pay you, and that's what a business is.
I realized recently what a useful abstraction money is, because when money came about we didn't have the ability to create a massive blockchain keeping track of who did favors for who, and when. So it's a reasonable proxy for reputation and social credits.
With the explosion of NGsequencing there's no shortage of data or data-magician positions, and there's many challenges with social impact
I mean if you're a programmer and want a job fighting cancer, maybe pick up some ML skills and find a way into that industry. But short of getting your PhD in medicine or a law degree fighting injustice, we're all just a different sort of coal miner providing the things society needs to keep chugging along. And there's no shame in simply being a productive member of society. As far as societies go, we're better than all that have come before.
Yes. The most rewarding thing one can do is to figure out a way to change that.
It's sad that our brightest minds don't want to understand this, and that they'd rather think about how to make people click ads.
The reality of the situation is that, if I'm not so drained from the mind-numbing soul-crushing CRUD work that I feel like doing more when I get home, I'm sure as hell not going to work on anything remotely related to my employer's line of work. I get quite enough of that at work. I'm going to work on problems that matter to me, and that seems to be stuff that really doesn't matter to my employer.
Boring problems are quite manageable when they are also important and meaningful. The general lack of purpose most of us find in our jobs (apart from 'earning money') is the real problem.
Another recommendation is to have a look at 80000hours.org which is a great resource for finding the best work opportunities out there! I think they even provide some coaching :)
One might ask: what does the alternative look like? From what I can tell Marx is a bit wishy-washy on that point.
Hayek more helpfully explained that the market provides a mechanism for determining value, not virtue. That it works, but doesn't uplift. And that trying to force it to will leave with neither -- you will need to find your meaning in something else.
The thesis of capitalism is that acting only in self interest is good for the collective, i.e. your own capital is all, i.e. we can abstract everything away with money.
I think you're completely right about the problems with above dogma and hope that you don't stop looking for a way to do something you find meaningful.
This nice run has come to an end for me and my team and it's made me realize that getting to work on nifty, complex algorithms and do real CS is not the default. To say the least.
I'd like to try to figure out how to do it again: the "algorithms startup" is a fun thing to do. You aren't going to be raking it in as having the 'nice library to do task X' doesn't allow you to capture huge amounts of value relative to the people selling boxen/UI/SAAS/etc. that wraps up your library. But you can work on a decent scale.
I am thinking about blogging about this; generally I've been sticking to tech stuff on branchfree.org so far but having done this successfully once makes me wonder if it could be done again.
Where would you like to work next?
Yes, please do.
I think it's all about the motivation and setting your expectations that you won't make it every time.
Do you have any updates on that water-filtering molecule you showed us then?
I stay away from webdev. I did a couple of small projects but the web was just an outer API, the main work was done by native code running on CPUs or GPUs.
I stay away from enterprise systems, or fin.tech, or ad.tech. I removed enterprise-targeted keywords from my resume, Java, J2EE, SOAP, SQL. I have some experience with them from my early career but I don’t want to use them anymore.
Also, for many years I’ve never worked in/for huge companies, i.e. google/amazon/microsoft scale. My employers/clients are/were mostly small to medium companies.
What do I do? Almost everything else. Native desktop, native mobile, embedded, GPGPU, robotics, GIS, videogames, CAD/CAM, streaming media. Many startups, and small to medium companies, have problems to solve that I find interesting to work on.
There’re still boring parts in my work. But because of my experience I usually find ways to minimize the time I’m spending on them. The most generic advice, pick the right tools.
I also like to abstract away the non-sense part of a problem, so that I can focus on the real intellectual puzzles.
The transition for me came when I started a new job and my first project was to fix a slow batch job. Then I managed to get a second performance improvement project and soon I was the performance guy focusing entirely on performance projects. I really loved it.
Then through side projects targeted at problems I saw at the company, I built valuable tools using new open source tech and I got made tech lead of a new platforms team, solely focused on resolving technical problems and improving the system. Since then I have been an R+D engineer and now starting as a big data developer at the same company.
I am no genius, failed my interviews to get into big tech companies. I am a pretty big fish in a pretty small pond, I am known as one of the best technical guys in the company, which opens many doors and gives me a lot of freedom to move about inside the company and get some of the most interesting technically focused projects.
I work as a software engineer for an ISP. We're a startup and so of course our mission is to disrupt the industry. The great part is we're actually doing it!
Fun stuff I've done so far:
- Wrote a library to find the best available subnet given our set of IP blocks, set of existing subnets, and the desired subnet size. This may not sound like a big deal, but we've shown our IP block utilization to other ISPs and they are blown away that we achieve a perfect 100% utilization of each block. (Typically at ISPs of our size this is done manually and so there tend to be a couple leftover subnets in each block which are too small to use).
- Wrote a monitoring system for OLT hardware which A) does not provide out-of-the-box monitoring and B) does not have an API. We actually managed to build a robust system on top of its CLI interface. This is huge for us. If there are hardware or fiber problems, or if a customer simply unplugs their modem, we know instantly. It can even pinpoint where the problem is.
- Wrote a system which is able to talk to our OLTs, core switches, core routers, and customer modems to do things like provisioning or upgrading/downgrading our customers' bandwidth. Again, there is nothing even close to an out-of-the-box solution for this. You have to build real software!
- We have some upcoming products I can't share, but one of the most exciting things right now is that we are focusing on helping our customers troubleshoot their networks. This is a surprisingly complicated thing to do while providing a top-notch customer experience, and we think software is part of the answer.
So, do I feel like I've been using "computer science" knowledge? Not really. Closest thing would be using binary trees to do subnet stuff.
But what I have been able to do is flex my software engineering muscles, go back to first principles, and design software from scratch. No CRUD, no huge frameworks and package managers, just plain old fashioned programming.
(Ok, we do have CRUD and framework stuff. The web browsers have to talk to something!)
What kind of equipment do you use mainly ? Cisco, Juniper... ?
I have been extremely fortunate in my career. I'd say I won the interesting lottery. I started very early by today's standards, taking my first programming class at the local university when I was in 5th grade, back in '76.
At 17, in '82, I had a game company selling nationwide in Sears & KMart a few Vic-20 games I wrote. That got me a beta testing role with the unreleased Macintosh. Which got me to move to Boston, where I worked for Mandelbrot & DeVenney on the initial publishing of Fractals.
Basically, I've been fortunate to be an early developer for a series of advanced technologies: - initial 3D graphics research community (back when the question was "how to do 3D graphics at all"), - initial GUI developments (before Windows 3.1, there were a lot of competitors), - early real time mapping / navigation, I worked on one as my first post graduation job - early streaming media, I was writing media players for CD-I/CDROM/Network back in '90-'92 - early 3D gaming consoles, I was an OS developer for the 3DO and the first PlayStation - early 3D games, lead developer for games for 15 years - VFX, left games and worked on 9 VFX heavy feature films at an academy award winning studio - startup, left VFX and spent 7 years doing a ML based 3D reconstruction of photos to realistic 3D avatar web service - Facial Recognition, closed my startup and now I develop facial recognition software for an industry leader
There is not time enough in a day to explore all the stuff I've done or am interesting in further pursuing. Luckily, I am one of those that sleep less: 5 hours leaves me groggy, and 4 is just right. So I spend my daze 10 hours coding for work, and another 4-6 pursuing "mad science".
Is it really possible to sit for that long everyday and not suffer from it. I know I'm probably focusing on the wrong thing but just the idea of being able to code for that long everyday without suffering any physical problems would be reward enough for me.
As a discipline, we're too young and our technology is too immature to support a true split between engineering/science and computer programming.
If you want to work on interesting problems you're passionate about, there's a few ways to do it.
First, you can do research. Years ago I joined a lab as a professional researcher to follow my passion for machine learning and sensor networks. It's not the easiest path, but labs need disciplined programmers to complement the skills of PhD students.
Second, you can consult. If you're passionate enough about a topic that you have encyclopedic knowledge, I guarantee there's someone out there who will need that expertise and will pay for it. It might not cover all your bills, but it gets you exposure (and potentially a job if they need your skills a lot).
Third, you can start a company. I followed my passion for the challenges of learning from sensor data at scale into entrepreneurship and eventually started a company, http://sentenai.com . As a technical founder, I chose carefully the technologies we use (Haskell) and the problem we were tackling (making it fast and natural to combine multiple sources of time series data and find temporal patterns). You still need to solve somebody's problem and build a business, but you can at least lay the foundation.
The amplifiers, processing, and data storage used to take up most of the space of a small cargo plane. Then it got down to four half-racks. Now it is the size of a dishwasher.
We hope to get it drone-sized. It is a never-ending series of interesting technical problems that span the entire STEM range, including RF, network, system, electrical and mechanical engineering, HPC, data science, voodoo-mathematics I will never understand, system administration, and plain old software development.
Everyone here is expected to cross-train in various disciplines. My background is CS but since starting here I have done electrical and mechanical engineering work including diagnosing micro-fractures, visible only through a microscope, in connectors on a bunch of VPX chassis stuff, caused by bad soldering work by the manufacturer.
On top of all of that once or twice a year we all get to go on operational deployments of the system. This year we went out and imaged thousands of miles of coastline, 6 engineers crammed in a tiny airplane hopping from airstrip to airstrip in support of a coastal erosion monitoring program. Data scientists are expected to haul around amplifiers and radar engineers are expected to live patch code while in the air.
The only reason I got this job was because I was a bored programmer teaching a Linux course as a side-hustle and a bunch of engineers came through and started asking questions way beyond the scope of the class. They were radar guys struggling to learn Linux and a couple of post-class drinks later I had an interview.
I guess my only advice would be to have a side-gig and network as much as possible, peppering everyone you meet with questions about what they do.
If what they do sounds cool, ask for an interview.
My initial consideration is to develop and host a sort of public Wolfram Alpha, but specialized for climate data queries and visualization. I'm open to other suggestions, as I'm currently in the process of architecting the system and reaching out to climate scientists for feedback on what they need that isn't well-served yet.
Once all the infrastructure work is done, I'd be happy to contribute to climate modeling more theoretically. But for now my prerogative is to develop a central repository for as much climate data as possible, normalize it as reasonable, and store it in a queryable format.
There are interesting technical problems here due to the scale of the data, the variety of its native (raw) formats, the frequency with which each source updates and the types of information involved. But speaking directly to the title of this post: I don't think anything I'm doing is strictly an unsolved technical problem, it's just a complex technical undertaking. There are plenty of data serving and processing pipelines for this that have already been proven capable.
There's still a lot left to figure out, even storage formats aren't fully solved.
Feel free to reach out to me individually (email in profile), I'm working on operationalizing climate data like this and would like to look at this together!
High-level questions:
- At the risk of birthing a page-long subthread on ZFS-vs-everything-else... what storage solution are you using, and why?
- What sort of hardware are you using? (This is a non-catalyzing question, and is just out of curiosity)
- How did this get started, and how are you managing this?
- Will you ever be interested in accepting donations or funding? (Including on a voluntary basis; and including with clear stipulations/structure about management)
- What sorts of decisions/motivated this initiative?
More focused:
- Do you have any interest in creating this as a "community hub", with a central code repo that data scientists can push updates to that then get run on the cluster? If the visualization data (or prerendered bits of it) are openly cached/accessible, having the code that generated the data equivalently open/available could be interesting.
- What kind of availability/openness are you looking at with data? (TL;DR translation: rate limiting)
You may already be aware (very likely), but AFAIK archive.org is interested in this kind of thing. Interesting bunch of people, but the various projects do like climate data, and they have a few hundred PB of space, FWIW.
Writing complex code to solve a gnarly problem is often the wrong path, because it's harder for coworkers to understand the code, and harder for future maintainers to keep it correct. Thus it's often better to encapsulate the hard problem in a nice interface, and possibly release it as a separate library.
That's where most of those libraries you're gluing together come from. A tough bit of code that needed writing but also encapsulation.
A tougher problem than most CS problems you'll find while writing CRUD apps is getting architecture right, so that adding new features isn't an uphill struggle and doesn't involve piles of boilerplate. Getting the aesthetics right, making the code clear so that anyone can maintain it - this requires experience and the mastery that comes from it pays off in the longer term, because you can more easily leverage other people's efforts too.
If you can't find solace in mastering software design, you're better off moving away from CRUD apps and move to a developer of tools. Tooling, whether it's compilers, OSes, databases, whatever - has more interesting and deep technical challenges. Watch out though: tooling often doesn't pay particularly well because developers enjoy making tools themselves. They'll prefer to build their own shoddy hammer 9 times out of 10, precisely because they're in the same boat as you right now: they don't feel challenged.
Side projects are good for your brain and in the long-term good for your career (lest you stagnate with old technologies). I recommend having this outlet. On the plus side, having a somewhat interesting job + really interesting side projects gives you both good money and intellectual freedom.
If you want to solely focus on interesting technical problems, I'd recommend working in a research lab or going to academia. On the downside, you may lose that nice paycheck, but your curiosity will remain forever piqued!
If you join an industrial lab, rather than a lab in a university, you can keep the pay but still do the same thing as the academics.
I've been running DNSFilter for 3 years. We're (still) facing interesting texhnical challenges - ranging from BGP community strings being used to balance a global anycast network, to handling volumes of time series data [1], to designing a golang daemon to ssl sign incoming requests on the fly for domains we won't know ahead of time, to figuring out new ways to pass data in DNS, and support cutting edge standards like DNS over TLS, DNS over HTTPS.
I was just saying to my wife the other day how ridiculous it is that most things we do are technically challenging, and you have to think outside the box how to get it done -- while I was implementing a block page for user agents which requires a 19 step process to determine the user's DNS Agent ID, and display the right logo on the block page ;)
Some might dismiss these challenges due to our use (abuse) of DNS for purposes it was not intended for. Fair. Also, welcome to the real world, and we're solving problems are customers are asking for... and just figuring out interesting ways to get the job done.
1: https://blog.dnsfilter.com/3-billion-time-series-data-points...
I'm all for work-life balance and working on passion projects on the side.
But do that many people really think of their developer job as a salary and a daily grind?
There is absolutely no reason to be miserable at your day job. You should be preparing for superpowers if not actively using them.
I recommend watching lectures/talks during work, skipping meetings and reading from thought leaders instead of working hard to reach deadlines. Everyone is connected which means you can read and watch what Ian Goodfellow has to say about unsupervised learning or see what the issues with the world computer are from Vitalik himself as easily as listening to your marketing department figure out how to grow 10% in the quarter.
For the first 7 years I worked as a "programmer", ie. writing code, a lot of C++, and of course web stuff. About 6 years ago I (accidentally) became a "data guy". I do a lot of data infra/engineering, a lot of stats and analytics, and lately ML. Also I do a lot of management stuff and hiring.
I'm lucky, this is a pretty sweet time to be working for me. My skills are a perfect match for the work, I'm able to do impactful work and can get paid for it.
I don't really care about interesting technical problems that much, in the sense that I don't want to solve an interesting technical problem just because it's interesting. What matters is having an impact on your users and the business.
I think if you're looking for those types of technical challenges, it's better to contribute to open source code, rather than doing it at the day job. At the day job, you should always choose the method which makes sense to move fast..
Business: here is a continuous stream of problems, most of them are boring, some of them are hard, but you have to solve them all regardless.
Beside that we're also building vpsAdminOS (https://vpsadminos.org/) for running LXC on top ZFS. At https://vpsfree.cz we currently run openVZ with the intention to migrate to vpsAdminOS which is currently tested by members.
In my experience you gotta sacrifice stuff (like well paying job) so you can do stuff you really want.
The most exciting thing at my old job was this DFS I had to do once.
That said, there are very interesting tech jobs out there - such as scaling boring old CRUD apps. The high frequency trading space also has many interesting problems. Imagine working on a system where you start to care about nanosecond optimizations. I interviewed (and failed at it, lol) at Optiver [0]. You should check them out.
Finding jobs like this isn't easy and mostly requires luck - my last job was very different, it was just maintaining a plain old CRUD app. Not the most mentally stimulating work, but it's probably 90% of the work that gets done on a day to day basis by software engineers.
Try looking for people who are solving a problem that is technical in nature. Business problems use technology as a tool, technology problems require development of brand new tools or the use of existing tools in novel ways.
Now I’m working at a startup making a collaborative VR modelling tool which applies all the same problems to a more ‘serious’ end.
Both still have a fair share of plumbing work as well. But that can be a welcome relief. I find solving hard problems (particularly under pressure) can become obsessive and make it hard to be present with my family and sleep!
1. "Interesting" has more to do with the person who is being interested than the task. There are people who insist on telling me about various sports statistics as if it is amazing and interesting, and they really want to meet famous athletes. There are others who really want to work with the machine code etc. Can you maintain interest?
2. I bet you even the ideal interesting jobs you can think of: say Elon Musk's job running multiple firms probably feels like yours from the inside. Board upset that he can't get the manufacturing levels up, sleeping in the factory, trying to figure out what is going wrong by staring at who knows what while asking SpaceX to hold off on the meeting this week.
3. Sleep early and drink caffeine -- not kidding -- and your job might seem more interesting.
Edit: There is probably someone out there complaining that they have to figure out boring technical details when they really want to learn more about the business challenges.
Think about it this way: The real interesting jobs don't take chances on recent graduates. There's just too much on-the-job experience needed.
The best advice that I could give to my younger self would be to think a lot more critically about when to change jobs. The time that I left the boring CRUD job was a huge mistake. (I should have kept looking instead of taking the job that I took.)
The second best advice that I could give my younger self would be, when in a boring (but stable) job, is to avoid recruiters and try to network more with people doing interesting things. Recruiters are better when you aren't very picky about the kind of job (or employee) you want.
I work in a different corner of the development biz doing computer vision, graphics and new products for companies. This week I’m working on “reading” test strips for a new medical device. Last month I was working on the graphics for a landing radar.
At the risk of of telling you to “eat what I do and you’ll be as tall as I am”, I think you might find more developer happiness if you can get off the rails of business/web development and instead, work for small companies on desktop and/or embedded products. I think the key is working for small or tiny companies. Heck, maybe working just for a tiny company might make using your skills fun again. In a tiny company you get to wear a lot of hats so you learn things and use new technologies.
I've excitedly taken on every little task thrown at me over the years, I think, because I went to school for GIS, earned geography degrees, and never in my life expected to do anything remotely as interesting as this. It's as if my career expectations began so much lower. So when I was asked to do all the dull work, it wasn't dull for me. I've built a very complementary skill set that's rather valuable almost anywhere in the mobile robotics field. All without any engineering or CS education (which makes me really angry at the education system for barring me from engineering or CS, but that's another story)
I wouldn't mind hearing about that, huh. (In my case my story was learning difficulties I only began to get past at around 25, with virtually nil remembered schooling (besides what I could figure out on my own) from before that point, more or less.)
I saved this thread to "read later" in the hope that I can identify how to get into a position where I am working on interesting problems but more or less, I implement business logic. Of course, it's still slightly interesting when you think about the scale or what I actually created but it's not technically interesting.
All valuable skills, worth respecting and improving.
There are a couple of things intertwined in the phrasing of this particular question, job satisfaction and the quest for a challenge.
I stepped into this mess when interviewing a candidate who shared that they were looking for a new job because they wanted greater challenge (and this is a fine reason to change jobs in my opinion). I asked them what they were doing now that was challenging. That lead to a good discussion on how much of the problem of lack of challenge was their problem, and how much of it was their managers problem? Clearly a good manager would try to keep you challenged but a good employee can seek out challenging things without needing their bosses approval. One need only look at various online courses to realize that with no more than a few git clone operations and an AWS account you can start looking at very challenging problems. There are programs like the HeroX one which seek out participation in technical challenges, and there are local opportunities to engage in challenging problems that impact the community around you.
The discussion came around to this question, "What prevents you from taking on challenging problems right now?" And the answer was, for this candidate, nothing really, they had just not felt empowered enough to choose their own path.
My advice is that if you like your co-workers and your management and the work isn't hard, just repetitive, then automate as much of it as possible and look for your challenges outside of work. If you don't like your work environment then change it if you can.
My playbook is: 1. Join a product company. If you work in a software house, it will be optimized towards path of least resistance. You need to work at a company that has long-term relationship with the product for it to even have interesting problems. 2. Be joyful about solving boring CRUD stuff. Don't over-engineer, your enjoyment is not the goal. At this point, you need to build trust that you are indeed trying to solve a problem, NOT entertain yourself. ( Be careful about future-proofing. ) 3. Now, at some point, there will be a project that nobody wants to do. It will be a mess, so natural inclination of most people will be to turn it away, run from it or try to ask for better research / drag the initial phase or whatever stalling tactic will be handy.
But, inside that messy, scary project is an interesting technical problem. What you want to do is to volunteer to take care of that mess without any prior experience and with a feeling that you have no idea what you are doing. You will also need to take full ownership of it.
The best solution is to establish a Skunkworks-like setup, where an extremely lean team has low communication overhead and is isolated a bit from the rest of the company.
Benefits of it will be: a) You will gain 3 years of "company experience" in 3 months, so you will be a better candidate for next interesting problem, b) People know that everybody dreads a certain project. Usually, you can make it in half the time everybody else will think it takes. You can coast on the reputation for months and not really do much work once you solve it. Also business is extremely happy since dreadfull projects are worth more than the entire year of mundane work. c) You will push the edge and expectation inside the company. Once these dreadful projects go away, the resources and infrastructure are ready for more sexy projects. You will have the pick at them because you now have a reputation for not-overengineering, delivering and solving technical issues.
But, it is: - scary - unknown - uncomfortable
Of course - as I said, not every organization has those problems and introducing them prematurely where CRUD will suffice will actually hurt you. You need to have product knowledge and understand what business need is solved this way. There will be business/marketing overhead and you cannot avoid that. You need to think about customers needs first and foremost.
This is how I put myself in a position to solve one interesting technical problem after the other at Automattic.
If you're really looking for interesting technical problems, I highly recommend looking into systems biology. There's interesting mathematical, computational, and biological problems being worked on here (with lots of funding!).
I spend most of my time thinking about mathematical problems that I feel are impactful and important. The solutions make use of theoretical computer science (computational reductions and such). Validating the results requires running small Monte Carlo style experiments typically written in C++, Python, or Javascript. This isn't rocket science code, but it's still challenging to think what kind of assumptions and constraints to put in the model / code and which ones to leave out (although the coding part itself is pretty standard.) Other than that I mostly write TeX :)
But our solutions are implemented by the IOHK software engineers that are working on the production software implementation of Cardano. It's quite interesting to guide that work through our papers, as it handles a multibillion dollar market cap and the responsibility for making sure everything is secure is big. As for social impact, this people may disagree with, but I feel we're building next generation economies and this will impact the whole of society in making it more egalitarian, giving access to money to everyone, and making salaries more equal across the globe.
Working on computer science for its own sake isn't a draw for me. Helping people is. Your values are up to you, but don't be surprised that working on abstract problems rarely equates to adding real world value unless you look for a job where that's explicitly the case.
Also don't overlook the dynamic that you're being paid now rather than being the customer like you were in school. Your career is ideally going to be fun and enriching overall, but don't let yourself forget that's secondary at any given time to providing the value you were hired for.
Working with some very serious FPGA people in a high functioning group doing really hardcore DSP, high speed memory interfaces, networking, etc.
I was in your boat before. It made me want to drive off a cliff.
I'm 38 years old, and I'm convinced that if I hadn't been constantly working on side projects and pursuing learning on my own (books, MOOCs, etc.), and relied solely on the skills I could pick up "on the job", I would be absolutely unemployable now.
Seriously, doing nothing but writing glue code was old 10 years ago, now I'm really starting to feel burnt out. Today, I've been staring at a screen full of bad Java all day, knowing exactly what needs to be done, but can't force myself to do it. Maybe tomorrow.
Funny, I have no problem pouring myself into my side projects in the evening. Hmm....
It's really unfortunate I know all too well how this feels. How do you hedge since you are nearing "old" in industry?
[0] https://thedailywtf.com/articles/Programming-Sucks!-Or-At-Le...
Now I'm doing that stuff regularly for various industrial applications, and it's pretty meh. Still beats churning out javascript for the 10000th online store, that's true.
Getting the opportunity to dive back into the literature, get involved with research, and still code has been amazing.
Outside of work? Yes, but most of that doesn't involve programming. Mostly doing stuff with pre-industrial revolution era woodworking and blacksmithing. I do have a few interesting programming side projects too, but I haven't felt like sitting on the computer after work for a while. Maybe when it's winter and I don't feel like going out.
For doing projects outside of work, I've had to learn some patience and preserverance. Previously I'd put all my might into a side project and then burn out and abandon the project. Nowadays I try to keep the side projects in a state where I can easily pick them up and leave them dormant for a while. I've got projects that I've been working on for 5+ years and they're still going.
As for working with boring projects... I just had to get used to it. I've never enjoyed any work I've done (in exchange for money), but the pay is ok and I can aspire to do great things outside of work.
The roles were for more CRUD-related gigs. I don't really get the emphasis on those CS particulars when you don't really run into them much.
Anyway, no my job is not interesting. The challenges are organizational and political rather than technical.
This is ~80% of software development. To stay sane find a domain where the business logic interests you. Maybe you're into sports, crypto, sci-fi, whales, whatever.
Try and find a job in these domains. In my experience it makes the day-to-day grunt work of developing software more enjoyable since you're solving novel problems in area that you care about.
My experience generally has been that the work is more varied, and there is more learning as opposed to mechanically doing.
Sometimes I get to deep dive into interesting technical topics. I’ve taken things apart and reverse engineered bits of software and worked with experts. Plus I am deeply fascinated by computer history, and sometimes I get to dive into that as well when looking for prior art.
On the other hand, some patents really suck and have claims that were clearly written by people who didn’t understand what they were writing about. Arguing over these requires you to almost suspend disbelief to operate in a world where the claims make sense.
You can also participate indirectly by tracking the market and making small investments in say: AbbVie, Gilead, Regeneron, Spark Therapeutics, Ginko Bioworks, etc. Or apply your skills to Kaggle style ML competitions, citizen science projects, open access gene banks, etc.
Stay positive!
If you are a computer scientist and say, a marine geologist, there is some work that only you would be able to do, and some innovations that only you can see, that plain CS guys knee deep in the CRUD cannot.
I wish I'd know that 11 years ago. I'd go to study aeronautical engineering or biology instead of CS. Now, I play the catch-up game, trying to learn a completely different field, just to have something interesting to apply all my programming knowledge and experience to.
The day job still pays the bills but finding something that interests me personally while also offering potential future rewards is what keeps me going.
[1] https://blutick.co.uk/demo - alpha stage right now
Whenever I have spare time I'm trying to build a solution like Walk Score for where I live, where such a thing isn't available. Hopefully something will come of that.
Sign up for our beta program at https://tallylab.com :)
The first two are pretty easy to remedy if you're young and adventurous enough, but the last one might leave you searching for a long time. I've up and moved all over the place, and never stopped searching. After 10 years in this field, I've finally got a job that really brings me satisfaction. What most people don't tell you is that it's all about your boss. If your boss knows you, and helps you reach your potential, any job can be fulfilling. Most bosses aren't that good though, and they will stifle your growth and make your life miserable because their boss is doing the same to them.
The real key is to know yourself, know your skills, and advocate for yourself tirelessly. Make yourself accountable, and then deliver. People will take notice, and if they don't, pack your bags and move on to the next spot and try again.
I'm Director of Engineering for goin.org now, and I'm doing exactly what I love to do: understand a business problem really deeply, and then construct a series of large software systems to automate those business problems. Software engineering in it's truest sense is what I love. Structuring systems and code so that they all scale easily, and adding new members to the team is easy because the code is setup in such a way that new people can get up to speed and start contributing right away. Technical debt can only be allowed for an immediate life or death business situation, and once we've made it through, it is reconsidered and fixed.
This can be seen in medicine and law --> Doctors vs PAs vs Nurses / Lawyers vs Paralegals.
But in tech, which feels like it should be as meritocratic as others, the links between technical challenge/pay/value creation are much harder to find.
My answer to you would be to work in a start-up where a broad spectrum of tasks are to be solved by a single person. Hardware start-ups in particular need to cover an even broader spectrum...
One aspect I found very important was to "choose the good combats", something that is worth to fight for, so that even after years you are still motivated and proud of what you have done. E.g we are making a gas detector that have obvious good effects on mortality or environment.
But you have answered your own question: if you want to work on an interesting problem full time and get paid for it, one of the best ways is to start a SaaS on something you like.
Some recent activites: 1. Workshop on evolutionary algorithms I made https://matsemann.github.io/walkingea/ 2. Workshop on max flow algorithms people worked on: https://github.com/Matsemann/maxflow-workshop 3. We played elevator saga 4. Lightning-talk bonanza where people prepared small talks related to hard problems / CS theory. 5. This week programming LEGO robots
But I think your main issue might be about keeping learning. Personally, specially since I never studied CS (Industrial Engineer bachellor here), I loved reinventing the wheel about programming while at university for fun. I made a bootstrap and jQuery clone that ended up quite popular. Since I have finished, it has been more difficult because of time and energy, but here I am, reading HN while working on my robot before sleeping.
I have given it a thought to ask for part-time working next time I am looking for a job to be able to focus on my passions on ny free time: https://codewithoutrules.com/2018/01/08/part-time-programmer...
That's where I let my creative and experimental ideas run free. Who knows, maybe one will become popular. Remember, it's quantity over quality with this kind of thing.
As for things you've been taught in college, and this is just my opinion: if you're being taught it in college, odds are there's about a thousand wrappers or frameworks to do the same thing without the need to about it. I doubt there's any demand for things popular enough to make their way into your curriculum. I'd say a lot of college is fluff and a waste of your attention.
For "normal" contracts, I'm usually leveraging open sourced libraries when possible, and implementing things in the most uncontroversial way possible. My main goal is to leave the customer with a product which does the job, performs well, and can be easily understood by the next developer to pick it up. In these type of projects, my main outlet for creativity is in custom tooling and workflow automation, not anything user-facing.
Other than that, I solve lots of interesting technical problems in my free time.
So, how is a person with an interest, at some time, to find the content for that interest? Uh, treat the interest as unique in all the world. Part of the challenge is meaning, how to get the content with the meaning they want?
So I used some pure math prerequisites and derived some new applied math for a solution. No, it's not data science, machine learning, artificial intelligence, cluster analysis, regression analysis, principle components analysis, classification, random forests, regression trees, discriminate analysis, neural nets, sigmoid function approximations, categorical data analysis, speech recognition, natural language processing, the semantic graph, etc. I haven't assigned a name to the math.
For users, the work is just an easy to use Web site, with just two main pages, very simple HTML, no cookies, no user IDs, and nearly no JavaScript.
The code is based on Microsoft's .NET with IIS, ASP.NET and a little use of ASP.NET. The total, on-line and off-line, is 100,000 lines of typing with a lot of in-line comments and about 24,000 programming language statements. There is also a lot of documentation external to the code.
I didn't use an "integrated development environment" and, instead, just typed in the code using my favorite text editor KEdit with some dozens of my KEdit macros.
So to me the problem has been interesting and so has the solution. Deep in the code is my new applied math. Also there are some new or tweaked computer science algorithms. As time goes on and I have a significant server farm, there may be more interesting problems with interesting solutions.
So far all the code appears to run as intended. It's my first code for this project and my first Web site, but I tried to write production quality code and not prototype code. And the site is supposed to be a good solution and not just a "minimum viable product". The architecture of the code and the server farm are fairly scalable just by some simple sharding. If this project gets to be a big thing, then scaling might become challenging with some serious changes in the code.
I'm a sole, solo founder and 100% owner.
I intend to announce alpha tests here on HN.
I left a well paid job in games to work in VR because I thought there was a lot of interesting potential for non games VR applications. Seeking out work that interests you does often involve taking on more risk and often a pay cut relative to 'safe' / boring software jobs, although perhaps with some chance of a bigger potential upside in the right startup.
Does your employment contract allow you to do this in your own time?
For me, I'm more interested in a particular domain, rather than the technologies around it. So, for example, I like marine biology, so the projects (and work) all revolve around that. You might like distributed databases, so why not work around that. Find what interests you, and move towards that direction. Some people have contracts that say that their employers owns all their work even when they are not at work, and some say they cannot do open source work, so this could be a constraint.
I'm lucky in the sense that I get to work on things that uses Gorgonia at work (though I don't actually work on Gorgonia itself proper). Took a helluva long time to get here though. And very many failures
Interesting technical problems are boring compared to meaningful problems - but there's hardly the money to improve society. Instead we get to put together software that shuffles money around or does the same thing as something else with some integration or blows up people in the middle east because that's what makes money.
2018 was the breakthrough year.
Happy about the accomplishment...but a bit sad the project is completed...
I would encourage you to look at computer science through a similar lens (pun intended). What human problem are you solving?
I think it sounds like you should find a job with more algorithmic challenge. Games, finance, insurance, simulation, engineering.
Or just work on write the libs and tools. I don’t want to write a sql query I want to write a sql parser.
I think there is plenty of work out that is technically challenging, but most companies want apps that do solve their business requirements. (Shockingly, they want to make money :) .)
But I've found that 10-25% of my time is spent on tough technical problems. They may not be pure CS, but architecture, optimization or troubleshooting are all tough and technical.
The quick summary is that you take audio files which you process then run through some models that do labelling and at the end you get out transcriptions in the international phonetic alphabet https://en.wikipedia.org/wiki/International_Phonetic_Alphabe...
In the past I've worked on things that were very boring but also things that were very interesting, sometimes even in the same company. Even if you structure your career to try to spend as much time on interesting problems you'll still run into some boring stuff. If you really want to work on interesting problems it will likely take some effort with deliberate planning and you may end up making less money than if you did other work but these are the decisions that you will have to make. Try to find things that interest you and give you opportunities to master whatever it is, this tends to make work a lot more fulfilling whatever you do.
Incidentally in this language project I've done some work on a Web API that's mostly routine but it's very satisfying because I can very directly see how it makes a lot of other people's lives a lot easier. There's some very clear impact there and it makes some otherwise routine things a lot more enjoyable.
So far it's all boring CRUD - but there may be interesting problems to solve as our team and product grows. I'm trying to position myself as the guy to tackle these interesting problems by taking a proactive role in planning and project management, without cornering myself as an irreplaceable part of the boring part of the business.
So mush optimism..... just check out the other replies on this thread. Good luck anyway.
> Most of my work seems to be boring CRUD work where the challenge is gluing libraries together or figuring out business requirements. Actual interesting technical problems seems to be mostly wrapped in ready-made libraries / SaaS services.
...isn't a problem. It's a sign of maturity of the field. In 2018 most problems that you can solve with a computer should have an off-the-shelf library or service. (And most of the job of most working programmers should be mostly selecting and configuring existing solutions according to known design patterns. Like most engineering.)
Second, you've got to take into account that NN/ML/AI et. al. is going to "eat" a portion of all programming work within the next fifteen years or so.
(I think we're due for a contraction of professional programmers, at least as far as the job has been done for decades.)
If you really want to tackle intricate problems you're gonna want to look at biology or nanotech. People in this discussion have already mentioned "matter compilers" and "systems biology".
If you really want to stick to Computer Science problems I would suggest coordination and control of swarm robots. (That's what I'm working on, FWIW.)
Are there any repos I should look at to learn this? How is this possible when even humans can't read sarcasm online? I'm genuinely blown that this is even possible?!?
"Richard Hamming : You and Your Research (1986)" : https://news.ycombinator.com/item?id=4626349
"Three Golden Rules for Scientific Research : E. W. Dijkstra" : https://news.ycombinator.com/item?id=1504402
And yes, gluing together libraries is part of the problem. How do you solve that problem. And no, your CS degree will not help you in the slightest.
It rarely happens. If working on interesting project is very important for you, you can do it as side project or start up. Or, seek out specific department in companies where such interesting work is happening. You might also have to sacrifice some amount of salary to work in such companies/startup.
Half of the technical work is built around compiler technology (and more generally the implementation of programming languages, such as the various runtimes). It's been fascinating to understand how widely-used programming languages are implemented, which I talked about in a blog post about inner classes in Java (https://blog.primitive.io/inner-classes-in-java-1804ed51b7de). Similarly, it's been great to look at large open-source codebases and try to understand them. For example, we dug around the internals of IntelliJ IDEA (https://blog.primitive.io/how-intellij-idea-knows-your-code-...).
It's true that we often use compiler APIs that are already available, but we still have to understand how those compilers work, and what language features we have to support in our data extractions. Right now, we're a small, scrappy team, but in the future, we'll surely have to build out more infrastructural technology ourselves.
The other half of the technical work is working with 3D graphics and in data visualization, another area of CS I really enjoy. Making code _accessible_ at a glance is always challenging, but when I get to use that visualization to understand new code, all the hard work is worth it.
Combining all this with the non-technical work a startup entails (business development, UX, etc.) means I get to really flex my mental muscles!
It's not that I don't care about my current job or that I don't do it well. It just doesn't involve anything even remotely interesting technically or socially. I work for a company that makes money. That's it. And I'm quite happy with that. I show up in the morning, do my job, and go home.
I don't have a wife or a family, but I do have me to take care of. And after years of neglecting myself physically and mentally, I'm taking the time to get some balance in my life. Get some exercise, spend more time with relatives and friends, more time with my girlfriend, and develop some of my own pet projects (both technical and musical) that I've been putting off for a long time.
You don't need an excuse to have a boring job that leaves you with extra time on your hands. It doesn't have to be because of a wife or husband or kids or a sick parent or anything. Taking care of yourself is a good enough reason to pull over into a slower lane or enjoy the one you're in now.
Most people are not really doing anything that interesting in the technology world. Many people who think they are doing interesting things are just hyped. The vast majority of the world's problems that can be solved by tech, have been solved. The only thing that's left is to implement them, and that's not super exciting a lot of the time.
If you feel the need to do more, you're going to find that need best met on your own or with a small group of friends working on projects. Most likely not at work.
All of the above help me with finding a new company in case the current one goes out of business too.
The jobs exist, but you have to get pretty deep into the right technical universe before you're the right person for them.
Think of it this way - an architect designs a house, it's fun, creative, but the work of actually building a house comes down to sawing a lot of wood, and hammering in a lot of nails. Even if we come up with some really cool solution to some difficult problem, the work of implementing it will be like building that house. Computer development is closer to a craftsmanship position than anything else, as pretty much everything is a one-off.
"Interesting" is also subjective. Have you thought about what interests you? Do you have a hobby or activity which excites you? If you find a job that intersects with it somehow, you will have a much more interesting job, subjectively.
So I guess the trick then is to work someplace where what you want to do is exactly the business problem they're solving. Anything that isn't directly their offering is likely to be farmed out, and I think that will only accelerate.
I don't know the right software analogy, but I wouldn't advise a client to research new ways to manufacture PCBs if all they actually need is to have working PCBs. But if their business model revolved around a new PCB manufacturing method, it would make perfect sense for them to hire me to help them develop that new method.
Assuming it's similar with software, if you want to research making databases run faster don't work for a database consumer, work for a database provider.
(Luckily, interesting technical problems in computing don't actually require resources, other than time, and their interestingness is their own reward, so it's not like I need or expect anybody to pay me to work on them.)
I am working with Julia migration from 0.5 to 0.7(beta) for a huge codebase, and currently contributing to the LibPQ.jl open source library that connects Julia to Postgres.
It was borne out of project need, but being able to help the open source project is very exciting for me.
Now I'm at another SaaS company that builds a CRM. Definitely less interesting on a purely subject/industry level but I'm happily learning new things that are personally interesting/satisfying - finally a chance to work with React, ES6, DevOps, even ML stuff. And just started a book club as well, going over structure and interpretation of computer programs.
Plus I gave myself a 50% raise and better benefits all around at this company - win win win. Granted I was obviously underpaid at my last job.
Don't stay if you're unhappy - there are plenty of places to work at that should keep you technically interested as a software engineer these days.
My technical knowledge/know-how (acquired over years of Linux, BSD, HN, etc.) still gives me an edge in understanding issues my clients face.
I'm not dealing with technical issues per se, but I can make the link between tech teams and management/non-tech: what one party expects from the other, whilst not sinking into a bottomless pit of unreasonable requests and expectations.
The work is fast-paced (~8 hours at most/project, over the course of ~3 weeks) so I have to adapt to a number of situations, where tech people might deal with said technical problems - and I can give them my 2 cents.
I'm also using my free time to work more on my machines, etc.
The results are promising, that is: not ready for production yet by a long shot... but the kinds of things that I expected to work well in the "change as a primitive" world actually seem to work well.
Company didn't want to spend millions in sustainable infrastructure and evolution (we found another company to do it, they threw big bucks! Wink!) and instead politics pushed things to wilder [IMHO, unachievable] ideas. But that's research nowadays: politics and money. Went into walking robots last year, and... similar result. Now in product development, gluing s/w libs and resoldering circuits from a CM overseas. What a roller coaster last 5 yrs. But it pays the bills.
Hard to do anything challenging today, once the MBAs and sales folks come in (now at very early stages) all challeneges get snubbed for the release date, presentation deck, ecosystem "messaging" and manufacturing.
Sometimes I feel this, which is exactly why I have multiple side projects which I can flitter between as and when the wind takes me. Like any subject, I think you need to remind yourself why you chose it and get back to the core of what you enjoy. I've not yet personally experienced burn-out in my job (and hopefully won't), but I can see people who have their work-job as their only interaction with computers and begin to resent it.
Depending on how much excess time you have, you can really float the boat out there. Time is the most valuable asset you have (which is what companies exchange money for), find a split between work, a hobby and socializing.
That was slightly off topic, wasn't it? ;)
Am I working on interesting technical problems? There were some interesting problems in the past, but I'd say just a few each year, which is definitely not enough. I still find it interesting to work on personal projects, even though they are not that different from the games I'm making at work. Just putting the game architecture together, so every part fits nicely into place, is still fun.
At least in the USA (and probably Israel and China as well), there seem to be enough jobs that need solid academic credentials.
Alternatively. keep the CRUD expertise, move into the business side (which is fascinating if you have an interest in how the non technical world works).
I'm working at a startup, about to go into college, and am worried about this myself -- I've already started feeling that boredom a little bit, even though I'm lucky to have a job this interesting at my age, and this is only my second real tech job. I'm planning on majoring in CS and MechE, which I think opens up some opportunities for combining coding and building physical things, which I hope I'll find more fulfilling.
I know I don't want to spend much of the rest of my life writing code that I don't really care about -- how can I avoid that?
The constraints of time and memory, really pushed me in revisiting a lot of data structures (mostly tries and DAWG), there is not much information out there, and not much libraries already build, so I have to get creative, read a few papers, tech blogs, etc and do it myself.
So, from what I'm reading here, the moral of the story is, probably you will find joy pursuing your own interests, don't expect to find tech–challenges in your average job.
It does sound undeniably interesting though.
My solution to this is to 1) gain rapport with executive level people and inform them of paradigm shifting opportunities and 2) do the interesting things anyways, when no one is looking... This requires you to master your current position to a point that you make free time within your working hours. Automate, clean up, pay off techdebt until you find it easy to deliver enough to keep managers happy. Then start to work on toy projects to prove out interesting applications of things.
I'm also working on an open source programming assistant to help automate that kind of joyless work so developers can focus on the novel parts of their projects. Hoping it helps people like you get back to what you value. https://github.com/opticdev
https://octavian.ai if you're curious.
It used to be even worse though - I spent almost two years maintaining and developing an 8-year-old JavaScript codebase. Sure, it was interesting, but in way I wouldn't wish upon my worst enemy.
Eventually I found an outlet for this need in my work after hours. If you're childless and your line of work is pumping out CRUD apps then you should easily have the capacity to spend an average of at least half an hour daily on interesting things. Embarrassingly enough sometimes I feel I've created more during these thirty minutes than a whole day doing the stuff that pays the bills.
(I thought it was something about listing answers underneath questions or something, woops.)
This is indeed a VERY interesting idea, as the whole of Stack Exchange has pretty much hit saturation point now, where 99% of questions have already been asked.
The main challenge is that only Stack Exchange has the page metric data :) indicating what pages of unanswered questions are being visited the most.
I started out as a simple PHP developer working on very boring server-side rendered CRUD apps, but pushed and pushed to get more responsibilities, and ended up redesigning those apps as a single-page web app with UX workshops determining the flow of the application. Later on pushed to be involved in management's research projects, which ended up landing me a job as principal architect of a hadoop-based IoT platform.
All the while the other developers at my company were complaining how boring their job was. You can lead a horse to water...
The next step was government contracting. That was a pretty cool company where we actually got the title "Computer Scientist," and it was pretty exciting as we worked on some interesting big data analytics problems and actually did some computer sciency stuff with natural language processing and entity extraction.
And that was great, except they started to have management issues. So I took a friend's advice and applied to AWS, where I got to work on a fairly new service team. I started to appreciate all the cloud hype, here we had a service that let you request specialized hardware on demand, so you fire a big blob of JSON off and set up a whole network in minutes.
After a while, the stress of the pager was getting to me, and I was tired of working deep on the backend and not being able to explain what I did to regular people. So now I work in consumer finance. I work on a financial methodology optimization engine. The problems are surprisingly fun, though it's complex as all hell and I'm procrastinating as usual... (And, granted, most people can't follow me beyond "oh, I have a 401k" but still.)
Moral of the story: at no point would I say I had a dream job, every one of them had some downsides and no one job used my CS degree to its full potential.
But in all of them, there were definitely projects where I felt I made a notable contribution. Over the years, I've definitely got my money's worth on that degree. All I've ever done is looked for interesting jobs, not so much asking "is this is my life's passion" but "are these people doing interesting things?"
(Another thought: some areas like government and finance are shockingly primitive, technologically. If you find a company that has smart people working in an area that's primitive, you can be one of the first movers.)
I've worked on moderately interesting problems in some positions, and I've also worked in positions where everyone with experience was sucked into fixing infinite streams of fuck-ups from junior developers and contractors, who end up doing all the actual development.
IMO, it mostly boils down to control. If you have control and you are knowledgeable, you can solve "boring" problems in interesting and fulfilling ways. If you don't have control over how you do your job, programming can quickly turn into glorified data entry.
This is a big assumption you're making, and given the answers, it would appear that assumption was incorrect from what I've read so far?
From what I can tell, most people don't find their work interesting but work for the money and find interesting things to do outside of work. The exception to this is probably those in leadership or research positions. At least that's what I have seen so far in this thread and also witnessed in my own experience.
I think we need to look at how any given company makes revenue. In most cases, it isn't innovation, just same ol' day by day. The only viable escape seems to be to run away with a startup (circus). They can be real fun, but many do flame out and crash. Hard to pick the winners with a technical viewpoint. Again, it comes back to business fundamentals and investor vicissitudes.
But, there is no way of getting the product into the customers hands, billing, support, marketing, etc. and all the other "boring" CRUD stuff that needs to be done to support the product.
This may explain why so much work is considered boring. Unless you have a highly specialized skill, and even then sometimes, expect the majority of your time to be taken up with more menial tasks.
Sadly, getting funded for such important missions seems hard somehow
My advice: get yourself working in a pharma company or a hospital. They need people with real software skills. The pay will suck, but you will be saving lives.
Since then, despite my best efforts to create technology that actually improves things, the things I make mostly just end up being co-opted to game bullshit metrics.
I think the truth of the matter is that most of the work that keeps the world running is just plain dull, and about 80% of it is just to make the people at the top feel like they're actually doing something.
There's many more options when you think in those terms. For example, decreasing ER frequent flyers through figuring out a way to measure and track patient's medication usage. That's a real problem that, solved, would save a hospital tons of money and dramatically improve the quality of life for many people (especially the poor/homeless schizophrenic community).
Have you tried looking here for inspiration? The challenges here may be less technical, but that doesn't necessarily make them less interesting...
If there is a 1% interesting part, and 99% boring parts, that is normal. I often have a interesting idea, and try it - this is starts out fun and interesting. Then I have to prove it - getting the benchmarks to prove it starts interesting but all the special cases I need to check gets tedious. If at the end of all that my idea turns our to actually be good I then have a lot more work to roll it out everyplace in our code.
Also, as an aside, I've found that "interesting technical problems" stop being interesting when you are building a product. The sexy stuff is finished very early on, and then the vast majority of time is spent on polishing/bugfixing/documentation and decidedly non-sexy stuff.
I have been able to invent my own projects along the way, such as mp3 to subtitles and a student portal for the college side of the charity. It's been really fun. However without writing a crud page for some new idea that someone has once a week I dont think I'd still be here.
I know that many of these consultancies exist where I am, so it should not be impossible to find something similar, wherever you are located.
The interesting problems being wrapped in ready-made libraries and SaaS services is an engineering success. As a profession we have managed to take a hard thing and change the cost of it from some number of expensive engineers for some years plus maintenance on it to $29.99/month.
But that means that if you want to work on interesting problems of this kind, you need to be in a company that is building that switch from requiring an expensive team to off the shelf. And to identify that, you need to have a broad understanding of your domain, and where the pain points are that are shared but aren't worth the money for individual companies to solve.
Or you need to be at a company that is big enough that it can afford to work on those problems. Boeing, for example, has dumped a huge amount of effort into spline libraries beyond what the rest of the world has. At their scale and for what they do, it was worth the investment. Facebook wrote a replacement database backend (RocksDB) because the space savings it gave them over InnoDB far outweighed the cost of having a team build it.
It's a well known fact in other engineering disciplines that all the detailed physics and math you learn in college isn't what you use most of the time. The Engineering Commons podcast has [links](http://theengineeringcommons.com/episode-124-mad-skillz/) in one of its episodes to a number of studies MIT did on this subject.
Your other option is to say, "I don't want to be an engineer. I want to be a scientist." And then you have to look into the rather fraught career path of a researcher.
Sometimes I work on my machine learning skills (CuDNN/caffe).
Sometimes I design high-performance FPGA boards that meet tight EMC tolerances.
Sometimes I build game engines in C++ with Vulkan.
I'd hate to do any of these things as a day job, that would take all the fun out of it.
I know it's not always possible to simply add "make my own job obsolete" to your own job description, but sometimes those who question how things are currently done are the ones who are asked to change it.
You should quit your current job and find a better one, as we’ve seen in this thread, many people are happy. Maybe it’s a technically challenging job, or maybe it’s a boring company but filled with meaningful work or inspiring coworkers. The job interview is your chance to find out.
In your next interview, mention that you wrote this post. If the interviewer responds “oh yeah, I read that and felt the same and decided to quit this job”, then great! youve learned that you shouldnt even bother finishing this interview. If on the other hand they say “oh, I read that and this place makes me happy” then it’s a good sign.
Take your interviewers off script and feel free to be straight and honest about what you’re looking for and what it’s like there. Nowhere will be perfect, but this is a great way to learn if this job will be a good fit, or another soul-sucking chapter of your life.
A word of caution: managers will bend the truth and tell you what you want to hear. Devs on the other hand will often be incredibly frank if you ask then a direct question.
(I had an interviewer at Google and I asked something like “you sound kinda down, are you ok?” and they told me about how they’re really depressed and their project is terrible and they don’t like their job)
When I interview, candidates will ask me questions like “wow, that problem-space sounds really interesting. Are you planning on adding machine learning etc?”. Recruiters will take this question and run with it, spinning an image of all the cool stuff you’ll get to work on at some future time. I just respond “honestly, no. It’s basically a CRUD app, the tech is nothing special but the area the business is in is very interesting and exciting and you might make a lot of money. If that’s not what you’re looking for, you probably shouldn’t work here since I can’t promise you’ll work on somethjng cool like ML and I’m not going to dangle that in front of you for the next three years before you bitterly quit”
That said, probably 50% of my job is involved with interesting technical problems, combining cloud scale analytics and machine learning in the engineering sector.
Eventually I decided that my world was going to be of my own making, and that I didn't want to spent it unhappy. If anything was going to change, then I alone was responsible for initiating that change in my life and my perspective.
I ended up quitting my job and going to Europe, where I worked with traditional cheesemakers. I learned how to make cheese, milk and to take care of livestock. When I arrived back in NA, my wife and I moved to a more rural location, bought a small herd of livestock and began building our own dairy. For me, working with the animals, and producing these rustic, old-world styled cheeses brought a lot of fulfillment to my life that I hadn't found elsewhere.
It's now almost 10 years later and we've just expanded our operations again. Our production will likely be 4-5x what it was when we started, and we have an incredibly supportive and dedicated customer base that love our cheeses. Being able to talk with them, make them happy, and get their feedback on our cheese is one of my favourite times of the week.
The last 10 years have held some of the most challenging periods of my life. I've had to learn and master entirely new skill sets - marketing, plumbing, veterinary skills, MacGyver'ing equipment to work for just another day before we can get it fixed properly. We've also had our share of the bad times - in farming, the unexpected happens frequently, and we've teetered on the financial brink a couple times. Certain aspects of what I'm doing now have also become, "just a job" - I don't really want to scrape livestock poop in the pissing rain, but someone has to do it. (And sometimes that turns out to be someone we hire to do it for us.)
I still pick up the odd tech contract during our slow periods, though those are getting fewer and further between. Turns out that tech wages pay for things a lot more quickly than farm wages, and a 2 month contract can pay for some shiny new farm equipment much more quickly.
I often joke with my wife that our decision to strike off on our own and start our own business was either the best-worst decision or the worst-best decision in my life; I just haven't picked which one it is yet. :)
Link to some of our cheeses and ladies: https://imgur.com/a/VC2aire
There are trade off for sure, but I would go back to building things in the physical world rather than program for any other reason. note: I have been happily at it for decades
If you want to do something cool, go do it! (on your own time, of course)
No one is stopping you, after all.
Money, Time, Fun. Pick two.
TL;DR: putting the laws into git
* My colleagues and I sometimes gripe about parts of the job, but we all agree we’re never bored. We are shifting to a new environment (new classroom) every forty minutes; there’s a ton of meaningful human interaction; and the life of the school depends so much on the particular kids in your classes / the whole school each year. And the pedagogical questions are really interesting, too (more on that in a moment).
* I’m lucky to teach at a school that supports a four-year computer science curriculum and has given me the autonomy to to do whatever I’d like with it. There are plenty of areas I didn’t study in my undergrad CS degree (networking & concurrency, operating systems, distributed computing/cryptocurrencies, combinators and monads) that I’ve had the chance to dig into (read about, plan lessons about, develop assignments and demos about) in teaching my more advanced students.
* CS pedagogy nationally is in a strange place. There is a political push (and a good deal of funding) to get CS in every K-12 school. But very few people trained in CS go into teaching, and there is little consensus about how it should be taught or what curriculum should look like. Companies like College Board, Code.org, as well as corporations like Apple are stepping in to provide curriculum and training to teachers, but these curricula (in my opinion) leave something to be desired, partly because these companies have other interests. For example, Apple wants everyone coding Swift on iPads, and CollegeBoard wants people paying for AP exams. Things are in such a state of infancy now, though, that by getting involved in the community (going to conferences, blogging, creating high-quality materials, setting and example in your classroom), you have a chance to join the debate & help build a better consensus around how CS can/should be taught. There are a number of people doing awesome work already, and several really stellar CS programs at high schools across the country. But we need more!
* It’s really amazing having diverse colleagues whose interests span many disciplines: I have colleagues who have PhDs in physics and English and Classics, who direct plays, translate poetry, write novels... In the tech industry, the majority is young, male, white or Asian, and consumes a similar “cultural diet” of news sources, books, movies, hobbies, etc. It’s nice to be somewhere a little less homogenous.
I took a job right out of school in the early to mid 90s doing boring CRUD work. I did it for 2 years and made a good living at it. But I wasn't interested in it. I learned a lot by going on site with actual users, but I knew I wanted to get out of doing that type of work.
I was pretty passionate about Mac development and decided I should be making a living at it. I ended up applying to a few different small to medium-sized businesses where my couple of years at a (boring) Fortune 500 company looked good. I found one that was doing boring Mac development, but it was Mac development. I took the job, and the work conditions were horrid. I left after less than 6 months.
Here's where it gets interesting. I specifically looked for jobs that weren't working on business or productivity applications. I really liked graphics, video, and audio development. (I had been doing some in my spare time and even released some shareware that never made any money.) Eventually I found a small company that did Photoshop plug-ins and printing-industry graphics work. It wasn't as cool as game development or visual effects, but it was pretty cool. The company, though, was horribly mismanaged (by a husband and wife team that ended up getting divorced shortly after I left the company a few years later).
After seeing how poorly run the company was, I ended up starting my own company writing video plug-ins. I also started going to conferences related to Mac development, graphics, and video. I made connections at these events. I also met people in real life that had helped me with programming questions online. I signed up to be on user mailing lists where potential and actual customers hung out to see what the problems they needed solved were.
I ran my company doing VFX plug-ins for about 5 years. While the company wasn't going broke, it also wasn't making any money. I decided to shut it down, sold the assets, and found a job working on a well-known professional video editing suite. I've been at that job for over a decade and love it. It has given me numerous interesting projects to work on. It involves a lot of the same stuff that game dev does, but without the crazy schedules. (Well, usually.) I do interesting graphics and video work. (I could probably do audio if I wanted to, but the graphics stuff is keeping me very busy at the moment.) In addition to the boring parts of just cutting together clips, I've written hundreds of visual effects filters, transitions, and generators. I worked in 3D, VR, AR, etc. I've learned an enormous amount of human biology (why do we see things the way we do), technical specifications (29.97 vs. 30fps, color spaces, etc.), algorithms, artistry (can I make a real camera do this effect? If so, can I imitate it with a virtual camera?), craftwork, etc.
When I was getting ready to graduate college, I really wanted a job like this. I went to a pretty good school (so, yeah, a little bit of lottery winning in there), but there were enough students better than me that I didn't get picked by the cool companies. But I went on to study the things I thought I would have done at those companies on my own and eventually ended up back at one of those companies I didn't get accepted to originally.
Every painful step along the way taught me something. I learned a lot about users, business requirements, and the development cycle from the boring Fortune 500 company. It wasn't interesting stuff, but it was useful and important. I learned not to waste time with poorly managed companies at my first Mac gig. I learned a lot of graphics stuff writing Photoshop plug-ins. And I learned how to make connections, and figure out what users want from running my own company. And now I have what it takes to work where I wanted to work in the first place. It took me about 12 years from graduation to starting this job.
Ditto! I operate a consultancy which does this for every company, most of which are non-profits. We do CRUD apps on nearly zero profit margin.
High tech fun stuff
We've another ad tech company, where we are writing lots of Rust and Go code. And some auxiliary products which are lot more fun.
I think it's quite difficult to find everything at once place.