Managing to find time to improve your coding skills is hard with all the other obligations you have to keep up with. You don’t want to burn out: you need to maintain a social life, spend time with your family, have time for a few hobbies away from the computer, and get some exercise in.
When you do get some time at the computer, it’s hard to focus your attention on just one thing and learn it properly: there's always a brighter, shinier language to learn or a project that’s cooler than your current one. If you’re to believe all that’s said about being a good programmer, you also have to know many software design patterns and how to implement them, contribute to an open source project, master complex computer science concepts to stay up-to-date, and have a chance to keep your job.
In fact, very few people know how to do it all, and people who have extended knowledge in multiple subjects have worked at it for many years. For example, I don’t fashion myself as being a master of web programming, but I’ve been paid to do web development since 2004, so of course I've had more time to pick up knowledge, techniques, and tricks that someone that’s totally new at it.
You have to learn new things and stay up-to-date, but you don’t need to know everything to do good work. Learning a new language or a new framework can be done in a few months even if you don’t have a lot of free time, and you don’t need to be on the treadmill at all times: it’s OK not to want to learn a new framework every few months. But what can you do if you do want to learn that new language? Where can you find the discipline you need to improve your skills in a real and profitable way so it does not end in a disappointment?
Discipline does not matter as much as having good learning habits and strategies. Discipline is really hard to maintain: your monkey brain will always want to try out new things, and then make you feel disappointed that you abandoned your cool project. Habits, on the other hand, will help you build your skill in the long term. So, here are a few steps to help you build the right habits:
- First, you have to commit to a main learning project that is the one you wish going to apply all these strategies to—be it a programming language/framework, a computer science concept, a coding project, or even a soft skill. If you spread yourself out too thin, you won’t make enough progress for it to be interesting and useful. Choose something you care about and that you’re interested in learning/: don’t choose something to focus on just because it’s popular online right now.
- Plan out where you want to go with this project, including a rough outline and a clear stopping point. If you have a reasonable time horizon for your project, for example a few months, you can reevaluate where you want to go when time is up. If you feel you want more, you can keep going for another chunk with a new set of goals. If you don’t, you can stop guilt-free because you accomplished what you set out to do.For better effectiveness, you also want to plan the next few steps so you don’t have to think about it to get started. When time is short, you don’t want to waste half an hour pondering what you should do. That plan should include tasks that work for various energy levels, like finishing a tutorial, reading the next chapter of a book, listening to a course or a related podcast, or having a few features ready to code.
- To keep making progress, you need to work on your project a bit every day even if it’s something small. You’re not forbidden to work on other things, but your main project should get a bit of your time first before you work on anything else. Slow and steady wins the race: if you only go at it when you have hours of free time available or when you feel the stars are perfectly aligned, you won’t work at it often enough to make a real difference. Also, it’s easier to immerse yourself in a new concept if you keep working at it, even if it’s only a little bit each time.
- If you’re in it purely for the learning, you need to let go of the idea that the project must be 100% finished. Enjoy what you learned on that project and take it with you for the next project. Some programmers have a pet project like a TODO application or a blog that they like to implement in each new language they are learning to get the hang of it: it doesn’t mean that each of those projects have to be production-ready and bug-free. And besides, even software in production is never really done anyway.
Learning is a lifelong quest for a programmer since there are always new skills to master, so you need to learn to enjoy the journey. For each new things you learn, you’ll find many more that you want to improve, so don’t forget that you’re only human and that you can’t do it all.