Cover Photo by Aaron Burden on Unsplash
I'm new to the development thing, and I've been working through The Odin Project, a wonderful free resource that takes you from zero to a junior level developer in the context of web development. I might not know a lot, but I've been hanging around the community Discord server and a lot of people are constantly asking about code-along videos.
A pretty standard exchange goes something like this:
SomeUser: Hey I want to learn <some language or concept>, what's the best way to do that?
OtherUser: You should look up a few videos and follow them to build something. You'll learn a lot!
Now, let me be clear from the top: I believe code along videos have a certain value. They are invaluable for folks that already know what they're doing. These types of videos can introduce the viewer to some pretty complex things, and if you already know what is going on, there is value in the format as a quick introduction. The critical difference is that for someone with experience to fall back on, they can figure out what's what pretty easily.
If you're still very early in your journey, a code along video is probably not ideal for your learning. The main reason is that you'll be lacking the wealth of experience and knowledge to really understand what's happening.
Let me get into this by way of example.
When I first started The Odin Project, Javascript was arcane to me. I had (almost) no clue how it worked. I did have the advantage of picking up some basic Pascal in high school, and my group of friends were all nerdy and we all built basic HTML and CSS2 websites that used PHP scripts to make templates. Can you guess how old I am?
Anyway, I never touched JavaScript then, so it was this newfangled thing to me when I finally got to that section of the Odin curriculum. So, I was eager to dive in. There's a very well known introductory course that has you make x things in y days based in Javascript, and one of the days was linked as a resource to consider, so I went ahead and opened it up.
The basics of the video were essentially setting up an HTML file, some CSS, and the meat of it, using Javascript to set up an event handler which then played some audio, added a CSS class to the element, then removed it to get a transform effect.
Here's the thing: these topics and techniques are all very basic JavaScript, CSS and HTML. Any web developer will know how to create and handle a browser event like the back of their hand. I think it's something I could have easily grasped if it were presented in a different format for me. I mean, to be real, maybe not, but I'd like to think so!
I followed along with the video and nodded along, just typing into my own IDE what was in the video. Oh yeah, this is cool, and look at me build this thing! I finished the project and it worked as advertised, so I thought to myself, "Good job! You did it! You made this!" I'm sure you're all familiar with this meme and in the moment, that was me. I had dilluded myself into thinking I made the project.
The truth is, in that moment, I was suffering from the illusion of competence. The tutorial I had just watched gave me everything to succeed, and as a consequence, I didn't engage with the material at all. And why not? The solution was right there... even if I had wanted to come up with my own solution or next line of code, the temptation to just move along in the video was too easy to succumb to. The answer was just 1 second away! Sure, I had something to show for it at the end of the video, but did I really know and understand what the event handler was doing? (Narrator: He did not.)
There's a lot of research about this phenomenon called the illusion of competence and it can be a deadly menance when it comes to learning anything, but it is especially harmful for learning how to flourish as a developer. When you have the answer given to you, or you think you already know the answer, then you don't get the chance to really enter the second stage of competence by trying to solve the problem and failing. So, you finish one and look for the next great tutorial that will ~teach~ you something. But the results are the same, because tutorials almost always walk you through everything step by step. Some folks sometimes call this treadmill of tutorial videos tutorial hell.
Let me repeat this again, video codealongs do have their place as an educational tool but this place, in my humble and noobie opinion, is once you've got a solid foundation in programming and are looking for a refresher on a topic you haven't touched in a while, or to figure out how to do something in a lanaguage that's new to you.
My advice for those starting in their journey to learn how to write software?
Take your time. If you're in a hurry, you'll be prone to take shortcuts and fall into the illusion of competence much more easily. One way to avoid this is to give the material, concept or problem the time it deserves.
Fail, and fail a lot. Get stuck, and Google the problem you're having and not the solution! Once you're stuck you're in a prime position to learn something and make it memorable. I'll always remember when I finally figured out event handlers and the event object in JavaScript.
Don't be shy about asking for help in a thoughtful way after you fail or get stuck. Sometimes, you can figure a way out on your own, but if you feel like you're really stuck, asking thoughtful questions about your problem can often push you along the right direction. In this way, it's important to ask about your problem, rather than asking for a solution. It's the same problem: get given an answer, and you'll likely end up here again.
When you're just starting your programming journey, code-along videos can seem like the best. You learn something, and end up with a project at the end. It really does feel like you can learn anything and everything this way, but just remember that the illusion of competence is a thing, and be extra careful to test your knowledge as you go!
Top comments (8)
Great insight born from personal experience is invaluable! I believe, rushing will not solve anything in studying. Although it can really help us get out of a problem, it is never part of learning. But sometimes we do have to choose, what things really need to be learned and what not. Depending on the conditions and goals, we may not need to learn some things. Even if we think it's useless at this point, don't forget the keyword. Because we really can't really know what's important and what's not until we get the problem.
One has told me that make as many failures and mistakes as we can while learning. Thus, we'll have a lot of experience and insight. Make those mistakes so that we will run out of ideas to apply them in the world of work. One has told me that a good teacher will make a student fall into failure and then help him figure out for himself how to crawl to the top. Thus, what matters is our process of finding a solution, not the solution itself.
In the end, learning is all about curiosity, patience, never being shy about stepping forward and never feeling great. Learning is something that has no end.
Absolutely! The code alongs definitely isolate learners from failure, which is why they are not very good resources for absolute beginners.
Practice raises your level a lot when you go off and build your own projects. Wish I knew this when I started it would have got me out of tutorial hell.
100%! Practice makes perfect, and it's why a project approach where beginners are guided with information to succeed, but then have to make something on their own are the best approach.
I tentatively want to agree with what you’re saying. If all your doing is typing code in without trying to understand the commands, why they’re doing what they’re doing as you’re going along, then, yes, you’re learning nothing. There’s nothing wrong with looking up the solution to a problem as long as you try to understand the solution and why it solves your problem. There has to be a certain amount of intellectual curiosity instead of just mindlessly mimicking a solution.
I think this is the key, but often times, when someone is skipping to looking up a solution, we've already lost the game in that regard. There are so many venues and communities to get help with a problem, that skipping to the end often already means the curiosity is gone.
This post should be a must read for everyone starting web dev
Thanks for the high praise!