Are you worried about keeping your programming skills up-to-date so you can stay employable? Some programmers believe that to succeed you must spend all of your time learning, practicing and improving your craft. How do you fit all that in and still have a life?

In fact, it’s quite possible to limit yourself to programming during work hours and still be employable and successful. If you do it right then staying competitive, if it’s even necessary, won’t require giving up your life for you job.

What does it mean to be “competitive?”

Before moving on to solutions it’s worth understanding the problem a little more. The idea of “competitiveness” presumes that every programmer must continually justify their employment, or they will be replaced by some other more qualified developer.

There are shrinking industries where this is the case, but at the moment at least demand for programmers is quite high. Add on the fact that hiring new employees is always risky and worrying about “competitiveness” seems unnecessary. Yes, you need to do well at your job, but I doubt most programmers are at risk of being replaced a moment’s notice.

Instead of worrying about “competitiveness” you should focus on the ability to easily find a new job. For example, there are other ways you improve your chances at finding a new job that have nothing to do with your engineering skills:

Living below your means will allow you to save money for a rainy day. You’ll have more time to find a job if you need to, and more flexibility in what jobs you can take.

Keep in touch with old classmates and former colleagues; people you know are the best way to find a new job. Start a Slack channel for ex-coworkers and hang out. This can also be useful for your engineering skills, as I’ll discuss later on.

Moving on to engineering skills, the idea that you need to put in long hours outside of work is based both on the need to become an expert, and on the need to keep up with changing technology. Both can be done on the job.

Becoming an expert

You’ve probably heard the line about expertise requiring 10,000 hours of practice. The more hours you practice the better, then, right?

In fact many of the original studies were about number of years, not number of hours (10 years in particular). And the kind of practice matters. What you need is “deliberate practice”:

… deliberate practice is a highly structured activity, the explicit goal of which is to improve performance. Specific tasks are invented to overcome weaknesses, and performance is carefully monitored to provide cues for ways to improve it further. We claim that deliberate practice requires effort and is not inherently enjoyable.

Putting aside knowledge of particular technologies, the kinds of things you want to become an expert at are problem solving, debugging, reading unknown code, etc.. And while you could practice them on your own time, the most realistic forms of practice will be at your job. What you need to do is utilize your work as a form of practice.

How should you practice? The key is to know your own weaknesses, and to get feedback on how you’re doing so you can improve. Here are two ways to do that:

Code reviews: a good code reviewer will point out holes in your design, in the ways you’ve tested your code, in the technology you’re using. And doing code reviews will also improve your skills as you consider other people’s approaches. A job at an organization with a good code review culture will be valuable to your skills and to your career. Self-critique: whenever you make a mistake, try to think about what you should have noticed, what mental model would have caught the problem, and how you could have chosen better. Notice the critique is not of the result. The key is to critique the process, so that you do better next time.

I write a weekly newsletter about my many mistakes, and while this is ostensibly for the benefit of the readers I’ve actually found it has helped me become a more insightful programmer. If you want to learn how to make self-critique useful than just an exercise in negativity I recommend the book The Power of Intuition by Gary Klein.

Learning technical skills

Beyond expertise you also need technical skills: programming languages, frameworks, and so on. You will never be able to keep up with all the changing technologies that are continuously being released. Instead, try the following:

Switching jobs: when you’re looking for a new job put some weight on organizations that use newer or slightly different technologies than the ones you know. You’ll gain a broader view of the tools available than what you’d get a single company.

when you’re looking for a new job put some weight on organizations that use newer or slightly different technologies than the ones you know. You’ll gain a broader view of the tools available than what you’d get a single company. Building breadth: instead of learning many technologies in depth, focus on breadth. Most tools you’ll never use, but the more you know of the more you can reach for… and building breadth takes much less time.

instead of learning many technologies in depth, focus on breadth. Most tools you’ll never use, but the more you know of the more you can reach for… and building breadth takes much less time. Find a community: you’ll never know everything. But knowing many programmers with different experiences than you means you have access to all of their knowledge. You can find online forums like Subreddits, IRC, mailing lists and so on. But if you don’t feel comfortable with those you can also just hang out on Slack with former coworkers who’ve moved on to another job.

Your job is not your life

All of the suggestions above shouldn’t require much if any time outside of your job. If you enjoy programming and want to do it for fun, by all means do so. But your job shouldn’t be the only thing you spend you life on.