Introducing the "Do-It-Yourself" Tutorial for Learning to Code
Derek Kuhnert Nov 18
Hi everyone, my name is Derek, and this is the tutorial I wish I had when I was first learning to program.
I've been thinking about this idea for a few years now. This is going to be a series of posts here on DEV, that form a learning path for people who are completely new to coding, but want to learn it from the ground up. The interesting part of all this is that it's not really a tutorial - at least not in and of itself.
I'm calling this a "learning path" because I'm not the one teaching this stuff. This is more or less a guide of what concepts a learner needs to learn, and in what order, in order to efficiently go from zero to making useful applications, without wasting time being stuck on things that aren't really relevant to the learner's current skill level or next task.
I think this is something that's uniquely possible in this domain; tutorials are all over the internet for learning how to do specific things in code, and the difficult part is trying to figure out what exactly you need to learn right now. I'll often see tutorials be geared towards a particular application, like "How to make a Discord bot in Node", and many people with zero experience in programming will jump to something like that, because it has an immediate benefit.
The issue, of course, is that these tutorials are not geared towards someone with zero experience, and if someone with zero experience tries to use that as their starting point, they will either a) Quit because it's using concepts they can't even wrap their head around at this point, or b) Learn how to make a Discord bot exactly how the tutorial says to, and do absolutely nothing else, because they don't understand the prerequisites for really learning this stuff, and are just copying code they see on the screen.
This series, on the other hand, is geared towards teaching the admittedly vague and general concept of programming, but it's needed if you want to be able to solve problems with code quickly, or to do anything that's not currently covered in a tutorial specifically geared at what you're trying to do.
This series will be divided into a small number of posts (that are being released as I complete them), each with several units that teach a core concept. Each unit takes the form of a list of things that the learner should try to learn on their own. I'll include notes for common pitfalls to avoid, specific things to keep in mind while cementing the concepts in their mind, or topics that the learner may encounter when searching online that they should probably avoid for the time being to save time bashing their head against something more-or-less irrelevant.
Each unit will contain a small test that should be completed before moving on (to make sure no major concepts have been missed), and the post will contain a final test at the end that provides a greater challenge, but proves that the learner has learned what they need to before moving on to the next major section.
I'm writing this series to be used with a specific mindset - That the end goal is to learn how to use code to solve problems, and not to make any specific thing. By the end of this series, a learner will be able to very quickly apply what they already know to be able to seek out just enough information to build whatever application they want. They will have the perspective to know when a tutorial might be wrong about the best way of doing something. They'll also know how to expand on a tutorial's concepts to make the application their own.
I know that this mindset provides a challenge to the learner - They may not understand why they're learning something. My response to this, if you're stuck in this situation, is to look ahead and see some of the things you'll be doing in the future, to understand why it's important to learn foundational topics first. The goal is to learn to code, so that you can have a starting point to work towards whatever application you want in the future.
That said, here are the currently complete or planned sections of this guide. More of this will be defined later as I continue to develop the guide.
Part 2: Representing Complex Data
Part 3: The Structure of a Complex Application
Part 4: User Interaction Principles
Part 5: Programming to make Future Programming Easier