Keeping Your Skills Up to Date as a Software Developer
It’s a wild world of ever-changing technology.
What was new and hot yesterday is old and crufty today.
Dinosaurs actively roam the halls of software development organizations, and you don’t want to be one of them.
The key to not going the way of the Dodo Bird is to keep your skills up to date.
You don’t have to learn every new-fangled technology and programming language that comes along—in fact, that would be impossible—but you do have to keep your skills sharp.
So how do you do it?
No Plan Is A Plan, Just A Shitty One
If you don’t have a plan of how you are going to keep your programming skills up to date and you don’t have a plan to advance your career, it’s just not going to happen.
As someone who does a considerable amount of personal training and coaching, I can’t tell you how many times someone has told me that they are going to lose weight and get in shape.
When I ask them “how?” They say, “Oh, I’ll cut back on the calories and exercise more.”
That is not a plan, or if it is, it’s a shitty one.
You need a real plan that you can follow and track so you know if you are off course or not.
A good plan is specific.
If you ask me how I am going to lose weight or get in shape, I’m going to say something like this:
“First of all, I’m not going to lose weight. I am going to work on losing fat while maintaining lean body mass. I will do this by cutting my calories to a 500 calorie deficit per day, eating a mostly ketogenic diet, running four times a week to increase fat oxidation, and lifting three times a week to keep as much lean muscle mass as possible.”
That’s a plan.
See the difference?
You need to develop your own plan for how you are going to advance your career and keep your skills up to date.
The rest of this chapter will give you some ideas of what you can incorporate into your plan, but ultimately it’s up to you.
I’ve found that one of the best ways to stay up to date in the programming world is to read programming blogs every morning for about 30 minutes or so.
Throughout my career, I’ve had a changing list of software development blogs which I’ve read for the first 30 minutes of my day.
To some degree, this allows other people to do much of the work for you.
By reading other software developer’s blogs, you gain insights into what is new and what is important in the programming community, and you might even learn a thing or two as well.
Usually if something is important, you’ll find someone blogging about it.
Blogs also provide you the opportunity to read about some of the difficult problems in your particular area of the software development world and what the solutions are to those problems without having to struggle through them yourself.
You should always be working your way through at least one technical book.
At that pace, I’d get through one to two technical books each month.
Reading that many books each year ensured that my skills were constantly up to date and that I was improving as a technical professional.
Now, just reading books cover-to-cover isn’t the best way to learn, but getting in the habit of reading and working your way through new technical books all the time is a great way to broaden the base of your programming knowledge and stay current on technology.
For this kind of reading, try to pick books that you will benefit the most from or that will have a lasting value.
Picking books which are directly relevant to what you are currently working on is a great choice, because you’ll have immediate, applicable value.
Picking books about software development methodologies or design patterns and architecture are also good, timeless choices.
This book, along with my Soft Skills: The Software Developer’s Life Manual, were specifically designed to be as timeless as possible, because I wanted to write the kind of books that had long-lasting value—the kind of books that I would like to read.
That doesn’t mean you should never read books on new technologies, but make sure if you do, you also spend time actually learning by doing, not just reading.
|Hey John| What's the best place to get started? Should I read the technical books specific to my job first, or the timeless books on writing quality code first?
Ah, the old chicken-or-the-egg problem.
You should definitely read a mix of both, but realize that you’ll get the most long-term benefit from timeless books on code quality and self-development, because those books will be based on principles that will likely be universal and last a very long time.
Here’s how I would play this game if I were you.
If you are working with a specific technology and you are spending a large amount of your time using it during the day, you should probably prioritize learning about that specific technology, because it could save you hours a day or make you much more efficient.
In that case, investing immediately in technical skills is going to have a very high return for you.
Even if you end up switching jobs later and essentially have “wasted the time” learning a skill, or getting better at a skill you no longer use, you will have probably gained enough benefit from the time you put in initially to make it worth it.
On the other hand, if you are fairly proficient at what you are doing and you are just looking for a new technical skill to pick up, you might be better offer prioritizing timeless books on writing quality code and personal development books which will benefit you more in the long run.
Picking A New Thing To Learn
Always be learning something new.
I don’t care how skilled you are or how much education you have, there is always something new to learn.
Have a plan for what you are going to learn next, so that when you finish learning one thing you can move on to the next thing.
Evaluate your current skills and where you want to go, then decide what new things you should learn and what priority and order you are going to learn them in.
I always have a list of the books I want to read and I keep it up to date so that I always know what book I should read next.
This list helps me make sure that I don’t waste my time and only read high-quality books.
Do the same with the skills in your programming career.
Decide what technologies, programming languages or frameworks would benefit you most and put them on a list of things to learn.
Then make sure you are always working your way down that list.
You’ll be amazed how many new skills you can pick up in just a year’s time if you are constantly devoting a dedicated amount of time each week to learning something new.
You may even want to schedule this time each week explicitly on your calendar.
One word of caution, though: don’t learn things you aren’t ever going to use.
|Hey John| In my current job I need to know X. But I'm really more interested in Y. Should I be reading the books that will help me in my current job or will help me learn the skills I am actually interested in?
So, there is some value in learning things that you want to move into or that you are interested in, but aren’t using yet.
But, there is also some risk.
If you spend a large amount of time learning something you are never going to use—especially if it’s highly technical—you run the risk of making a very bad investment of your time (and effort.)
Of course some people will argue that learning a new programming language that you aren’t actually going to use will make you better at a programming language you are using because it will cause you to think about things in a different way.
And there is the argument as well that sometimes learning things for fun is… well… fun.
I can’t disagree with either of those things, but I would say to at least try to have some secondary benefit from what you are learning, both so you can learn it better by applying it and so that it reduces the risk of being a total waste of time.
Creating a side project or even a personal project is a good way to do this. (More on this in the Side Projects chapter.)
I’ll conclude with one final point to consider on this matter.
As human beings, we are really bad at predicting the future.
It’s usually a bad bet in software development to prematurely optimize and it’s also usually a bad bet in life.
I only say this because I’ve been bitten by this particular animal more than once.
Several times in my career I’ve invested a significant amount of time learning something I thought I would use, only to find that I never used it at all and pretty much all that time was a waste.
Be strategic in what you decide to learn.
I know many developers who binge-watch Pluralsight courses, read through technical books and learn programming languages without any real purpose in mind.
This kind of extra knowledge is not bad, but because it is unfocused and doesn’t move them towards their goals, much of it is wasted effort.
If I spent months learning a new programming language that I’ll never use, it doesn’t really help me much in advancing my career or reaching my goals.
Sure, I might learn a little and it might broaden my perspective, but that same time would have probably been better spent learning something that I will actually use.
If you want to stay sharp, you have to keep on learning.
Like I said earlier, technology is moving at an extremely rapid clip in today’s environment and I don’t think it’s going to slow down anytime soon.
If you are going to spend so much time learning, don’t you think it’s worth investing some time in learning how to learn better?
How to learn quickly?
I used to approach learning in a haphazard manner, until I made the goal to create 30 Pluralsight courses in a single year.
In order to produce that much content and to learn as many technologies, programming languages, and frameworks in that short period of time, I needed to develop a system for learning quickly.
So, I took everything I knew about learning and what was working best and I actually made it into a system.
You don’t have to use my system, but you do need to have some system for learning quickly.
You can even take parts of my system and combine it with your own, but you need some strategy for learning quickly if you want to stay ahead.
I’d encourage you to take the time to really invest in learning how to learn since it is a skill that will be valuable to you for the rest of your life.
Another great way to stay up to date and pick up the highlight reels of what is new and noteworthy in the ever-changing field of software development is to attend events.
These events could be conferences or code camps, but they could also be less formal meetups, or even events that companies like Microsoft put on to showcase their new technologies.
You can spend a day at an event, watch a few presentations and gain a really good understanding of how a new technology or tool works or how it can be applied, without having to read a whole book or slog your way through tutorials.
There is something about seeing someone demonstrate a technology live and watching them show you code examples that tends to make things “click” much faster than some other mediums.
When I was a big .NET developer, I’d often attend the Microsoft events for developers in my area, which would have five or six presentations on new technologies or tools for developers.
I found that I could get a really good gist for what was new and important and the basics of those technologies in just a day, because it was a highly curated amount of information.
Reading The News
Normally I’m against reading the news.
I honestly think that, for the most part, it’s a huge waste of time.
Most of the news out there doesn’t really affect your daily life in any significant way.
I try to avoid information that I can’t act on or that doesn’t matter in my life.
The exception to this is, of course, technology news, especially when it’s related to programming.
I like to utilize these sites to get a pulse on what is happening in the programming world.
Usually I can see trends like an increase in people writing about a specific programming language or technology which can help me to plan for the future and to see where I might need to shift my own career course.
You can definitely waste a large amount of time reading the news—even technology news—so, make sure you timebox this kind of activity. Specific news feeds on what you are interested in can be a great way to stay up to date on what is going on in the field.
Finally, I’ll state what should be the most obvious way to keep your programming skills up to date: program.
And do it a lot.
I’ll talk about this more in the Side Projects chapter, but you should always have some kind of side project you are working on.
The more you code, the less likely your coding skills will become rusty.
Seems like common sense, but you’d be amazed by how many software developers end up getting into situations where they feel their skills are out of date, and when asked how often they code, they say “not much.”
So, make sure you are dedicating some time each week, or preferably each day, to actually writing code.
John Resig wrote an excellent article on the subject called “Write Code Every Day.”
One great way to do this is to be always working on small projects.
You can combine a few of the ideas in this chapter together by picking out something new to learn and working on a small project with that technology or programming language.
Just make sure that the projects are small enough that you actually complete them.
One of the best decisions I made in my life was to start finishing every single project I undertook.
I became a finisher and it made a huge difference in my career and life in general.
Don’t Get Too Comfortable
Remember, no matter how secure you might feel in your current job or environment, it’s important to not get too comfortable.
I know programmers who worked for the same company for over 20 years, so they decided not to invest in keeping their skills up to date.
They just kind of relaxed and thought that they’d be ok, since they had job security and there was no need to learn anything new.
And then, when unexpected layoffs happened and they were suddenly thrust into a workforce where they were 20 years behind in skills and knowledge, they quickly realized the error of their ways.
Don’t let that happen to you.
Make an active plan to keep your skills up to date.