The bottom line is that I wish there were more hours in the day. Just as companies have to decide where to spend their capital to maximize value, software developers have to figure out how to spend their time to maximize their skill set. Not a day goes by when I don’t read about something that sounds interesting that I never follow up on. A few years ago, I was a Web developer who spent most of their time hacking on things in Perl, PHP, Cold Fusion, and many other more obscure platforms. I decided that I needed to turn the battleship and become a Java developer, in large part because I thought that Java developers were more employable than I was, and made more money to boot. As it turns out, I really enjoy programming in Java, but the bottom line is that I decided to make the transition for crass, commercial reasons.
Even more years ago, I could have decided that what I wanted to focus on was Visual Basic, and ASP. I decided not to because I knew enough VB to consider it extremely distasteful. (You don’t have to agree with me on this, I just found the entire Microsoft development ecosystem to be aesthetically unpleasing.) Anyway, we’re all forced to make decisions like these throughout our careers. And the thing that really gets me (even though I know it’s inevitable) is that as people, we have to deal with lock in just the way businesses do.
If Company A comes out with an enterprise software package that provides five times the functionality of Company B’s package at half the price, most of Company B’s customers will not move over because of the huge pain involved in converting the data, migrating the software, and teaching people to use the new system. Even in the open source world where licensing costs are not an issue, people still get locked in to data formats, interfaces, and just about everything else. Unfortunately, things are just the same for individual software developers.
I know some polymath software developers who are able to program well in many languages and on many platforms, but for the most part, broad and deep are tradeoffs. Time spent learning the esoterica that make you a great programmer in a particular language is time you don’t spend picking up that one extra scripting language that might be useful to you occasionally. Of course, there’s something to be said for learning many languages because picking up the different philosophies enables you to make better decisions about how to solve problems in general, but rarely will you meet people who have true expert knowledge in many different areas.
So the big picture question is how to create the most fulfilling career for yourself? One option is to delve really deeply into a particular technology and become a real expert on it. For example, I could try to expand my knowledge of Java as greatly as possible and learn other things that are complementary to Java expertise, and hope to trade on that in the years to come. However, of more interest to me is the idea of abstracting my skillset. I’d like to move into a position where there’s less heads down coding work and more mentoring of other developers, managing of projects, and focusing on the big picture. Aside from my specific knowledge of HTML, Perl, Java, SQL and other things like that, I have general knowledge of what makes sense for developing applications, how to get projects finished on time, and how to evaluate and make decisions on technology. The theory is that by being absolved of the need for esoteric knowledge, I could dabble more with things that interest me and have more fun at work.
Of course, the kicker here is that to do all that, you have to find someone who’ll pay you for it. In any case, I think this is a career transition that every developer has to go through — broader or deeper. If you’re a developer, I encourage you to think about it actively rather than putting your career on autopilot. Your skills are your asset, and rarely do they take you where you want to go by accident.