Friday, January 23, 2015

Learning sequence inversion...

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).

I learned machine language with the aid of a “repertoire card” (or “rep card” for short) – a one-page summary of all the machine language instructions the computer was capable of.  The rep card that I owned was a single letter-sized piece of light cardboard, laminated, with printing on the front and back.  It listed all the machine-language instructions, with the binary encoding, execution time (in clock cycles), and affected registers and flags.  I'd love to have a copy of that thing, for old times sake, but I haven't been able to find one.  The Computer History Museum appears to have oneThis 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...

No comments:

Post a Comment