On Tutorial Purgatory
Today I want talk about escaping tutorial purgatory, or as its fondly known as, tutorial hell.
Its something we all experience when we start programming, and can be the end of many journeys.
It's usually a 5 step process:
- Get excited to learn something new
- Look up a tutorial on how to do it
- Follow tutorial to completion
- Try to do it ourselves, only to find out we cant, so we look for another tutorial
- Get frustrated, realize "Maybe this isn't for me", and give up, or look for another tutorial
Rinse and repeat.
The tutorial made sense, you completed it, but when you go to do it yourself, you freeze.
Nothing stuck or makes sense anymore. Why?
As humans, we don't learn that way. It takes more than one tutorial to figure something out. Most of our brains arent wired to do something once and magically understand it.
We don't factor in the Ebbinghaus Forgetting Curve.
![[Pasted image 20240324204423.png]]
Our memory is limited. At one time, we can hold on four "chunks" of info. (We call them chunks because they're usually different types and sizes of info, such as programming knowledge and remembering to do the dishes)
This info is held in forebrain, the front of your head. It's where conscious thought happens and sound judgments are made. The reality is, if the info is never moved from conscious to unconscious thought, we forget it.
To make that jump takes work, though. We need to fight off the Forgetting Curve.
How do we do that?
By learning a thing, and testing our ability to recall that information.
This is known as Active Recall.
This might sound familiar since you may have already done this yourself with flash cards. You learn a thing, put it on a flash card, then test yourself over and over again until you memorize it.
With programming, though, we don't just want to memorize things. That's not useful when were trying to solve creative problems.
Instead, we need to understand the underlying concepts behind programming decisions, such as: - Why use a counter variable? - To keep track of iterations and increment the variable. - When should I use a list versus a dictionary? - Lists are for collections of like types (depending on the language), and dictionaries (hashmaps) are key-value stores with quick retrieval and insertion times. - Should this piece of code be multi-threaded, or will single-threaded do the job? - Always single-threaded unless the complexity of multi-threaded is warranted, such as for the performance of an app.
By understanding the underlying concepts and context around those concepts, we can put them to proper use.
How do we do this in programming?
I wrote a succinct tweet about it earlier this week.
Getting out of tutorial hell is simple
— Glitchbyte (@0xglitchbyte) March 23, 2024
1. Pick a language
2. Find something simple you want to build
3. Watch a tutorial on how to build it
4. Finish tutorial
5. Try building it without tutorial
6. Check results with finished tutorial
7. Repeat steps 4 through 6 till you get the…
Basically: 1. Pick a language 2. Find something simple you want to build 3. Watch a tutorial on how to build it 4. Finish tutorial 5. Try building it without tutorial 6. Check results with finished tutorial 7. Repeat steps 4 through 6 till you get the project down on your own 8. Pick a harder project
Rinse and repeat.
1. Pick a language
I like using C.
Most people get wound up by that, but the reason is simple: By using C, I have a small language set to solve the problem. Because of that, I really have to pay attention to the tutorial and think about what I'm being shown to do.
This is where I start to ask those inquisitive questions from earlier.
2. Find something simple you want to build
It can be hard to figure out what to build. Start with what you're interested in.
I love game programming, and emulation. I always gravitate to those type of projects.
I ask myself "Whats the simplest iteration of a game project I can make?" and start there.
The answer this time is "Pong".
3. Watch a tutorial on how to build it
Plenty of people have tutorials on Pong. Now I just need to find one and stick with it.
I usually run through the tutorial once, paying full attention to how they do it. I don't write code or take notes. I want a big picture of the process.
Then Ill go through it a second time. This is where Ill make notes now that I have that big picture, asking those inquisitive questions.
4. Finish the tutorial
Self explanatory, don't jump around. Try to get what the tutorial is saying. If, and only if, the content wasn't sufficient, then you find another tutorial. But not before you try building it first.
5. Try building it without the tutorial
You've watched the tutorial two or three times at this point, you have some notes, so try building it.
Try to recall the steps they took without peeking at the tutorial or source code.
Do your best until you're hung up on it for some time, lets say 10-15 minutes.
If you still cant recall it, try going for a 20 distraction-less walk. No scrolling on your phone, let your mind wander and chew on the material you covered.
If that still doesn't work, then go back and check that one part. Don't write the code as you're watching the tutorial, do it after you watched the part you needed.
Try again as needed.
6. Check results with finished tutorial
Maybe you got it, maybe you veered off. No worries, figure out how close you were and try a different tutorial on a similar topic, or try coding it completely without a tutorial.
7. Repeat steps 4 through 6 till you get the project down on your own
The challenge is really in steps 4-6. This is where we start employing Active Recall.
Its important you can do the project from your own recall. You don't want to just memorize it, you want to understand the decisions made and why they were made.
You want to understand why it was coded the way it was, and how they arrived at those conclusions.
8. Pick a harder project
Now that you've completed a simple project, try a similar, harder one. Maybe a Pacman clone or something?
The idea is you've built a basis, but you want to keep challenging yourself. Eventually, you'll have this foundation of knowledge and concepts because you practiced them so much.
What now?
I can go on and on about study technique's, memory recall, and all that fun stuff. (If that's of any interest, let me know and Ill put something together for it)
The main thing we want to do is fight off the forgetting curve.
The only way to do that is to build. Try building over multiple days/weeks. Recall what you can, look up what you absolutely cant.
Practice is the name of the game, but you can absolutely do it.
I believe in you.
- Glitchbyte