Can you really even master something like software development where things change dramatically almost every year?
Can you really even master something like software development where things change dramatically almost every year?
I truly can't understand thinking this. I've worked in software engineering for over 10 years now, at a wide range of companies from tiny startups to large tech cos. We easily make 2 - 5x more than the median wage, work indoors in a comfortable environment sitting (or standing, for anybody who prefers) all day with high end ergonomic equipment, often get unlimited vacation time, can often choose not to work more than 8 hours a day if we don't want to, and all while doing something that many of us got into simply because it was a fun and engaging thing to do. And just in the past year millions of software engineers have gotten the option of doing this fully remotely, freeing them up to live anywhere they want and never have to commute. What a time to be alive!
Comfort doesn't have a lot to do with burnout or job satisfaction unless you're coming from a blue collar mostly manual job.
> many of us got into simply because it was a fun and engaging thing to do
That's one of the problems. For a lot of folks, it was exactly that 'was a fun and engaging thing to do' and then you get do it in the context of office politics, tight deadlines, need to sacrifice professional ethics and ship something half-assed because that's what the business needs, etc.. These things, repeatedly chip away at your happiness. Would you be more unhappy without the ergonomic equipment and all of that? Most likely yes. But ping-pong tables and the unlimited vacation (which is at the discretion of your manager anyway) doesn't always compensate for shit work or the nervous breakdown from having to sit on an incident bridge for 4 hours...
I need to admit, I love my job and I love this profession. But I do understand when people say it's draining.
Oncall is somewhat unique, and that can be tough, but if it's particularly rough and there is nothing you can do to improve it that's a good sign to find another company (or perhaps another specialization within programming) because it doesn't need to be that way. Incident response is mostly a self-imposed stress, and I've found it to be something that you can learn to manage better and not let it affect you so much, by being prepared with good playbooks, as well as accepting that it's not the end of the world and that all you can do is try your best.
I'm not denying that life itself can be draining. Working any type of office job can be draining. I just don't see how programming is particularly more draining than all the other jobs people do.
Sure, some devs become managers but there are only so many managerial jobs. Some also drop out but not in vast numbers. From my own experience, I see quite a few of devs my age (40) and older. For the most part we're senior engineers, some are managers. I don't know anyone who's left the profession. Just my anecdotal evidence but I do feel this phenomenon is overstated.
I'm a Scala developer working on fairly typical, distributed systems / web apps. I have no plans to stop Scala since I love it but any JVM language would suit me. I'm also into system design / architecture in the distributed system, "reactive" architecture domain. Those are the systems I tend to work on, massive web apps consisting of many microservices.
I'm always learning and trying to be on the edge of my comfort zone which is key I think. If I'm not messing with Scala then I'll be learning more about Kafka, Docker, SQL / Mongo, Terraform, AWS and a bit of Linux.
I'm far from a master in any of these things and I don't think I'll master many which is fine. I know enough to do my job and I keep on learning but the breadth of what I have to know is too broad to master it all. My true passion is programming, particularly functional, and I would love to master that for myself as much as anything. I guess you have to chose where to go deep and where to go for breadth. You can't master it all!
Scala is an absolutely awesome language, one that I love. I've had some of the best times building distributed systems with Scala + Akka and frankly would have loved to lean into that ecosystem and become a master of it.
Unfortunately, the market for that specialty is relatively small when compared to the broader software engineering market. I worried about specializing in a language that was niche. Compare it to, for example, the need for React, React Native, or even simply Java.
I have chosen to be very flexible in my career and learn many languages, across many domains. This, I think, is the source of some of my feelings of burnout in my 30s. It's just a never ending grind. When I do find a domain that I really love, like firmware, or Scala... I'm forced with the difficult decision of depth v.s. breadth and breadth always seems like the "safe" route, especially if you're willing to jump between frontend or backend and whatever is the flavor of the week as far as frameworks go.
I've heard horror stories of engineers who dug into their tech stack and never really kept pace with the industry, only to find themselves disposable, and inflexible, in their 40s and 50s. Whether or not those anecdotes are worth worrying about is certainly up for debate. I tend to be a worrier so, it's no surprise I've chosen the safe route.
As for specific languages, as long as you're aware of a couple of paradigms, eg OO and FP, I figure it's not that hard to switch. Once you've mastered one or two languages you can generally be productive in another relatively quickly. We don't necessarily hire Scala devs for example, just engineers we think we can train up.
I'm lucky in that the Scala job market is hot in London but I'm fully prepared for that to change one day. I'd probably target Kotlin or Java jobs if that happened but also open to anything interesting job-wise that will have me. I have my tech preferences but if I need to switch, and someone will allow me to learn on the job, then fine!
I've learned 7 programming languages, COUNTLESS frameworks (both backend, and frontend), across many different domains... frontend web, native mobile, hybrid mobile, backend, even dabbled in firmware for a few years. All of these in a professional context, where I was shipping real live code.
If there's been one constant in my career it's been change. Change is constant. I can absolutely expect that in a given ~3 year timespan, I will need to learn a new language, domain, framework, etc.
The result is absolutely that I feel like a jack of all trades, but a master of none. I can pick up new languages and frameworks quickly, but I don't ever feel intimately familiar with any given language or framework or domain. I don't feel like a "master" of anything other than, perhaps, mastering the ability to learn new . It sucks.
Perhaps not coincidentally, I've struggled with feelings of burnout. Looking back on my career over the last 10 years, it feels like a constant sprint. Of course I'm a better developer today than I was 10 years ago, but I know that the future only brings one thing: New technologies, new frameworks, new languages. I will need to learn those, and only a fraction of my current knowledge will apply.
It's hard not to feel like you're treading water in this industry. I can learn anything, but for long? For how many years, or decades, am I willing to do this? It feels like I need to either accept that this is the reality of this industry, that the biggest skill I can have is willingness and ability to learn, or, accept defeat.
Jokes aside, the grind and churn is real. Just try to find a job without the fad chasing.
Most of my team are 40+, we're doing fine.
> Can you really even master something like software development where things change dramatically almost every year?
This is a good point but things don't change that fast.
I'm 32 now, have been doing this since 20, and (I think/hope) mostly kept up to date, but I'm also single/childless lol.
Also, as you move up, you inevitably end up managing/mentoring younger devs (unless you have terrible people skills or something), meaning you spend less time actually coding, this also makes it more difficult to keep up to date (in detail, you still know what's going on, but have less experience implementing).
To be fair, terrible people skills could also apply to still being single/childless at 32, I hope not...
You can somewhat mitigate this if you want to still keep your hands in the code by finding the intersections of two or more tech stacks that take two or more others to even approach. The inevitable impedance mismatch between say two stacks means that one person familiar with both is usually far more effective than two people who have to feel their way through the mismatch.
As a senior in this position, you often get to do the "fun" parts of throwing together a proof of concept, validate your mental model of the impedance mismatch, outline the details to iron out (usually known-complexity work like documenting, hooking up to various plumbing for unit testing, tracing, logging, monitoring, internationalization, etc.), and go on to the next fire to help put out.
Even though the frameworks and languages in vogue change rapidly, the patterns and logic seems to be very similar. When I have to learn a new language now it's more a matter of researching the syntax and idioms rather than learning from scratch.
after some point there's not much one needs to learn to be productive.
I feel no pressure not knowing vue, django, fp-ts, rxjs, Rust, Zig, C++20. Rarely there's something you can do with new stuff that you can't do with old.
I think you probably meant "than"... although that may be profound the way you spelled it.