The materials are under core units.
Understand that the first unit is the roughest: the narration needs to be redone at some point and I plan to get rid of the intro music (it doesn’t contrast well when the music cuts out and my droning voice comes in). The other units are generally a bit more polished.
If you have corrections or other material to contribute, see development.
If you work your way through the current materials, I recommend you take it in 20-30 min chunks (lest you get too sick of my voice), using the notes to refresh you on what you last watched. Even assuming everything is comprehensible enough to get you all the way through all 10 or so hours, it’s very unlikely you’ll understand and retain everything, but you should be in a much better position to understand other resources. The overall goal of the project is to spare you enormous amounts of pain and time in learning to program, and I hope the materials will accomplish that even in their partially completed state.
Here’s a few ways these materials are meant to differ from what you usually find:
Favor concepts over particulars:
Knowledge tends to fall into two types: the conceptual and the particular. Learners need to “get” concepts and then retain them; for particulars, in contrast, there’s nothing to “get”, just something to memorize.
So learning particulars is easier and less work, right? Well particulars are certainly easier to teach because all the teacher has to do is basically list them. However, most particulars in themselves seem arbitrary and boring, so they tend to go in one ear and out the other. What’s worse, the only real way to learn particulars, in practice, is by repetition. Ideally, this repetition would be “organic”, arising naturally in the context of some other business the student undertakes, so teachers should try to contrive such “organic” scenarios. Unfortunately, this is generally very hard for teachers to do and sometimes just not possible.
A concept, on the other hand, tends to be memorable once you get it, and once you do get a concept, it’s much easier to memorize the particulars associated with it. The challenge for teachers, then, is to make concepts understandable by articulating them clearly and presenting them in the right order.
So the approach of these materials is to greatly focus on concepts over particulars. For example, when it comes to laying out the features of programming languages, I defer the introduction of syntactical conveniences because they’re mostly just so many particulars that distract from the core concepts. A for loop, for instance, is just a convenience for more compactly writing a while loop, so I don’t mention for loops until well after the core concepts of the language have been clearly laid out.
Err on side of concision:
When material is too verbose, students get bored and their patience wears thin. When material is too concise or just moves too quickly, students can get lost. This danger is especially present when the material is delicately constructed such that, if the student fails to follow along at any point, they won’t understand anything that comes after.
Currently, the materials err on the side of concision. My thinking is that minimalism is the ideal, so better to cut bloat up front and pad things out later as needed.
Not a tutorial:
Because the materials mostly focus on concepts rather than particulars, they are in this sense not “practical”. I intend to include exercises and lengthy walk-throughs of code at some point, but such things will always be supplements to the main materials, not integral, mandatory steps. When the success of learning materials hinge upon the student stopping every other step to work through exercises, I consider it a failure, an abdication of the teacher’s responsibility to clearly explain the often abstract and hard to verbalize concepts of programming. Students should be able to simply focus on absorbing concepts and information almost like they would absorb an interesting (if dry) story. It’s true that students don’t really learn to program until they get their hands dirty, but I strongly feel that actual hands-on practice can wait until students have a reasonable mental model of how computers and code work. When teachers force students to wade through the giant mess of particulars which makes up the actual practice of programming, teachers are basically pointing and grunting.
The idea is that, eventually, you shouldn’t need any other sources to learn the materials we cover other than reference materials. So say, instead of, as is currently typical, having to read multiple books on Java, you should only need our materials on Java (aside from, of course, the standard Java documentation). The materials don’t yet reach that goal, but this release should still be very useful if you’ve been trying to learn, say, Java, but find the available materials frustrating.
The broader idea of the project is that beginning programmers need a comprehensive approach that doesn’t just focus on programming languages. Hence, “literacy”.
I have a several other units in a half-completed state. The next unit I’m finishing is all about Unix and using the Unix shell (with a bias towards Linux and Bash). That should be done in a couple weeks.