I see a lot of newer and intermediate software developers proclaiming a big interest in an array of emerging fields. AI, ML, you have it. For better or worse, it is hard to know when the right time to "catch a wave" on trends is, but I believe our "fear of missing out bias" leads us to make a lot of bad choices and generally learn at a slower pace. As exciting as certain trends are, I also believe a lot of companies prey on newer developers for the purpose of building hype and ultimately selling something.
If you're listening for every signal, you are going to fry your brain and learn very few things at all. It takes a long time to be a highly-effective software developer and chasing too many trends can stunt your growth.
"Stable" technologies are a great place to get your hours in writing clean code. I won't define what is "stable" and what is not, but it's a shorthand for "years of reference material and plenty of established use cases". These technologies are often declared "dead or dying" only to live long after their presumed replacement fades away.
Paradigm shifts are not nearly as severe as they seem. I notice a lot of developers are worried about spending too much time writing object-oriented code when they might be missing the boat on functional, due to its (well-deserved) resurgence. But this is missing the point in many cases. That is not to say that trendy domains are inherently not stable. Functional programming itself is plenty stable and not a trend at all, just don't go chasing shiny objects. The principles of OOP are very much worth your time to learn.
The coding hours you put in with more stable tech mean better verification of correctness due to the great amount of literature and experts in these areas and more chances to master the act of writing code for the consumption of other humans. Practical software development has always borrowed from multiple paradigms and you will find it possible to move between them when natural glide paths arise. Forcing this out of fear of being left behind is not helpful.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
β Martin Fowler
I too am very excited about all the fascinating new technology in our field coming out every day, but the most impactful skill I can continue to learn is writing better code. If I learn to recognize good code in a stable environment, I can apply these skills when the parameters are less defined.
Please, stay excited by the trends, but be impassioned by the small improvements you can make in the quality of your work. This will enhance your ability to contribute and evolve. If you nurture your fundamental skills, your radar for trends worth paying attention to will become stronger and when you do choose to jump in on something that piques your interest, you can do so with more confidence.
Top comments (19)
Please send this out to recruiters and hiring managers who have come to demand highly specific skill sets to even get your foot in the door.
Can I like this post twice?
This is exactly the principle I try to practice too. Every day, there's so much buzz about AI, ML, PWAs, Web Assembly, Bitcoin, blockchain, and now something called quantum computing. Every new thing is heralded as the "future of software development". These are very wonderful technologies, but they used to overwhelm me, until I realized it's best to be focused. One step at a time. Choose a path and grow in it, while merely observing others.
I just have to be careful so it doesn't just end up as me refusing to leave my comfort zone.
There's the heart and the unicorn, so yes. π
This is big. I read a lot of dev.to posts on areas I don't do any work in, and this is just right for me. If I get involved myself I have lots of cues for where to look, but I don't overwhelm myself by getting involved in every new thing. And it's especially troubling for newbies to think they need to based on FOMO and other (very natural) insecurities.
I find the way this goes is that I get this way from time to time, but break out of it naturally and ultimately the right things find me at the right time.
This post was inspired by observations of some newer developers getting spun around about all the emerging stuff and feel like they have to learn it all before being ready to contribute to the kinds of problems they'll have to face for the rest of their careers. This applies to everyone, but new devs: Slow down and get productive with the old stuff. It ain't going away any time soon and when it does come, you'll see a lot of familiar patterns.
Yupp! Spot on
Perfectly said!
Might I share a link to my review of Code Complete. It's the best book I read last year. Steve McConnell taught me many timeless lessons about programming.
Timeless book along with the progmatic progammer and clean code. Have to check out you review
I was introduced to the "squirrel problem" a year ago, and wrote about it on medium.
But YOU, YOU explain it so much better.
THANKS
Excellent post, well said. Knowing the fundamentals gives you confidence that you can always pick up the next big thing even if you skip the current trend.
Hands down the best Dev.to post I've read (and I've read some good ones).
Damn, thanks Evan!
A perfect article for me. Thank you Ben. You deserve more than a π. I'm gonna circulate this to my friends.
Well put.
The same goes for other tech-stuff. Maybe there is a new camera out with a lot of new fancy features but your old camera is still the same and will always be as wonderful as when you bought it.
OOP was great when you learned it. It is still the same.
I think this entirely depends on your job title.
If you're just an engineer, don't fall for every trend. Don't even look at every trend until they're big enough to have impact on your work. When the trend is young, documentation will suck and the tech might be useless. When the trend grows, support grows, documentation becomes better and the tech will have time to prove itself.
If you're a CTO, look at every trend, evaluate them and implement them if necessary. You don't necessarily have to care about the future of these tech projects because you're moving quickly enough to phase them in/out at the right time. If a new language, framework or concept allows me to build my MVP or new functionality a tad quicker or more efficiently, I apply it (after a little due diligence.) This does require a relatively modular approach. All our functionality runs off their own applications so I could use 12 different languages and still be fine. Just don't require that skillset in future hires (yet), because they're not going to know it yet.
Really good article. I can relate it due to the fact, that I spent most of my last year trying to learn Angular+Typescript+ES 6+Webpack. But it just became too overwhelming for me after a point of time.
After that I switched to Azure which I am actually working on, and it added value to my existing work.