Looking at historical computing educational kits that explain how computers work rather than 'only' how to work with and program computers I started thinking a bit about the different levels of abstraction on which people understand computers. Here's what I came up with:
The Working Level Understanding: This is how most people understand computers today. They use it as a tool and know how to work with programs that serve their needs such as word processors, spreadsheets, web browsers, etc. Most people on this level, however, know little about what's inside that notebook or smartphones and can not explain the difference between, let's say, a hard drive and RAM or even know that such things exist.
Hardware Understanding: The next level from what I can tell is knowing about the components a computer consists of such as a processor, RAM, the hard drive, etc. and what they do.
Programming: The next level is programming. One can certainly learn programming without knowing about the hardware but I guess learning about that would come in the process of learning how to program anyway.
Understanding how the individual components work: The next level is to understand how the different parts of a computer work and what they are based on, i.e. logical gates, bits and bytes to simplify it a bit. There are certainly different depths one can go into on this level as pretty much on all other levels as well. The "But How Do It Know" book I've reviewed some time ago is one of the best ways to really feel comfortable on this level.
The physics behind the gates: Next in line is to understand how gates are built, i.e understand how transistors work on how they are implemented on silicon. I liked this video on Youtube which gives a good introduction from a non-technical point of view. Obviously one can go much further here, down to the quantum level and beyond but I think the basics of this level are still understandable for somebody interested in the topic without a deep technical background.
Personally I think I have a pretty good grasp on most of these levels, at least from a high level point of view. But I decided to go a bit further about understanding how individual components work. As I said in a previous post I learned early in my career how a CPU works and what is inside. However, the control part of it always remained a bit mysterious. I wouldn't have thought it to be possible to build my own CPU before, but after reading the "How Do It Know" book plus some extra material I am sure I can pull it off, given some time and dedication. So there we go I have my new quality time project: Building my own CPU. I'll call it the Do It Yourself (DIY) CPU and will of course blog about it as things develop 🙂
Very cool Martin. I liked your uCode blog which, for me, helped me understand how CPUs really worked especially when I had to program in uCode many years ago….