Use it or Lose it.
When you’re first learning to code, the trick to really solidifying your coding skills is to USE those skills. Unless you are really just starting out, you should be spending as much time actually writing your own code (not from a tutorial) as you are going through lessons.
The concept of spaced repetition is popular for learning and memorizing bits of information. It’s basically a system of (often digital) flashcards that allows you to systematically memorize large amounts of info by reviewing each card at a specific, optimal time. It is often used by med students to learn the insane number of medical terms that they need to know in order to pass their exams. I have seen a few implementations of this type of system for learning programming (this one is worth a read) and while I don’t think that they’re a bad idea, I think they miss the point a bit. It may indeed be useful to really internalize some programming “facts” because it will help you to code faster, but programming is much, much more than learning the syntax and rules of a language.
I proposed in a previous article that if you are consistently using your programming skills to create things, you will be inadvertently internalizing the syntax of your language. It really works much the same way as spaced repetition. You lose the optimized system of reviewing literally everything you know, but what you gain is even more valuable. When you are actually writing your own code on a regular basis you will naturally begin to internalize the skills that you actually use on a regular basis, and you will learn those things in the correct context rather than as separate facts. In other words, you don’t just learn the definitions of things, you learn how to use them.
In addition to the learning benefit I should also mention that when you’re writing code and building things that are not on a tutorial, you’ll definitely boost your GitHub profile or portfolio, which, if you don’t have any professional coding experience, is all you’ve got if you’re going to look for a job. Even if you’re not in it for the career, building things will give you something you can actually share with your friends, which is incredibly motivating.
(don’t be this guy):
My wife: What is it that you’re doing on your computer all the time?
ME: Learning programming…
My wife: Oh, so.. like making apps and stuff??
Honestly, build stuff is pretty common advice. What can be difficult, however, is figuring out what to build. There are many lists out there that are filled with programming projects (Google “programming projects”.. This is a cool list.), Those lists can definitely be helpful, but for someone who is still learning, those lists can be hard to navigate because often, the projects are either too hard, too easy or just generally not applicable for whatever reason. The rest of this article is not going to present specific projects, but a couple of strategies for finding or inventing things to build on your own.
First off: you don’t always have to build complete production grade projects while you’re learning. When you are a first learning a language it is helpful to do coding exercises that can be found across the net. There are bonus points here because most employers either use these exact sites, or programming challenges in this style during the interview process. Personally, I’m fond of exercism.io, but there are MANY such websites. You won’t quite get the feel of creating an actual project that you can publish and share with the world, but you can usually do them quickly and then move on. I would suggest doing a few of these a week while you’re learning, and then ramping up on them when you start looking for a job.
Another good option is to enhance or refactor an earlier project, or a tutorial project that you’ve completed. You can learn a lot by going back to code that you wrote in the past. This can apply to anything from large projects to simple coding exercises, and you can spend as much time on it as you like. I’ve found that as you learn new techniques, or as you get better at thinking about problem solving, going back to your old code can be both frightening and enlightening. Personally, I am usually a mix of appalled (I can’t believe I wrote this garbage!) and pleased. (Wow… I’ve learned a lot since I wrote this thing.) You will probably be able to see things that you could have done better, things that you can enhance, or features you can add. Do it!
Finally, try to think of something that you could ACTUALLY use (i.e. students might want to make something to write/organize class notes.. and teachers might want to make something to track detentions). This can be insanely motivating and empowering. It’s hard to understate the value of creating something that is actually useful to you. It feels amazing. In addition, if you write something that you personally find useful, there’s a decent chance that others will find it useful as well. If go through your day with this thought in the back of your mind, you will likely get to the point where you think “hey.. I could build that!” almost daily. Once that’s accomplished, you just need to keep your eye out for a project that is within your abilities and then DO IT.
In conclusion, I have to say that it doesn’t honestly matter much what you’re building. What’s important is that you’re regularly putting the things you’re learning into practice. Not everything you build has to be useful or amazing either. In fact, you probably want to avoid getting bogged down by trying to make every little thing perfect in your projects. That said, I’ve come across many people who have been learning programming for a while (3–6 months) and still feel like they can’t actually do anything worthwhile! This feeling probably comes from the fact that they’ve been reading and learning, doing tutorials and online lessons, but they haven’t really put much time into using their skills… which I imagine it’s an easy trap to fall into. Resist! Build stuff! You’ve got to use it or lose it!