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.
Since the tutorial can’t ask you what you know and respond on the fly,
someone is working on that
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 doubt they worried about being condescending, lots of people fear that the official documentation will be too difficult and never read it. The logic is that the docs are arcana written by witches that know how to write programming languages, and the tutorials are written by regular girls that had to struggle to understand the language instead of the syntax just appearing on their heads.
I pretty much learned how to program from the official Python tutorial. I had been struggling for years before that; I had some notions but I couldn’t put together anything really useful. The Python docs got me over the hump precisely because of what OP said: it starts from 0 and builds up until you have enough tools to write whatever project you have in mind. I imagine that having had to design and reason everything about the language actually gives the writer a great sense of how it fits together and what the logical increments are.
Since then I always go first to whatever the language designers wrote; for example K&R’s The C Programming Language, the Rust book, the Postgresql manual, etc, and only once I feel that I know enough I complement it with other sources.
This approach extends to libraries as well: first I read whatever official docs there are, then I search the source code for the functionality I need to learn about, and only if that fails I look elsewhere.
It seems like a slow method but it’s so reliable that it works out for me. After a while of doing this you become the reference and people come ask you questions.
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.Thanks for that, I come here making a jokey complaint and people give very informative and helpful replies, it’s great!
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.
This gets worse with industrial software.
You’re basically expected to buy all the DLC for Paradox games, it’s awful and I hate them.
I tend to skip the ones I’m not interested in the theme of, or happen to come out when I have zero money. Or just buying them less/not at all now.
But I’m pretty sure I’ve had the same problem with AutoCAD and Solidworks.
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
Assume I’m illiterate. Assume I’ve never washed my penis before. Assume I’ve never wiped my ass.
They do make programming languages and tutorials for people like this. It’s called Scratch (developed by MIT). https://scratch.mit.edu/
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.
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 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.
https://www.codecademy.com/catalog/language/python
that was like 10 years ago tho so idk if it’s been enshittified or if I’m remembering something else.
Anyways death to bazingas, death to computers.
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.
Maybe help me understand this post?
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.
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
indoctrinationintroduction 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.anyway, here’s the tutorial you asked for; https://youtu.be/mZWsyUKwTbg?list=TLPQMTQwMjIwMjSnpNj7zCmEig
this video is incredibly funny!
I found a YouTube link in your comment. Here are links to the same video on alternative frontends that protect your privacy:
please program my dumb ass to learn programming.
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.
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.
You’re literally me
Comforting to know there’s at least two of us!