When learning to code, many of you will experience something that I call 'the tutorial loop' or 'tutorial hell'. It was something that plagued my learning for a while - in fact I would consider not resolving this sooner was one of the biggest mistakes I made whilst learning web development. This article is my thoughts on how one should attempt to break away from this loop, why this is immensely bad for your learning, and then some of the strategies I used to learn more effectively.
The Tutorial Loop is the never ending cycle you may find yourself in when learning to code, where you watch tutorial after tutorial but never leave them with any working knowledge of the technology it is teaching. This prompts the developer to typically label the course as useless, and then find another one that may contain the 'secret sauce' to gaining superior programming knowledge.
It's a frustrating place to be in. You code along to the video, building out the same application as the teacher, and it leaves you feeling with a sense of accomplishment and pride, but ultimately this course has not really left you with any real world skills. In fact, all it has done has taught you how to code along to someone else.
There is a reason for this. You are not making any decisions or figuring things out for yourself.
When I was eleven or twelve, I got a Tony Hawk "Learn to Skate" video. I watched it for hours, soaking up every single word that Tony said. One of the main things I was interested in was how to "Drop in", a fundamental tricks any skateboarder would have to master, which is being able to roll down a quarter pipe ramp.
It's a hard trick for a beginner, because due to the nature of it, if you mess it up it has a large consequence. If you get overconfident and lean too far forward, you will fall flat on your face. Not confident enough, the skateboard will fly out from underneath you and backwards you go.
When I got to the skate ramp for the first time, I was so full of confidence due to having soaked up this knowledge from the man himself that there was absolutely no way I could fail. His words rung in my ears as I hovered over the drop, I leaned forwards and BAM, I slammed against the concrete. No major injuries, just a big dent in my pride.
Whilst listening to someone talk about how to do a certain task builds us with confidence and makes us think we can accomplish the skill being discussed, actually it requires practice. Repeating the same action, over and over again, practice after practice.
A typical 'Learn to Code' tutorial will usually have a 'code-along' video, or will build a final project. We see the final app in the tutorial, and we may even have recreated it ourselves by writing the code as it is taught to us. But what we didn't see is the hours the teacher put into to getting that application working in the first place, working through the design process, all the initial thinking as to exactly how this app is going to come together, all the bugs and errors they encountered along the way. They are showing you the polished, complete project rather than the process the took to getting there. Not to mention, the hours and hours of learning they have put in to get to a level of ability where they can comfortably teach a topic.
Much like Tony Hawk is able to nail his tricks and his How To video was perfect, we didn't see the hours and hours he had dedicated to learning these tricks, falling off and getting back up time and time again. The real learning to be had is in the process of figuring the hard bits out for ourself. And of course, failing, but consistently trying again.
It is important, that as a new software engineer, that you understand that this is the case and that learning to code is a long process. In fact, the sooner you realise that only relying on watching other people code the apps you want to be making is not the best way to learn, in your journey the better.
In Robert Greene's 'Mastery', he talks about how we each have the capability to go on to become a master in our craft, as long as we approach it in the right way:
"We enter a new field with excitement, but also fear about how much there is to learn ahead of us. The greatest danger here is boredom, impatience, fear, and confusion. Once we stop observing and learning, the process towards mastery comes to a halt."
As a new developer, we crave output. We enjoy going through a tutorial, coding along to the instructor because usually we will have an app or a project to show for it at the end. We feel fulfilled. Making slow progress on our own is boring and frustrating, but to become a master at any skill we must accept that boredom is part and parcel with the package. We can embrace boredom and choose to practice effectively!
They say to learn a spoken language, the best thing you can do is to go to a country that speaks it and practice it. In my opinion, a programming language is exactly the same. Pick through codebases that already exist, pull things apart, fix bugs in open source projects, create new projects. Anything that is requiring you to think and grow your knowledge. You need to figure out how to solve problems and overcome issues that you don't know the answer to. Use this experience to get good at finding out the answers yourself, by Googling/Stack Overflowing and reading documentation.
I'm not in this instance saying that you should avoid all tutorials, quite the contrary. Tutorials are really useful learning resources and are a great start to learning a new piece of tech, however, a 'start' is all they are.
Tony Hawk didn't learn to skate by watching other people skating.. and you shouldn't learn to program by watching others code.