
One of my stranger interests is small systems. And when I say small, I mean really small. 8 bit processors, a little bit of RAM, and a serial port can do a tremendous amount. In fact, there are a lot of real time systems that are still in operation today on similar machines. The first little system I used was actually quite large for its time -- an Apple //c with a 65C02 processor, 128k of RAM, and two floppy disk drives that could store a whopping 140k each. (Not 143k as often was mistaken.) I still can recite the memory map.
I got my first x86 based PC in 1990. An 80386SX machine made by Hyundai that had a megabyte of memory and a 80 megabyte SCSI hard disk. It took me a while to get used to the space as I learned how to program on it. For instance, comments in BASIC code was a sin since it consumed memory on the Apple. Long variable names were also out since they would consume too much memory. (Two alphanumeric characters only.) My first Pascal programs as a result were these evil looking blobs of code that were completely unreadable. It took a while to get used to compiled environments where I could use long variable names and appropriate comments, but I finally made it there.
When I started college, we used Sun IPX machines in the lab that had SPARC processors and 16M of RAM running SunOS. It was the first time I was exposed to virtual memory -- the idea that I could use more memory than the physical system had. Amazing.
Thoughout this process I carried some of the more useful things I learned from my Apple. Machine organization made sense, the behavior of stacks, and a strong understanding of the trade off between performance and memory utilization. The latter made it much harder to get over the idea that optimizing compilers were almost always better than humans. To this day I have only met two people that can beat compilers: Randy Hyde, the author of several books on assembly language and instructor at UC Riverside, and Kailash Kailash, an engineer I worked with at NetScaler.
As a result, small systems still facinate me. It's a challenge to see what can extracted from the available capacity. Embedded systems are fun for that very reason -- watching an 88mhz RISC 4000 process packets at layer 4 and maintain gigabit throughput is just plain cool. The challenge to find small machines to play with for kicks becomes even more interesting as the raw capacity of desktop computers become even greater. I'm typing this on a PowerBook G4 which has an obscene amount of capacity compared to my Apple II -- that makes the G4 great when I need to get "real work" done, but not nearly as fun to write code for. (Not that anyone pays me to write code anymore... probably a good thing.) It's also almost impossible to get a handle on how things really work with all of the layers of abstraction going on. For someone learning technology for the first time, "going deep" is writing any software that uses system APIs.
As I look at my son, I wonder how I'm going to approach this should the day come that he expresses interest in getting under the covers of the technology around him. I've got a few years to think about it and I'm sure how he thinks about problems will have a lot to do with the approach. Hopefully the day will come when I can show him that small can be beautiful.
To be seen.
Posted: Sat Sep 2 14:48:50 2006
"Steve Shah Blog", because Google can't read alt tags.