Diversification

At times there seems to be too much stagnation in the world of software development. I don’t mean that progress in new technologies or techniques is slowing, in fact it is probably chugging away at its standard accelerated pace from the rest of the sciences, I mean that developers themselves tend to stagnate.

This is a dangerous thing for any developer and for our community as a whole. Many developers become stuck in a rut of working on the same programs, writing in the same language, fixing bugs or adding minor incremental changes. Maintenance mode: it dominates many software shops and can cause your career and your company to become outdated.

As an example, take a look at Internet Explorer. Microsoft practically stopped developing IE in the mid 2000’s because they had such a high market share they figured there wasn’t a need to do real work on a new version. Minor fixes was all that went into it. Meanwhile other browsers such as Firefox, Safari, and Opera were putting together new and exciting packages. Microsoft was at a loss and had to hurry up and create IE 7 and later 8 to try to catch up to the standards compliant and innovative new browsers that were on the market. If they had kept pushing even when they felt secure, they would have had a better product and probably a better market position.

I feel the same thing occurs not only in the products we make, but in ourselves with our skills. Once you become a Java developer, or a web developer, or a Java Web developer, you stay there. Maybe you’ve been using C, or Java, or PHP all of your career and you’ve never really expanded out of that. Perhaps you’ve written mostly web applications and never really touched desktop or mobile applications. I feel that that is a significant loss to yourself and to your current position.

The thing is people, and especially developers, need to change from time to time. If you keep programming in the same language on the same types of projects or are just in maintenance mode of the same project constantly, you’ll begin to stagnate. Your skills might be quite good in your area of expertise, but if you’re ever forced to leave your comfort zone you will find you struggle. Perhaps you get laid off and need to get a new job, having some versatility will look good on your resumé. Even if you’re staying with your same position, having skills in additional technologies, different languages, and programming on different platforms will help you in your current task by forcing you to change your point of view.

Change inevitably happens. I remember working at a government job in NY where all of the older programmers who were masters in COBOL were forced to retrain in Java or retire. Many of them had problems with that transition as Java and COBOL are fairly different. The few who were keeping up on their game for the last few decades and learning new strategies and processes on the side were poised to take over top positions after the transition. They already had the knowledge that they taught themselves, while the ones who stagnated either had to struggle to adapt or look for a new job.

My ambition typically involves trying to keep as many new languages in circulation in my head as I can. I use Java primarily at work, but when I start doing my own projects I tend to lean towards Objective-C, C++, Ruby, and Groovy. I mainly write web applications at work, so my home projects tend to be closer to command-line scripts, desktop applications, or mobile apps (the iPhone is a nice platform to play in as a developer). I may not be able to use these projects or the skills that I learn on them directly at my job, but I do become more versatile from the experiences. That versatility allows me to answer questions or think of designs differently than I would if I just focused on web based Java applications.

In addition, try to make sure that you do have side projects. I know for a lot of people who work 8-14 hour days programming that the last thing they want to go home and do is more programming. A lot of the time I would agree with them, however keeping a few side projects that you work on several times a week in your spare time will keep you sharp and can be very rewarding as you make things that you wouldn’t have the opportunity to at work. I know that I’ve felt more accomplished by satisfying my own goals at home than I am at filling another bullet point on a feature list of a product that I have little passion for at work.

If you can’t think of a project, try to find an interesting open source one online to make contributions. It’s not always easy to get started, but those contributions will look great on a resume and can help a multitude of people along with yourself.

I think it has also something to do with the industrialisation of software development. We used to develop applications that cover the users’ entire end-to-end needs. As applications became more complex and modular, the size of the overall picture we form part of as individual developers got smaller and smaller. Today each developer does specialised and repetitive aspects of “development” (if you can even call it that nowadays), much the same way as a worker in a car factory stands around tightening nuts one each auto part that ambles down the production line.

To an extent. I don’t think we’re quite as far gone yet that everything is just rote piecing together applications on an assembly line. There’s still a lot of areas that require some deep thinking and creativity. I think as multi-core processors become even more popular along with the increase in multi-computer (grid/cloud/whatever buzzword) systems, the need for more advanced threading and other methods for distributing work will keep software development as a higher level science/art.

Granted there will probably be frameworks, utilities, automations and what have you eventually that will make those areas easier for developers to write and bring us back to the assembly line analogy again. The field and technology is still expanding too rapidly for me to think that we’ve reached the point where development can be categorized as ‘unskilled labor’.

Fair enough. But there really is no broad categorisation of developers nowadays to begin with. There are different tiers now. There is on one end those tiers whose skill sets are rapidly becoming commoditised (the ones that increasingly end up competing with what those big software houses in Bangalore offer at increasingly lower cost). Then there are the ones at the top-end with high design-added-value which remain headquartered in our high-labour-cost countries.

The key (like in any other industrial field) is to keep adding to the top-(high added value)-end to compensate for the drop off of commoditised stuff at the lower end. And that requires always being a few steps ahead in terms of innovation.