Learning sequence inversion... I just read an article about one fellow's experience in learning about how computers work with ones and zeroes. This guy first learned how to program in some high-level language, and then took it upon himself to learn assembly and machine language. For him, the experience was revelatory – he clearly hadn't really understood how computers worked before that (and actually, he probably still doesn't understand how the hardware works).
It struck me, as I read, that this is precisely inverted from my own learning experience. The first thing I learned was how the computer hardware worked. Then I learned how the ones and zeroes stored in RAM controlled that hardware – machine language. Then I learned how assembly language made it easier for people to read and create machine language programs (by using an assembler). Much, much later I learned about higher level languages (BASIC, FORTRAN, CMS-2, PL/1, and COBOL, specifically).
Computer History Museum appears to have one. This web page has a piece of a similar one, shown at right. That single sheet of cardboard was the only programming documentation I had for several years as I started to program.
This “bottoms-up” approach to learning how to program makes great sense to me, most likely because that's how I learned it :) For me, high level languages are still the fuzziest part of my knowledge, and I'm still learning more about them all the time. This isn't entirely because of the bottoms-up approach, of course – that area is changing rapidly, and even the top-down learners have to devote considerable effort to that if they want to keep up. But many (most, actually) programmers who learned top-down never learn assembly language, or machine language – a fact that I still have trouble wrapping my brain around...