This is the best non-technical book I have read on computer architecture, It covers great breadth and depth of the existing technologies, as well as the history of computing.

On the hardware side, it explains the working principles of relays and transistors, and how they can be used to make logic gates, adders, latches, arithmetic units, and random access memories. It then walks you through the process of building a general-purpose computer from scratch.

On the software side, it explains how machine code, assembly language, and high-level programming languages such as ALGOL work. Specifically, descriptions of all 244 opcodes of Intel 8080 chip are given.