How and Why Computers Work The Way They Do

Early in my programming career, like most beginner programmers starting out, I learned higher level programming languages such as BASIC, Pascal, C++ (and later on C#). I soon found myself asking questions that always seemed to lead me to the lowest layer of the computer construct. It simply wasn’t enough to understand the language and the art of programming at the higher level, I desired more of an understanding of what the machine was doing at the lowest hardware layer (specifically the processor, machine code,  the various buses, and memory).

Most universities today have computer science courses (which focus primarily on the programming and software aspects of computers) and computer engineering courses (which focus primarily on hardware and electrical design of computers). This may not be a major revelation, but as a computer scientist (or programmer), the further you move toward lower level languages (i.e. Assembly Language) the more you need to understand about how the hardware was designed to function.

I have read many books on Assembly Language and the major take away from all of them was this: “Through an understanding of the lowest practical human-interpretable computer language (assembly), the programmer gains a true appreciation for the machine he is instructing. This ultimately leads toward much more efficient and streamlined programming with higher level languages.” Makes sense right? So where does one begin this journey?

Not surprisingly, in the internet-driven world we live in, I have found many excellent sources online (both video and textual) that provide a foundation for the understanding of how these extremely complex nanometer-sized machines work. Even more interesting, I have found some great resources related to the history of these machines which also seemed necessary in order to have a full appreciation for the technology and to “close-the-loop” in my understanding. If you don’t like rabbit holes, I suggest you move on to the next article, because once you start down this path, it is a longing albeit extremely fascinating journey.

The Microprocessor and its applications by D. Aspinall. (partial primer)
History of Microprocessors
Grace Hopper (pioneer of computer compilers)
Self-hosting Compilers
Computer Interpreter
History of compiler construction
Bootstrapping compilers
Intermediate Language Representation
Transistor-Transistor Logic (TTL)
Understanding NAND Logic
Sequential Logic
MOSFET Transistors
Dynamic Random Access Memory
FLASH memory
Word Addressing
Locality of reference (temporal and spatial) with focus on memory caching systems
The art of assembly language programming (best assembly language resource I have found thus far)
Outstanding Video Series on Computer Architecture

This is a good list to get started. As I come across more resources I will update the list.

One thought on “How and Why Computers Work The Way They Do

  1. “This ultimately leads toward much more efficient and streamlined programming with higher level languages.”

    To some degree, perhaps. However, by and large, attempts by the programmer to write more efficient programs based on low level knowledge tends to be futile (unless he is explicitly dealing with the lower levels, say writing device drivers), sometimes even harmful. Today’s compilers are good at optimizing and the optimizations the programmer does can easily fail when the same program is run on a different machine. To write efficient code, it is far more important to know the language, libraries, and interfaces with which we deal. (Never mind algorithms…)

    A good developer should have his eye mainly on making his code easy to read and maintain, low in bugs, and fast to write (not execute).

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s