posted: June 19, 2016
tl;dr: Inspirational explanation of how simple technology evolved into modern-day microprocessors and software
A coworker at Uprising Technology bought me a copy of Charles Petzold’s book Code: The Hidden Language of Computer Hardware and Software, written in 1999, because the book meant something to him as a software developer. I can see why. While there are plenty of books that explain how to use the latest technology-du-jour, there aren’t too many that explain the history and evolution of computer hardware and software, and how the field advanced from basic simple components and circuits into the powerful microprocessors and higher-level languages that are omnipresent in today’s world.
Petzold starts at the very beginnings of what would evolve into electrical (as opposed to mechanical) computing systems. He begins with the example of using a flashlight to send Morse code, and shows how even that simple system involves a code which represents information. He then explains how a telegraph works, and then how to use the simple components of those two systems to construct circuits that can perform logic and remember information. In careful steps he builds these components all the way up into a microprocessor-based computer system with much more sophisticated software and code that people are still inventing new uses for today, in fields such as artificial intelligence, the Web, and the cloud, which contains huge numbers of the computer systems that Petzold describes.
For me, Code was an enjoyable trip down memory lane. This book, had it existed at the time, could have functioned as the textbook for the first freshman year Electrical/Computer Engineering course I took at Cornell back in the 1980s entitled “Introduction to Microprocessors”. Microprocessors were pretty new back then; I can’t even recall if we had a textbook; we might have just had some mimeographed papers. I do recall the professor following a similar progression, by explaining simple circuits, Boolean logic, then more complex logic circuits that could add numbers, then progressing to the basic architectural building blocks of the 8-bit state-of-the-art (for back then) microprocessors.
The capstone project that I did with a friend of mine was doing assembly/machine code for a processor connected to an oscilloscope and an input device to make a “mad bomber” game. In the game the bomber would move back and forth across the top of a wall dropping bombs towards the bottom, where they had to be caught in a bucket of water to continue playing the game. So the game was perhaps just a bit more sophisticated than Pong (we had to generate random numbers to make the bombs drop in an unpredictable manner) and a bit less sophisticated than Flappy Bird. Back in the pre-video console days we spent a lot of time programming our own games. For me, the programming was even more fun than the playing.
Hopefully Code can continue to inspire the software developers of tomorrow, as well as teach them what is inside that rectangular chip package called the microprocessor. The more you know about the system that is actually running your code, the better a software developer you will be. I definitely recommend Code to young kids and others, at the high school or early college level, that are interested in learning how computers work.