Read other letters about this article
I'm a bit disappointed at the number of mac users who responded to this article. Their many suggestions for scripting languages and HTML only further proved the point the author made. That is -- scripting languages don't teach you a darn thing about how the computer actually works! What's really going on down below. But that's been my chief complaint against Apple for so many years; they hide the inner workings of the computer from the user, so the users are all but computer illiterate!
The old-style BASIC interpreters forced you to learn a thing or two about the very hardware and critical functions of the CPU in order to write a program. Today's scripting languages don't do that at all. You can't Peek and Poke a memory location. You aren't forced to think mathematically about iterating an array of numbers across memory locations that correspond to bitmaps to draw pictures on your screen. Did you know that's how modern computers draw all those fancy graphics? See this text I'm writting? Ever see the math involved in rendering all these little letters through your video card? You'll never understand those things if Perl is your first language. (Oh, and for the record, HTML is not a lanuage despite the fact LANUAGE is part of it's name.)
I was in elementary school when my father bought a Commodore64 and I loved that thing. Thinking about it now, you had complete and total control of every hardware microchip on that machine. All you needed was the memory address and it was your to control!
Now-a-days with protected memory schemes, well it's quite a bit more complex. (I hold a bachelors in computer engineering and I still have to pull out my textbooks to remember how it all works. How the page is translated in the TLB to generate a logical address and moved into the memory management unit and transformed into a physical address. Unless a page fault and move to the disk. bleh.)
I agree with the other posters who suggested using the TI programmable calculators and Lego Mindstorm sets. I'm not sure how much computer architecture one can learn, but maybe it's something.
My opinion would be to start down low, with the basic concepts of binary arithmetic and binary logic tables. Then progress to assembler language. You'll have to provide an environment pre-configured for assembler code. I would suggest Linux and how to compile assembler code to make it run with the libc libraries. From there, move on to the concept of a compiler, how it works and how the C language is really just high-level assembler. Then from there it's just a quick understanding of object oriented structures and before you know it, everything makes sense.