Almost universally learning to code is hard. It is hard and it is frustrating.
Almost universally learning to code is hard. It is hard and it is frustrating. Resources to go from 0 to 1 as a beginner are easy to find but figuring out the path from 0 to mastery are not.
The modern coding environment only complicates this as more and more options, tools, frameworks, and potential paths are invented. These options are designed to make coding more manageable, but for a beginner can be overwhelming.
My goal here is to lay out a clear, structured path from 0 to mastery I call “The Hero’s Journey of Coding.” The Hero’s Journey is hard. The Hero’s Journey will be frustrating and will feel hopeless at times. But the Hero’s Journey works.
I heavily based the strategy on research from Cal Newport (computer science professor at Georgetown University) and Barbara Oakley (professor of engineering at Oakland University), as well as on a large body of research into learning, and more specifically, learning technical subjects.
Learning to code is a non-linear process and forcing a strictly linear structure on it will slow your learning process. It is analogous to learning a language.
Two hypothetical people start studying Mandarin at the same time with no prior knowledge of the language. One begins a course that promises mastery of the language by the end of the course. The other takes the same course… but supplements it with reading books in Mandarin, watching shows in Mandarin on Netflix, speaking to Mandarin-speaking people in his or her area every day, listening to the news in Mandarin, listening to podcasts in Mandarin, memorizing Mandarin grammar structures and vocabulary words, switching to the Chinese servers in the online games they play, asking about aspects of the language that confuse them in Mandarin language forums etc.
Because the second person is varying their types, contexts, and methods of learning, they will learn Mandarin surprisingly faster than the first person while preventing burnout by altering the kind of cognitive load they place on their brain.
Additionally, since the gains are cumulative, the second person will exponentially approach mastery faster. This approach is backed by research. If you want to look into it further, Harvard has an excellent compilation of research into the topic here: https://bsc.harvard.edu/study-tips-guides
Differing your types and content of learning also promotes neurogenesis (production of new neurons in the brain). Here is a study on the fact: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3445739/. The other thing proven to increase neurogenesis, by the way, is exercise (specifically aerobic exercise). The same study linked covers that topic as well if you are interested.
In this guide, I’ve put together the findings of this research into an actionable sequence I call “The Hero’s Journey of Coding.”
Some parts of this guide, particularly towards the end, will upset people and may be construed as overwhelming or discouraging towards beginners.
I’ve purposely constructed this guide to be the antithesis of the other guides I’ve read (and I’ve read hundreds) which have been too vague, too introductory, and too afraid to get into the nitty-gritty of how the actual process usually looks.
What I lay is not the only way to learn, but it is a research-backed, experientially backed, and effective way to learn. Here I offer the gory details of the whole process, so I hope you are ready.
The first step in the hero’s journey is a guided introduction. Before a hero can pursue his core quest, he must learn the ropes. This most often comes in the form of a course, often a video course.
Two instructors I personally like are (https://www.udemy.com/user/maximilian-schwarzmuller/) and (https://www.udemy.com/user/coltsteele/). But make no mistake, this course is just going to give you the shallowest feel for what you are about to pursue.
You will begin to get the breadth of what you need to learn. You will start to know the tools, frameworks, terminologies, and places to look for knowledge.
Don’t worry too much about the language or frameworks that you start with as long as they fit your end goals and are popular. Coding languages are not like spoken languages; once you know one in-depth, you can pick up others fairly quickly. So the language you start with will not doom you down the line if it falls out of popularity. Also, as you become more knowledgeable, you can make a switch if necessary.
Don’t fall prey to language and framework “paralysis by analysis” and instead do a week’s worth of research and then dive in and commit at this stage to the course, language, and framework you have chosen. Finish the entire thing from start to finish.
Other alternatives to a video course are classes or boot camps if that is more your style. If you went to school for something like computer science or have the equivalent experience already, you can skip this step entirely.
Think of the guided introduction as defeating the low-level beasts you need to get from level 1 to level 10. Make no mistake, some of these “low-level beasts” will be formidable.
In fact, the low-level beasts are often a more significant obstacle than the higher level beasts that will come along later because your skills will scale up faster than your enemies.
You are going to need a little help. It’s time to consult the oracle.
Who is the oracle? The oracle is known by the mystical name “Google.” You can ask the oracle anything, but you need to ask it the right way.
As you ask the oracle more questions, you will get better and better at divining answers from her mystical responses, which may often lack context and appear unusual. Often answers will appear in coding forums like Stack Overflow (https://stackoverflow.com/).
Sometimes you will find out your question has already been asked and the answer is already available. At other times, you will find out that you must ask the question yourself.
As you go further along, you will never stop Googling but the answers to your questions will more rarely appear as they get more technically complex and more specific.
You cannot keep dispatching low-level beasties forever. You need to pursue your core quest. Your core quest is a project which you continually build on and improve as you learn more.
The core quest should start as soon as the guided introduction is finished. You need to learn how all the concepts tie together and work in the real world. The less like a simulation and the more like your end goal the core quest is, the better.
The core quest will start out humble but will develop into a save the world scenario. The core quest is what you never lose focus on and is the most crucial part of the journey. All the other parts of the journey are to supplement the core quest.
The core quest is from where the glory and victory in the Hero’s Journey comes from.
As you pursue your core quest, you must do battle with great foes to improve your skills. These foes come in the form of coding challenges from sites like leetcode (https://leetcode.com/), codewars (https://www.codewars.com/), or hackerrank (https://www.hackerrank.com/).
Coding challenges are a different kind of coding than your core quest or guided introduction. You want to pursue different types of knowledge paths so you don’t burn out doing the same kind of learning. Remember, research indicates that diversifying your learning strategy exponentially improves your path to mastery.
Start with the most manageable problems and eventually try to work your way up to the hardest ones. Try to make it a goal to do every single problem in the site in your chosen language if possible.
As you slay great enemies, you will feel the need to go more in-depth in specific subcategories of battle. This is where you consult the masters.
This does not come after your core quest or doing battle but is interspersed between. As you pursue your core quest and do great battles with enemies, you will need to take breaks to regenerate and refresh yourself. That is when you read these great tomes.
The tomes will give you great knowledge but you will find yourself thirsting for the more arcane and specific knowledge. This is the last part of the coder’s journey.
The arcane knowledge is the documentation itself. This is the raw, unfiltered, incantations. You will learn sick and unnatural abilities from these arcane sources. Start out by reading the documentation as a reference point beginning with the core quest but the spells and incantations are brief and specific, and so, should eventually be memorized.
The documentation itself is usually brief enough to be fully digested overtime. I suggest turning the entire documentation for the tools, frameworks, and languages you use into online flashcards using something like quizlets (https://quizlet.com) and gradually memorizing them.
So, for example, if you are a web developer using MongoDB, Express.js, and Node.js that would include the entire mdn docs (https://developer.mozilla.org/en-US/), MongoDB docs (https://docs.mongodb.com/), Express docs (https://expressjs.com/en/api.html), and Node.js docs (https://nodejs.org/en/docs/). It would also include any tools you use like Bootstrap (https://getbootstrap.com/docs/4.3/layout/overview/) or Mongoose (https://mongoosejs.com/docs/api.html). If you use it and it has docs, include it.
This may seem overwhelming, but you would be doing this over a long, long period of time and piece by piece. Evidence that this strategy is effective: https://bsc.harvard.edu/files/smarter_studying_8-10-16.pdf
Having the documentation memorized is a sick and powerful ability. This is the most grueling, controversial, and formidable-sounding part of the hero’s journey, which is why I saved for last.
This comes after you have slain your great foes and have completed most of the journey and are searching for that last, last edge to push you over the top into glory.
Go forth, hero, and find your glory.