You know how the very first introduction to programming in schools is a thought experiment that involves listing a set of rigorous instructions to make a sandwich?
I really wish programming tutorials for absolute beginners were exactly like that. Like please program my dumb ass to learn programming.
Ideally a tutorial would Just assume I know nothing at all. In fact, assume I'm some medieval serf from 1320, motherfucker. Assume I've never heard of a computer before, never mind used one. Assume I've lost two dozen children to the plague, scurvy, smallpox, and conscription into wars with neighboring fiefdoms. Assume I'm currently imprisoned in the oubliette for hiding grain under my floorboards. Assume I speak in such a thick accent from bumfuck nowhere that it is entirely unintelligible to both contemporary nobility and modern English speakers alike. Assume I'm illiterate. Assume I've never washed my penis before. Assume I've never wiped my ass.
I'm talking about a tutorial that involves a thorough description of each and every click of the mouse. Rigorously define every single word that has programming relevance. Leave no stone unturned, if you're even slightly vague about any step I guarantee you I will fuck it up! It'd be sick as hell if such a lesson plan existed for every common programming language
I'm talking about a tutorial that involves a thorough description of each and every click of the mouse.
The thing about that sandwich programming introduction is that there is no limit to how detailed the instructions are. You can say "open the jar of peanut butter" and your partner doesn't know how to do it. Maybe they don't know how to execute "unscrew the lid" or even "grasp the lid". The level of detail of the instruction set is arbitrary. The goal is to introduce students to the idea of functions: there are some things the computer already knows how to do, and you can put them together into larger routines.
I worked at a helpdesk for a bit. The reason tutorials don't give you "click at pixel 300, 627" is because you need to understand computers as tools that respond to input according to sensible rules. They are not magic invocations; there are many paths to the same outcome. Say I want you to open a program. I can say "click that icon on the desktop", but I'm just guessing at what level of instructions you understand. For instance, I didn't specify to double-click, so a really clueless user might single-click and ask "now what?" and be confused when I follow up assuming they opened the program. Normal users get annoyed with tedious detail; maybe they normally open programs without using the mouse at all. If I lead by saying the actual thing I want you to do, in this case "open the program", you can ask for more detail if you don't know what I mean.
Since it's got to be appropriate for many people, tutorials can't perfectly guess your level of knowledge. Since they are finite length, they can't fully define this infinite chain of meanings. For instance, if I ask you to create test.js, you need to know what a file is, what an extension is, what a text editor is, which one you're using, how to open it, how to save a file, how to use a menu bar, on and on and on. Since the tutorial can't ask you what you know and respond on the fly, almost everyone is going to have to look some stuff up themselves. At the top end, there are often no tutorials! We try to write docs and READMEs, but that competes with development time - sometimes you're a new employee, you get dumped into a poorly documented codebase, the last workers quit, and you have to figure it out yourself.
The goal is not to turn you into a factory automaton, moving the mouse to (300,627) and not knowing what to do if there's an unexpected popup. Goal is to get you away from rote repetition and towards understanding what you're doing. If you must, a thinking machine. Practically, you need to plop the serf down in front of MSPaint until they learn to use a computer. Then they can learn programming.
One thing that irks me is when like hobby YouTubers gloss over the programming. They'll spend ten minutes showing you every solder joint and then go "then I programmed it" and show 5 seconds of them typing.
It is hard to make the process of programming entertaining to a wide audience because a lot of programming occurs in the mind. While some people are interested, many aren't, and youtubers prioritise the retention graph.
TodePond is the only YouTuber I can think of that does this. His videos were initially about the custom programming language he made for his 3D simulation game, and slowly evolve from being in-depth tutorials on how to use it to being programming fever dreams.
One of the problems with this is that the setting up of the programming environment is different for different computers and operating systems, and becomes outdated with time. Though I'm pretty sure old school manuals for like 80s computers (and BASIC was usually included in that) used to be kinda like that.
Command line interfaces have an advantage there, they don't change as much as mouse interfaces and instructions can be written down rather more easily than mousing instructions. I'm pretty sure you find a C programming tutorials telling you to run
gcc -o foo foo.c && ./foo
from decades ago and that would still work fine on a modern Linux.
Assume I’ve never washed my penis before. Assume I’ve never wiped my ass.
Pretty sure the peasants bathed fairly frequently, it was the nobles that didn't, because they wanted to show off how little work they actually did that they didn't "need" to wash themselves.
Though I agree, trying to learn Python right now and it'll be giving me a bunch of code like:
class Item(store.object):
def __init__(self, name, desc, icon=False, value=0, act=Show("inventory_popup", message="Nothing happened!"), type="item", recipe=False):
global cookbook
self.name = name
self.desc = desc
self.icon = icon
self.value = value
self.act = act # screen action
self.type = type # type of item
self.recipe = recipe # nested list of [ingredient, qty]
And just assume I already know what all of this does and provide 0 explanation on any of it, except for a couple of comments that don't help. Like yeah, "type" is going to be the type of item, but why are we def init here? What does that mean? Does it need the two underscores? Do they do anything different if I do one instead? Why are we organising things this way, is there another way, or is this the only way? No step by step instructions or education, just assumptions that I know what any of this means. I'm an artist, not a programmer dammit! I don't want to just copy-paste stuff and hope that it works, I want to understand it so I can expand upon it and actually Learn from tutorials!
Python in particular is very well documented. There are two levels, the official tutorial that glosses over stuff and presents things conceptually, and the reference that tells you exactly what is happening and what the syntax does.
That whole chapter about the data model is really useful when you try to do anything fancy with Python. It's all in one page so you can Ctrl-F all the arcane definitions.
Thanks for that, I was more trying to make a point about how this "beginner level" tutorial isn't actually in the business of explaining things in a beginner friendly way and assumes a lot of pre-existing knowledge, but the documentation will be extremely helpful going forwards, I've asked for help from people in the past and this is the first time someone actually just linked the official tutorial to me. (I wonder if others were worried about being too condescending or something, because it's exactly what I've been needing to cross reference things and make sure I understand them.)
I will say, there's some amount of rote behavior in every programmer. There's too much stuff to learn. Eventually you will import a library and call someFunction(), and you won't investigate how it works until it stops working (hopefully never). Good tutorials strike a balance between excruciating explanatory detail and rote instruction-following. Sometimes you just want to set up the stupid npm package and get to programming. For Python specifically, I've heard good things about Automate the Boring Stuff.
Yes, the two underscores actually do matter. This method is a special method called a constructor and it’s supposed to initialize all the variables of a class. The method you showed is boilerplate code because it initialized all the values to the parameters passed in.
If the method was called anything other than __init__, it would not be a constructor.
I kinda wish people would start with what you need.
Lots of tutorials start with an obvious menu location, and I just can't find it. Months later I'll find out you need a specific add on or version. Off the top of my head (not vocational) is "Send air volunteers" in HoI4. It took quite a while to find out you needed one particular DLC, the button was in the logical place (as much as anything is in paradox games). Idk why no one in all but one help thread thought not to mention it.
I'm gonna say the forbidden Hexbear phrase and say - Actually AI (eg ChatGPT) is really helpful for learning exercises like this. Maybe because it was trained on a bunch of techbro stuff, I don't know.
Open ChatGPT, say you want a very simple tutorial about whatever coding language. If at any point it suggests something you don't understand, or something went wrong, tell it and it'll usually get there. As a professional coder, it is a genuinely helpful resource because I treat it just like a slightly more advanced search engine.
Maybe don't use those words specifically though unless you really want to be taught like a medieval serf
I wish it was like this too, or at least, had been about a decade ago when I tried to learn. I do/did not have the brain for it, and I wonder how much different my life would be if I could have gotten hired doing coding stuff instead of people facing roles.
I remember when I first started out codeacademy was pretty good b/c it did everything in the browser so u didn't have to deal with anything but the actual coding.
Yeah, when I got my degree, the coding aspect of it became much easier as time went on. The math and shit gets more complex, and whatnot, but after getting some kind of base of understanding, it was easier.
Now I've been doing it professionally for years and can consistently Google how to instantiate arrays in a variety of languages with success.
i would not describe myself as a coder, but people i work with would. because i can, if needed, write simple code and develop custom / responsive interfaces and web-based decision making tools. a lot of the tools i use will confront me with the need to put together some relatively complex conditional statement or query, or to design a function and parse some data and make it readable to some tool.
i took a comp sci class at in the 90s and the first unit was Karel/Karel the Robot. i remember thinking it was dumb and how i wanted to be like coding phreak shyte and cracking the warez like tha riddler, but i'm glad that was the foundation now because languages seem to come and go, and be application specific anyway. i had to learn C when i was 19 and let me tell you how i never used it again. anyway, so it was helpful to learn a programming language that was designed to be learned, to edify and draw the learner in to programming conceptually with functions, loops, conditionals, etc.
our example was folding a paper airplane, but that wasn't in the intro to programming course, where we just went right in with printing in the console, then arithmetic operators and variables, then loops, sets, recursion, errors handling, CSVs, statistics and graphics.
I later had to take an indoctrination introduction to $MAJOR which had an intro to programming module sandwiched between a few other rudimentary modules that were insulting to require people to spend weeks of time and thousands of dollars practicing (Especially since each module is just retaught from the beginning and at greater depth in dedicated classes later). This was where we spent 15 minutes on the paper airplane exercise.
There are plenty of programming textbooks that are 1000+ pages long that go through exactly the exhaustive tutorials you’re looking for, from the simplest concepts to the advanced tricks. I know this because I am not a programmer by profession and I had to learn from scratch to perform certain tasks for my work.
However, I would not recommend this approach at all. Trying to teach/learn everything is the fastest way to make a beginner lose interest in a subject. You might think this is what you need, but you will quickly find yourself getting exhausted and having to muster the will power to endure through each and every section, and in the end you either give up, or you start skipping sections, which is the point of why tutorials don’t follow this approach.
Maybe it isn't for you. I've never been able to get into it myself. I like IT, networking, security and Linux. I'm not dumb, but I'm just not suited to coding. I wish I was-- it would be really useful for me. ChatGPT is good for a lot.
Not sure if you're interested in the language but Heartbeast's Godot Tutorials took me from knowing nothing about programming to being able to figure things out on my own, maybe something like that could have the desired effect.