Verdict: Highly Recommended.
This book wasn’t written for technical students – “instead they are English and Politics majors, historians, classicists, economists, musicians and artists”. Most readers of this review will be technical people. This book is an ideal present for the non-technical people you know. Quoting the author, “The purpose of this book is to explain the computing and communications technology…”. It can be read from cover to cover (I did) but you can browse the table of contents and dip into chapters of particular interest. It is split into three major parts – Hardware, Software, and Communications. Artificial Intelligence was not covered.
It has a good glossary and a sizeable index (6 pages long) – one thing I would query is the entry for “Interpreter” where it states that “JavaScript programs in a browser are interpreted” – I believe they are compiled with a JIT (Just In Time) compiler – though they do tend to start out as interpreters so the distinctions are quite blurred...
The first part, ‘Hardware’, covers the internals of a simple generic computer, illustrating the internals of both PC and Mac. It goes into detail on the CPU, RAM, and secondary storage. Other devices – peripherals (of all sorts) are covered also. Mobile phones and tablets are covered as well, with their similarities with the abstract picture of an idealised simple computer. Then it moves on to discuss the physical construction – from a picture of a PC circuit board to logic gates (referring the reader to Charles Petzold’s Code for details) followed by the role of transistors as the physical building blocks of logic gates and their use en masse in integrated circuits (‘chips’). Finally, Moore’s Law is discussed, about the numbers of transistors that can be manufactured on an integrated circuit roughly doubling every two years. Chapter 2, ‘Bits, Bytes, and Representation of Information’, is a really good explanation as far as it goes – explanations of floating point and fixed point representations would be useful. Chapter 3, ‘Inside the CPU’, dives into the subject using an imaginary toy computer, showing machine code and assembly language and how they can be used to write a simple accumulator program.
The second part, ‘Software’, introduces the Feynman Algorithm. It does not cover data structures or iterators but it does cover algorithm performance and the difference in performance between a number averaging calculator (linear algorithm) and that of a binary search (logarithmic), given random access to the data. Algorithms for sorting data are used to illustrate more complexities (quadratic, N log N). Finally, hard problems and their complexities (polynomial, NP) are illustrated with examples. The ‘Programming and Programming Languages’ chapter illustrates the difference between an algorithm (abstract) process and a program (practical) implementation. The early computers were programmed in machine code, which was difficult even for toy programs. To make that process easier, assembly language programming was developed – however, that required a total rewrite when faced with a new computer architecture. This led to a discussion of high-level programming languages – showing the split between compiler ‘front-ends’ and ‘back-ends’, with examples in Fortran, C, C++, Java, and JavaScript. It covers some of the challenges faced by programming in the real world – typically large scale, hundreds of thousands to multiple millions of lines of code – and the role that libraries, interfaces and SDKs play. The origin of the term ‘bug’ is covered, along with an explanation of how easy it is to introduce bugs into a system. The tricky subject of Intellectual Property is brought up – do we ever really own proprietary software? Open-source software, notably the Free Software Foundation is discussed. The ‘Software Systems’ chapter discusses in depth both applications and operating system…. Various operating systems are covered in depth – how they work, system calls, device drivers, and file systems. The layering of system software, hardware, and kernel are discussed. The ‘Learning to Program’ chapter builds on the programming experience gained in Chapter 3, using HTML and JavaScript to create a few toy programs to give the reader high level programming experience.
The final part covers ‘Communications’, starting with ‘Networks’ – both wired and wireless networks and their common characteristics (bandwidth, latency, jitter, and range as well as bandwidth, compression, and error detection and correction. I enjoyed reading this chapter because it explains modern communications. The Internet chapter declares the “Internet is neither a giant network nor a giant computer. It’s a loose, unstructured, chaotic, ad hoc collection of networks, bound together by standards that define how networks and the computers on them communicate with each other”. It discusses the challenges encountered when connecting the world’s LANS together – how the Internet’s protocols have become a de facto standard. The Internet’s innards are detailed (DNS, IP addresses, Routing, TCP/IP, UDP/IP, SSH, SMTP, and peer-to-peer protocols) in a user friendly fashion. The story of how the 1999 release of Napster, using Peer to Peer networks to share music in the MP3 format led to the U.S. 1998 Digital Millennium Copyright Act (DMCA). The failings of the Internet of Things (IoT) are discussed as well. The ‘World Wide Web’ chapter starts with its beginnings in 1989 where it built on the Internet to provide a system to “make scientific literature and research results more easily available over the Internet”. It does a good job of explaining its underlying technologies (HTML, cookies, JavaScript, Java). The security perils of the web (and the Internet itself) are illustrated along with security advice with recommendations for differing levels of advice. The ‘Data and Information’ chapter explains what personal data is – and how web searching works – how it is funded by advertisers paying for information relevant to their business interests. In a commercial environment, this can be annoying but life or death under an autocratic regime. The extra information gained from the metadata associated with mobile/cell phone calls is profound. The author shares his experiences of the data mining and aggregation of public data in the USA. Cloud computing is explained, discussed, and thoroughly demystified. The ‘Privacy and Security’ chapter explains that although digital technology has brought many benefits, it has a large negative effect on profound privacy and security. Both secret key and public key cryptography are explained, along with the benefits and drawbacks of the privacy that encryption, the Tor browser, and Bitcoin all provide. The ‘Wrapping Up’ chapter refreshes the reader’s memory and contemplates the future.
Reviewer’s note: This review is of the first edition. As of writing this review, I have just discovered that a second edition (published in 2021, 4 years after the first edition) is now available.
Website: https://press.princeton.edu/books/paperback/9780691219103/understanding-the-digital-world