The field of software development is somewhat like the stock market. It can feel like you have to anticipate where things are going if you don't want to end up in the street begging for change.
Unfortunately, just like the stock market, it is impossible to predict the direction technology will take. Sure, we can make some educated guesses, but in the end no one really knows what is going to happen.
Consider Blackberry. Before its collapse, no one would have predicted Blackberry would be in the situation it is now. Focusing on becoming a Blackberry developer would have seemed like a good idea not too long ago.
The same thing happened with Silverlight and Flash. Both of these technologies unexpectedly took a turn for the worse.
So, how can you avoid these kinds of calamities and make sure that you are prepared for the future?
Pick a broad and stable base
The surest way to build a good future for yourself as a software developer is to avoid trends altogether. You can do this by picking a broad and stable base that is the foundation of your career.
Many technologies can be easily labeled as fads, but there are other technologies that have withstood the test of time. For example, consider languages like C or C++ which have been around for a very long time and are still in heavy use today. I've written about why C++ is not “back” and have discouraged developers from investing too much of their time in learning C++, but if you want to have a stable base, learning C or C++ can certainly help you do so.
Along with picking a broad and stable technology, you can also invest in developing general skills instead of specific technologies. If you can learn how to solve problems and architect good maintainable solutions to those problems, you will be able to adapt to any programming language or framework that comes along. There are a core set of skills that are at the heart of software development which will always be critical to writing good code.
I recommend this book pretty often, but Code Complete is an excellent book that has generalized knowledge about how to structure code that transcends a single platform or technology. Along with that, Clean Code is another book that I'd highly recommend, due to its timeless principles.
Also, (get ready for a shameless plug here,) of course I would recommend my How to Market Yourself as a Developer package, because the skills I teach in that program are skills that will help you your entire career.
So, while specialization is very important–and I do encourage you to specialize in a particular area of software development–it is also very important to have a broad and stable base to work from so that you can adapt to change in the future.
(Side note here: don't think that having a broad and stable base doesn't mean you should specialize or carve out a niche for yourself. The two aren't mutually exclusive. You should have a broad and stable base, but expand out from there to one or more areas of specialization and you should try to market yourself in a specific niche.)
Keep an eye out for what is gaining traction
You can't necessarily predict the future, but you can look for indicators that tell you the tides are shifting. If you want to be prepared for the future, it is always a good idea to keep an eye out for what new trends are evolving and what everyone is talking about.
We've had quite a few trends pass through the software development industry in the past decade. Remember when Ruby on Rails was the next big thing? How about IoC containers and dependency injection? Agile and Scrum? Lately, at least of the time of this writing, Node.js is still pretty big. But, just today, I was looking at Hacker News and I saw about four articles on Google's Go programming language.
It is a good idea to track sites like Hacker News and Proggit (the subreddit for programming) to see what technologies are being talked about and get a feel for what might be coming next. Often, the newest trends first surface on sites like these.
Another good way to spot trends is to look at the lineups for popular developer conferences and code camps. Just take a look and see what topics are being spoken about the most and you'll have an idea of where things are going.
Always be learning
Perhaps the surest way to prepare for the future though, is to make sure that you are always expanding your knowledge by learning new technologies and deepening your knowledge of existing ones.
As a software developer, you should focus on developing the habit of becoming a lifelong learner. Set a schedule each day or each week where you will spend a dedicated amount of time learning. In the past, I've made a commitment to walk half-an-hour on my treadmill each day while reading a technical book. Just doing this really helped me expand my knowledge over several years.
Spend some time learning how to learn so that you can be more efficient at learning and so it is a more enjoyable experience. Self-education is one of the most important weapons we have to survive the always changing technical environment.
Remember, there is nothing new under the sun. Sure, new technologies and programming language may pop up, but they are always some kind of rehash or combination of existing things. If you dedicate your time to learning, you will be much better prepared to deal with any new situation you encounter. The more you know, the more you can relate a new thing to something you are already familiar with and cut the learning curve of that new thing in half.
Be willing to change and adapt
It is really easy to just hold on to what you know and ignore the changing landscape all around you. I know, because I've done exactly that several times in my career. I fought C# and .NET for a long time when I was primarily a C++ programmer, because I didn't want to believe high level application programming language could be that easy–there had to be a catch.
But, no matter how much we fight the future, we can't prevent it. The best thing we can do is to give in and stop resisting new trends. Sure, some of them will fizzle out and die, but we won't know which ones are promising if we aren't willing to let down our walls and try them out.
It is really easy to become religious about a technology, but in the end it hurts you more than it helps you. I've come to realize that it is much easier and less stressful to bend with the wind than it is to stand your ground and eventually be snapped like a reed.
If you like this post and you want to read more like it,
.. sign up here
and I'll deliver post like this one to your inbox every week. Oh, also, I'll give you a free gift as a thank you for signing up.