I was leafing through an eBook copy of The Passionate Programmer by Chad Fowler last night. Overall the book has some good advice for programmers who want to get better with their craft, but one section of advice really irritates me, in part because it's reminiscent of advice that I've seen foul up a lot of beginning and professional programmers. The advice (paraphrased both from the book and the advice I've heard) that you note the trends in the market and adapt what you learn to those trends. The example in the book is about the folks who took a chance on Java and .NET when they were new technologies and had it pay off for them with new jobs and new opportunities. A counter-example was BeOS, which seemed like a really great bet and could have paid off big had Apple not decided to purchase NeXT (Steve Jobs' other company) and adapt that into MacOSX. The book does go into the risk / reward of such a strategy, but there is a downside that I don't think folks take into account when following programming trends. Yes, there is career value in being at the head of the curve for technology, and even some value in being near the middle, but when a technology its maturity and businesses adopt it then it becomes a liability. One of the ways it is a liability is when recruiters and businesses only see that part of your resume, and not the other skills that you might be able to learn. Another liability is when new developers start picking which technology to learn. These developers survey the job market for what they should learn and come away thinking that they'll be set for a while if they learn something like Java because there are so many jobs with that as a requirement. I've met them at our Coffee House Coders gathering. They're eager to learn languages like Java so they can get a job. Unfortunately in this area Java is a mature technology, so the jobs that require it are the places that aren't going to cultivate the excitement required to sustain a developer through the next 1-5 years of their job. Without that excitement they'll just spend their time grinding away at meaningless reports and tasks. Maybe they'll spend their free time learning something else to find that new market opportunity, but if they don't they'll spend the rest of their career being miserable.
I might not be the best person to ask for career advice. I've been laid off several times, and spent over a year trying to land a new job after my last lay-off. Perhaps I've missed some key element of letting the market dictate to me what my career should be. But I do know what makes me happiest while programming, and frankly the market tends to be diametrically opposed to what makes me happy. It thinks that Microsoft products are brilliant, feels that Java still has plenty of gas in the tank, and relegates my Python skills to DevOps or data science (both of which are not a large part of my skill-set).
The main reason for a lot of this confusion is because programming can fall into three different categories: passion, career, and job. Unfortunately we tend to conflate all of those categories together so that we only think of being passionate about programming. Being passionate about programming doesn't mean I'll have a career programming, it just means that I get excited while programming. Focusing on my career as a programmer doesn't mean I'll find my passion in programming. And certainly treating programming as a job isn't going to feed my career or my passions. They're all separate ways of thinking about the practice of programming. It's when we look at them distinctly (what am I passionate about when I program, what could my career be while I program, and what is my job while I program) that we find clarity.
My passion is games programming. I have yet to turn that into a career (and will likely never be able to, but I might still have time). My career in programming is littered between using programming for system administration and building interesting projects. My job while programming is to turn the requirements from my clients and customers into code that meets and exceeds those requirements and delights the users.
When we think of ourselves with these three different lenses (passion, career, and job) we can inform our decisions on what we'll pursue next. If we think about our jobs we can think of tools that might help our customers to do things better. Perhaps there is money and time to make new systems that can explore new technologies. That could help our career, as we get more experience with things that make us more valuable to the company and our communities. That could also feed into our passions for learning new and exciting technologies. Conversely, if we let the job market dictate what we learn perhaps we'll try to fit some new technology into our workplace whether it needs it or not.
Like I said above, I'm probably not a great mentor for job security and career options, but I do know that taking the advice of letting markets decide your focus does little to serve your own passions, and can create a horrible job environment for you to suffer through. Reviewing your passions, your career, and your job may give you better answers for how to pursue your both your passions and your career.