On the job side, this is a scary consequence of specialization. If you can learn a job in a day or a week, you can go where opportunity is. If it requires a degree (or a graduate degree!) then you're so much more stuck.
I've wondered if this is part of the reason for high software salaries. When so many industries needs software, developers can hop from the failing industry to the lucrative one, forcing more efficient competition. Not so for many careers, where the skill set and the industry are tied together.
I'd bet the whole second chance thing gets more brittle as competition and specialization get more important in general, even beyond jobs.
> If it requires a degree (or a graduate degree!) then you're so much more stuck.
That's a situation I've been in now for a few years now. I'm somewhat burnt out on software engineering, but the last 13 years of work history, a bachelors in CS, and about half a PhD in theoretical CS, my options on who will hire me are kind of limited.
It seems like my only options are:
1) Start a fresh career with a fresh new degree and accept about 1/3 of my salary that I have now for the next 13 years after that.
2) Take a career in non-degreed labor and probably permanently have about 1/3 of my salary.
3) Try and pivot into the management side of things.
4) Start a business.
5) Just live with it.
Since I don't really want to take a loss salary for 13+ years, I'm extremely risk-averse, and I don't want to become a manager, I'm more or less stuck with option 5.
I like software and computer science, but "software engineering" barely counts as either. I expected to be utilizing a million data structures or figuring out proofs of correctness or designing the next amazing distributed system, but it feels like 2/3+ of software engineering is "add field to JSON" or "write a for loop to convert something to a different shape" or "change color of button" or "change width of page layout and then modify selenium tests", and the only data structures that ever get used are hashmaps and arrays. I spent so much time learning the minutia of CSP and TLA+ and set theory and I feel like I have basically nothing to show for it, and now I can't really even change to a career where I would get to use them.
Not that it's really a thing to complain about; I'm pretty lucky to be in a postion where I make about 3x more than I realistically need, so I'm not really trying to garner sympathy, but it's also a situation that becomes kind of easy to burn out on, and sometimes it depresses me more than it really should.
If you are really making 3x what you really need, you should be building wealth at a rapid pace. Once you are financially secure, you can stop doing unfulfilling work just because the pay is good.
I 'retired' early because I don't need to work for anyone anymore. My wife and I saved and invested so we are set financially. I still love to program so I spend my time and energy working on a project that is personally fulfilling to me even though it has yet to bring in meaningful revenues.
BTW: it is a new data management system that is designed to be a distributed system. Have you considered teaming up with someone on a side project?
> If you are really making 3x what you really need, you should be building wealth at a rapid pace. Once you are financially secure, you can stop doing unfulfilling work just because the pay is good.
I didn't word it terribly well, so apologies for that, but for "really need" I was talking about subsistence wages in this case. I make perfectly fine money, and I do save/invest as much as I can, and I do own my house in NYC, so I do alright. I do hope to retire somewhat early, at least by American standards, but it's not like I'm making "fuck you" money.
> BTW: it is a new data management system that is designed to be a distributed system. Have you considered teaming up with someone on a side project?
Outside of something I did with my dad a few months ago, not really. I have a decent job now that's not psychotic about non-competes, so I've been ramping up to build something.
Well, I think the suggestion remains: live on subsistence income whilst working for as long as it takes to be able to live on subsistence income whilst not working. (All the while you can be attempting to effect changes that allow you to earn more than subsistence income at something you enjoy going.)
Yeah, I don't really disagree; I'm still trying to get out of debt from the six months I was unemployed last year (which also ate a bit into my savings, but I live kind of boring so it wasn't super bad). Hopefully that should be coming to a close pretty soon (even sooner if Gemini actually reimburses the money that they ponzi'd out of me like they claim they will). I've been trying to invest in a combo of relatively-low-risk ETFs (VOO and VTI primarily) and US Treasury Bills, to give myself a combo of potentially-higher-than-inflation-reward but also zero-risk-and-still-higher-than-bank-interest money.
Once my wife starts working, we figured that we'd put nearly 100% of her paycheck into some forms of savings to accelerate the process a bit further, since my salary has traditionally been enough to cover the bills. I'd like to have enough money to retire comfortably by my mid-to-late 40's. I think that's realistic.
2023 was one of the worst years of my life, maybe the worst. It was really horrible being laid off twice and having to spend so much time on LinkedIn and doing Zoom whiteboard interviews and waking up to dozens of rejections every morning, not to mention that being laid off twice in a year makes your resume look insanely bad (each stint being about 3 months). As a result, I think I've become more frustrated than I probably should, and grown a strong resentment towards companies, with a nearly-complete lack of optimism that they'll ever do anything even remotely actually-technical.
My current gig seems a lot better but I've learned my lesson about getting my hopes up. We'll see if it lasts more than three months.
The statement "my options on who will hire me are kind of limited" is a bit misleading. Limited compared to whom? Your options are abundant compared to most people.
It sounds like you are waiting on a fantasy position that has both interesting work and pays at least the same as your current position, which you have 13 years of experience in. That's not usually how life works. There are trade-offs.
If you want to do a different type of work that you don't have any professional experience in, you are going to have to take a pay cut. As you mentioned, you're fortunate to be making 3x what you need. It's up to you whether it's worth "only" making 2x what you need in order to do work you find more engaging.
This is not a unique circumstance. People make this trade-off all the time. Maybe talk to some people who did.
> It sounds like you are waiting on a fantasy position that has both interesting work and pays at least the same as your current position, which you have 13 years of experience in. That's not usually how life works. There are trade-offs.
I mean this with all the respect in the world, but no shit. That's what I'm frustrated about. I feel like the entire thing I wrote was specifically because I am aware of these tradeoff. Just because the tradeoffs exist doesn't mean I have to like them.
I know that my dream job doesn't really exist, at least not in numbers large enough to even bother considering, and I'm not naive enough to really think that pivoting to another career will suddenly solve all my problems and frustrations.
> I like software and computer science, but "software engineering" barely counts as either. I expected to be utilizing a million data structures or figuring out proofs of correctness or designing the next amazing distributed system, but it feels like 2/3+ of software engineering is "add field to JSON" or "write a for loop to convert something to a different shape" or "change color of button" or "change width of page layout and then modify selenium tests", and the only data structures that ever get used are hashmaps and arrays. I spent so much time learning the minutia of CSP and TLA+ and set theory and I feel like I have basically nothing to show for it, and now I can't really even change to a career where I would get to use them.
So, around 6-7 years ago I was on a development team and was getting tired of a bunch of things - the frontend treadmill (react/redux, do it this way, no that way, then a few months later there's a new "right way"), how we kept getting new product owners and the "vision" was lost so we were just reacting to customers (and kept remaking the same pages but differently), and a slightly more personal one (no one liked my idea for one of those pages, then a few months later our designer came up with the exact same thing, no one remembered mine, and the page has been unchanged since). Our company was also drifting heavily into silos during that time, some people were frontend-only, some backend-only, where I like the whole stack and didn't want to limit myself.
So after all that I did something that surprised and confused my manager: Asked to get moved to the maintenance team instead of new development. They were intrigued because apparently that team is where new hires often ended up, and they almost never had someone experienced on it - which surprised me because I figured that job would be harder than new development. So far I've been on this team longer than any others and have yet to get tired of it. I know some of it is how good a manager we have, but the work is also very directly about fixing things. It's much more self-directed, no product owner initiated rewrites on a whim, large projects still happen when something is really bad, but because it's considered legacy there's no treadmill-chasing. And the random fixes can end up anywhere in the stack, so I get to keep using everything I'd learned from linux through the database and server to frontend, instead of sticking to a silo.
So even "5) Just live with it." does have sub-options.
I've debated doing that exact move as well, simply because I do enjoy making "incorrectly" designed code "correct", by either moving to a simpler model or utilizing a more tried-and-true way of doing things, and since no one wants to be in "maintenance" it might afford me some more freedom.
At a previous job, I would occasionally spend time on the weekend rewriting and simplifying code because there wasn't really a "maintenance" team and I knew the only way that it would ever get better was if I fixed myself on my own time. I've since drawn a line in the sand that I do not work for companies on weekends but I did sort of enjoy that process.
I guess you’re in USA. Luckily I am in poor Germany with way lower salaries. Which opens me another option
6) go into trades. Becoming certified electrician takes a lot of time or money or both. My university degree with an expensive course was enough. Salary stays the same as long as I am self employed.
Otherwise 5) since 4) does not really work for me. Helped too many brilliant guys as an electrical engineer. Products got traction, but nothing big happened.
This is your chance to decide what your values in life are. Money or fulfillment. Maybe you can alter the software job somehow to make it more fulfilling to you. An organization with a purpose or mission that you believe in. A role with different type of expectations or work. Maybe writing on the side or starting a family.
I think Americans are kind of trained by the propaganda machine that you need to find fulfillment from your job, but fundamentally I think you're right and I need to take things into my own hands.
I have a few ideas that I think I might be able to turn into papers, and might even be able to get them published in a real journal. I doubt that my current gig will have too much of a problem with that (they're much more in the chemistry/healthcare space than pure CS), so I might be able to have some fun with that while giving myself an excuse to use pure math.
Possible other option: I hope to soon go part-time.
IE keep my current job with the pay rate, but change the balance of hours worked.
And if it doesn't work how I like, go back to full time.
I like the idea of studying physical design... but we'll see how that pans out.
Yeah, I've debated doing that; just doing contracting work half-time and spend the other half of my time focusing on the stuff I actually enjoy. The thing that stops me is health insurance.
My wife is wrapping up her school this year, so once she's working then I might be able to use her insurance and give this experiment a try.
> Insurance is a fair point I hadn't thought of. I guess there is some link between "full time" vs "part time" and insurance in that sense.
It can depend somewhat on the job. When I was a part time adjunct last year teaching two classes (six credit hours) at a public university, I was given the option for health insurance. I don't remember what the premiums were but I remember they were lower than marketplace plans.
> I assume it isn't worth being "part time" and paying for the insurance gap out of pocket. Bargaining power tends not to work that way.
Since the Affordable Care Act, the prices are somewhat more regulated and they're not really allowed to "decline" you anymore, so the "bargaining power" thing isn't as bad as it used to be. Paying out of pocket for insurance is expensive but not insurmountable for basically anyone working in tech, and certainly you can factor into an hourly rate. In NYC there's the MetroPlus system, and the cheaper plan on that is around $1250/month for two people, which equates to roughly $15,000/year [1]. An employer plan in NYC will still typically have anywhere between ~$100-$600 monthly premium for a family plan, so anywhere between $1200-$7200 per year of just premiums (not counting what you pay before reaching your deductible), depending on the company and which plan you choose within the company. The US healthcare system is needlessly complicated.
Still, it would certainly be better to not pay $15,000/year if I can avoid it, so before I try doing half-time contracting I am going to wait for my wife to start working.
I'm in the US. I just had to turn down my dream job because it doesn't have health insurance benefits. The cost of insurance on your own is so ridiculous that we were around 35k apart in salary just to make up the insurance difference.
Obviously don't dox yourself, but roughly where do you live? I just looked up insurance premiums for Oscar Health and it was $2,000/month for one of the budget plans, so about $24,000/year?
It can be extremely variable between cities so I'm not saying that this applies to everyone, but when I checked against my NYC zip code, that's the number it gave me.
There's no requirement to put qualifications or experience on the CV that aren't necessary for the role. Hiring managers make a lot of assumptions, and if specialisation is going to limit opportunity then leave it out.
There are jobs (e.g. database engine development) where knowledge of distributed systems algorithms comes in handy. Most likely not nearly at the level of your theoretical PhD, but also much more stimulating that adding fields to JSON.
I've never worked on database engine stuff, so I cannot speak to it, but I've worked a million jobs, many of which have titles like "Distributed Systems Engineer".
My frustrations come from the fact that "Distributed Systems Engineer" seems to broadly translate to "we use Kafka to glue two services together" for most companies. While that can still require some level of clever engineering, it doesn't really require a ton of theory. At multiple companies, when I do on rare occasion come across a project that requires some more elaborate planning, I will try suggesting using TLA+ to test things out, and management will look at me like I suggested kicking a puppy or something. "Math" is sort of a dirty word in industry, at least in the places I've worked. Maybe I just don't do a great job selling it. In every single job I've ever had, I've always been "that weird math guy", despite the fact that I really don't think I suggest anything that arcane, at least shouldn't be to a software crowd.
Again, it's hardly something to complain about; "Woe is me, I'm making yuppie money but I don't feel fulfilled all the time". It's just something that annoys me.
Lots of us are increasingly interested in formal methods coming out of the labs and ivory tower and seeing more casual usage in industry.
But pitching this sort of thing to management is hard, where if they’ve heard of it at all then they associate it with big brain critical path shit at the highest levels of huge orgs like nasa or aws.
Can’t blame people for not seeing the value yet though.. we need to make things easier/cheaper. Plain old testing is often seen as a cost/effort sink that dev teams and management resent and so of course Model checking looks like a whole different layer of ambiguously-worthwhile effort.
Mere advocacy here won’t win people over, because they care more about costs than “correctness” as an abstract virtue. We probably need progress on things like generating code from models and models from code if we want to see more adoption
I agree, and part of the issue is that if the formal methods work as intended, then by design nothing interesting happens, making their success less visible to managers that aren't paying close attention. Ideally something like TLA+ would catch a bug that you wouldn't notice for multiple years (e.g. infinite money glitches), but that means that value becomes less obvious because it can take multiple years to manifest, and that means you're waiting multiple years for TLA+ to show its value, which would be "nothing happened", which can be harder to measure.
I've debated trying to write a PlusCal->Java transpiler [1], and I haven't really ruled that out yet; while I don't think it should be necessary to have that for PlusCal to be useful, I think it would potentially sweeten the sales pitch.
[1] I think PlusCal would translate better to a sequential Java style program than raw TLA+ would.
Why don't you try using PlusCal/TLA+ on some portion of the code at work (if you still care to stay there) to prove its effectiveness? Whittle down the code to something basic to show how it'd work so your manager/co-workers can see for themselves on code that they're reasonably familiar with.
Unless your manager/colleagues are intimately familiar with such tools, I'd think that your touting their usage at work, is more like wishful thinking.
Just do the math and don't worry about management. If you are generally productive you can take a quarter here and there to focus on a thing only you know the value of.
Yeah, I've taken to occasionally testing some of the simpler stuff I write in PlusCal without telling managers. If they think I'm dicking around with "theoretical" math stuff they might get annoyed but if I submit code that works correctly within a deadline I suspect they'll be alright.
My long term plan on this is to submit a bunch of code that works correctly the first time, and eventually once I am established at this job as "clever" I'll reveal the PlusCal/TLA+ specs and hopefully have a decent sales pitch.
What you’re describing are just run of the mill backend jobs. They aren’t very sophisticated in terms of algorithms or theory. What I had in mind is working on say Cassandra or ElasticSearch, or internally within FAANG on one of their database engines. If you’re high enough there (which, granted, may take multiple years) to decide on the future direction of the engine, you get to ponder a lot of theoretical or at least very complex stuff.
I did try applying to MongoDB a few times, even made it relatively far in the interview process both times but eventually get the "We regret to inform you..." emails for it. I also failed a phone-screen for CockroachDB though I'm actually not 100% sure why. ElasticSearch never got back to me. I certainly applied for these kinds of jobs (and many, many more), but there's not much more I can do than wait for the companies to recognize my brilliance.
When I worked at Apple I did an internal interview for a team that worked on a distributed-RAID-style thing, did really well on the interview, almost got to the offer stage, but then they saw the previous year's review where I got a "Needs Improvement" for (I think) purely bureaucratic reasons that I've talked about on HN before, and they decided not to move forward.
It's tough, because I think a lot of those jobs are in pretty high demand, and as such a lot of really qualified people apply to them and they can be picky, and I don't really blame them for that. There's a lot more generic unsexy backend jobs.
What I'm describing is friction. In a market where demand changes over time, supply friction affects efficiency. The time scale over which the market reaches equilibrium and that time scale's affect on the people providing supply is what I'm talking about.
I've wondered if this is part of the reason for high software salaries. When so many industries needs software, developers can hop from the failing industry to the lucrative one, forcing more efficient competition. Not so for many careers, where the skill set and the industry are tied together.
I'd bet the whole second chance thing gets more brittle as competition and specialization get more important in general, even beyond jobs.