How To Learn A Programming Language
Day 1 to 5
Buy a book about language x, start reading it front to back. Just reading. Don’t stop on things you do not understand. The idea here is to get a high level overview of the language. How it feels and looks. It helps if you already know another language. Compare it with that language, how do you accomplish the same results in your known language? Just spend the first few days emerged in the book, keep going and don’t stop for too long.
Day 5–10
Find multiple resources on the language. The official documentation is always a good start. Find the best resources from the community around the language. Use Twitter, forums, slack and google around. You want explanations from multiple authors. One of them is bound to give you an epiphany of understanding. Multiple good resources are key early on.
Start building flashcards in Anki or another spaced repetition software. The official documentation or even parts of the official specification of the language can be a great asset here. Or resources that have a lot of accompanying visual material to do their teachings. We are all visual learners. With spaced repetition you will create a graph of interconnected knowledge about the language. The rules of the language. These need to become a mental model, you need instant access to these. It’s too tedious to constantly stop and lookup information, the genius of homo sapiens comes from finding the connections in separate pieces of information.
Day 10–20
It’s time to build something! Together with spaced repetition this is of vital importance if you want to go fast. You need to get the language in your fingers. You need to build muscle memory. It’s not enough to know the full specification of the language from your head. Building software will feel awkward in the new language at first. Just keep going, it will start clicking after a few days. Make lots of mistakes and actively start looking what you did wrong and why. Did you misunderstand certain theories of the language? Never assume anything. You will be mistaken about a lot of things.
Truly understand what you are doing, never assume one thing happens if the language does something else, this is where bugs are born from. Never just assume something, learn what every single line of code is really doing behind the scenes. This is the only way to build real knowledge of a language and gain an expert level understanding. Never fool yourself, nothing is gained by this. And always remember that fooling yourself is very easy.
Don’t just build along with a tutorial or what your resources dictate. Build something totally different. The key is to go out of your comfort zone, this is where the learning happens. Learning needs to be difficult, it creates the most connections in your brain. If what you are doing becomes easy move on to other concepts. Leave no stone unturned.
Day 20–50
Keep building and keep learning from resources. Keep doing your flashcards everyday. You want to be immersed in the language for some months at a time. Your subconscious will do a great amount of work for you. Rest and take lots of pauses. When resting we build connections from the learning process. Get at least 8 hours of sleep, when you wake up, you’ll find you have gained a better understanding. It can feel like magic sometimes.
Start building bigger projects. Perhaps re-build projects you did in your first language and see how different the outcome is.
Remember that first book you started with on day one? It might be fun to re-read it once more. And see how different the experience now feels. You’ll see the code and explanations in a different light. Some of it might still be unclear, write those down and focus on those in the coming days.
Summary
The days this will take you varies from person to person and doesn’t really matter. Just do a little bit everyday. Try to avoid not learning for more than 2 or 3 days in a row, don’t break the chain. Build a daily routine around this. Routines make life a lot easier.
Never focus too much on a single resource. A certain author might not explain something that clicks for you. Lookup different tutorials on the concept and one of them is bound to click for you. Otherwise learning can be frustrating, we do not like to feel stuck too often. Keep the process smooth, but never easy.