@ Brian Miller
"Joke: Assembler is the only true language! All hail assembly!"
I think you may be confusing symbolic machine language with assembler language.
Certainly the IBM System 360 Assembler (and it's presumable Nth generation descendants) was a devil of a lot more complicated than mere machine language. On the one hand, you had to worry about making sure the hardware environment was suitable (all those lovely base registers -- anybody else remember those?) and on the other hand you had a macro facility that was an invention of Satan himself.
[Let me annoy the moderator by discoursing at some greater length on the topic, how to teach programming.]
It seems to me that it's a mistake to think that teaching any one language is "teaching programming." All that does is churn out graduates with a single skill and very little understanding, especially if the one-and-only language is a very high level one. There's no particular virtue in suffering, but exposure to the hardware guts of a computer and to a selection of languages of varying levels of abstraction is really The Thing To Do. (If I use caps like that, can I use the Man from Mars icon?)
The point of doing so is to teach not gruesome details of syntax but rather, and much more importantly, underlying principles. The successful student would be able to relate the rather simple structure of classical procedural languages (Algol, Fortran, Cobol) to all sorts of wild and wooly derivatives: OO programming environments, Lisp, Ada, Python, Java, you name it.
With the right selection of languages taught, the student is then able to get his head around whatever turns up next a lot faster than the poor doofus who thought learning one language was "learning programming."
I've been out of touch with the field for so long I can't begin to even speculate what selection of progamming languages would be optimal for teaching, but I think readers will understand my point.
[Hey, what happened to the Man From Mars icon???? Guess PH will have to do in lieu.]