"TUTORIAL HELL" is Both Harmful and Imaginary
Day 2862
Every time I go on a programming subreddit or other public forum, I see so many distraught learners in anguish that they can't start "A Real Project", and are "stuck" on tutorials, as state which has now come to be referred to as "Tutorial Hell."
It honestly makes me extremely mad that people have made Tutorial Hell into such a meme that new programmers are now scared of it. It's unnecessary gate-keeping around what counts as A Real Project, and it's harming programming students who could otherwise be happily progressing on their way to mastery if they hadn't been poisoned by this idea.
There are zero useful aspects to the concept, and it only prevents students from learning rather than helping them learn. Every programmer in the world, from you to the creators of Google, has to get their ideas based on SOMETHING:
- A problem they want to solve for themselves (or a friend, or a customer).
- Some knowledge they already had, applied in a new way
- A new skill they've just picked up from another project or lesson
- A new feature that was just introduced into some technology they use
There's literally no way to get an idea except to have had some experience that leads you to it.
So starting from a completely empty file, and divining a new project based purely on inspiration is of course a very intimidating task, but luckily we don't ever actually have to do that.
The process of developing projects is actually very natural (even inevitable???) if you transfer your code more gradually from "100% Tutorial" to "100% Project":
- Start off by doing the tutorials as written. Make sure that you're actually coding along and checking in your code to a github repo.
- Every time you finish a tutorial, think of some tiny change you can make to the code to "make it your own." This can start out as small as just changing some text on the screen, or the colors it's using.
- Over time you'll naturally get some more ambitious ideas for how to make the project into something even cooler, and you'll start adding larger things like a new feature with its own functions.
- Eventually you'll get enough practice expanding projects and applying ideas that the project is mostly your "custom" code instead of code the tutorial told you to write.
- Now maybe you have an idea to make a clone of this project but make it even better.
- Now you're making A Real Project, From Scratch, but it doesn't rely on you having some eureeka moment of inspiration.
Here's what those steps could look like in a more specific example, from a common tutorial:
- Complete a tutorial on how to fetch data from a weather API.
- Think, "how could I do some additional fetching to practice more?"
- Decide to fetch some data from a movie API instead.
- Think, again, "how could I do some additional fetching to practice more?"
- Realize that you could use the skills you've learned to fetch two different movies, and iterate through the casts to see which actors they have in common.
- Think, again, "how could I do some additional fetching to practice more?
- Realize that you could do something similar by fetching two actors, and see what movies they have in common.
- Remember that the meme "6 degrees of Kevin Bacon" is related to actors being in the same movies together.
- Realize that you could make an app that tracks Kevin Bacon degrees by putting together your movie overlap code and your actor overlap code.
- Take the code you've written to modify the tutorial and paste it into a new project, where start turning it into its own app.
- https://apps.apple.com/us/app/six-degrees-movie-trivia/id328926385 (not my app)
Coding learners, you're going to be ok - you can take it gradually! Try to just focus on programming a lot, and what kinds of things you program will evolve naturally over time. If you want to consciously lead things in the direction of building your own projects from scratch that's great!
But trying so hard to make this transition that it discourages you from coding is hurting you for no good reason. If you stay curious enough and excited enough about programming, over enough time you'll reach this goal without even trying to.