Cover of the summary of “Understanding the Digital World”

Book summary “Understanding the Digital World”: summary

Brian W. Kernighan

4,566 words · 26 min read

You use digital devices constantly, yet the underlying mechanics of computers, software, and networks often remain a mystery. When systems fail or security breaches occur, you lack the technical literacy to understand the root causes.

Summary text

4,566 words · 26 min read

Introduction

You use digital devices constantly, yet the underlying mechanics of computers, software, and networks often remain a mystery. When systems fail or security breaches occur, you lack the technical literacy to understand the root causes. This lack of insight leaves you vulnerable to privacy risks and technological disruptions that shape modern society.

Brian W. Kernighan explains how the digital world works by breaking down hardware, software, data, and communications into clear, accessible concepts. You learn the foundational principles governing everything from smartphone processors to global internet routing. The book guides you through the layers of abstraction that make modern computing possible.

The text addresses several core questions to build your technical understanding:

  • How do transistors translate into running programs?
  • What mechanisms move data across the internet?
  • How do encryption and security protocols protect your privacy?

1. Hardware History and Logical Construction

Hardware History

Computers evolved from mechanical assemblies to universal electronic devices governed by the von Neumann architecture, which separates processing from memory and storage.

The Jacquard loom was invented around 1800. It used rectangular cards with rows of holes to specify weaving patterns, allowing machines to be programmed and changed mechanically. The introduction of labor-saving weaving machines led to social disruption and the violent Luddite protest movement in England between 1811 and 1816.

Charles Babbage designed mechanical assemblies of gears, wheels, levers, and rods to automate tedious arithmetic calculations. Ada Lovelace described how to use the planned Analytical Engine for scientific and non-numeric computation. Ada Lovelace speculated that Babbage's engine could compose elaborate scientific pieces of music, earning her recognition as the world's first programmer.

Herman Hollerith designed machines that processed information encoded through holes punched in paper cards, transforming data processing speed for government applications. While the 1880 United States census took eight years to tabulate by hand, Hollerith's tabulating machines allowed the 1890 census to be completed in just one year. Hollerith's company became IBM in 1924 through mergers and acquisitions.

Early electronic computers relied on bulky, power-hungry vacuum tubes, but subsequent inventions like the transistor and integrated circuit revolutionized modern computing architecture. ENIAC was built in the 1940s at the University of Pennsylvania. It was an all-electronic machine that occupied a large room, consumed significant power, and performed about 5000 additions per second. EDSAC was built in England as an early stored-program computer in 1949. The transistor was invented in 1947, and integrated circuits were invented in 1958.

Logical Construction

Computers rely on a standard logical architecture consisting of a processor, primary memory, secondary storage, and input-output devices connected by a bus. This design separates the CPU for arithmetic and control, the RAM and disks for memory storage, and peripheral interfaces for human interaction. This architecture has remained functionally stable since the 1940s despite massive physical improvements. John von Neumann, Arthur W. Burks, and Herman H. Goldstine published their preliminary paper on electronic computer design in 1946. This architecture is common to diverse devices, ranging from early room-sized computers to modern PCs, Macs, and smartphones.

Storing program instructions alongside data in primary memory makes the computer a versatile, general-purpose device. By placing different instructions into RAM, the same hardware can execute entirely different tasks, such as running a word processor, playing music, or browsing the web, without changing physical components. You can run a spreadsheet, an email client, and a web browser simultaneously by keeping their instructions active in RAM.

Moore's Law

Computing power experiences exponential growth because the number of transistors on an integrated circuit doubles approximately every two years. Gordon Moore published his article on cramming components onto integrated circuits in 1965. This exponential scaling has driven the digital revolution by making circuits exponentially smaller, cheaper, and more capable over time. Intel's early 1970s 8008 CPU contained a couple of thousand transistors, whereas modern consumer processors contain a billion or more.

Integrated circuit technology relies on microscopic feature sizes measured in nanometers and micrometers. A common minimum feature size for integrated circuits today is 14 nanometers. Brian W. Kernighan designed an integrated circuit with a feature size of 3.5 micrometers in 1980.

2. Bits, Binary, and CPU Operations

All information is represented internally using binary digits, manipulated by a CPU that executes simple repeating cycles of fetching, decoding, and executing instructions.

Bits and Binary

Digital systems process information using discrete values, whereas analog systems deal with smoothly and continuously varying values. An analog thermometer uses a smoothly expanding column of liquid or mercury, while a digital display shows a fixed numeric value for a range of temperatures. Converting analog data to digital early in the pipeline allows it to be easily stored, copied without error, compressed, and encrypted.

Computers represent all types of information internally using bits, which are binary digits taking values of either 0 or 1. Physical devices are built most reliably with two states, such as on and off or high and low voltage. Text is represented using standard numeric codes like ASCII, where letters correspond to specific numeric values. The Unicode standard specifies 120,000 characters. Audio compact discs use a standard sampling rate of 44,100 samples per second with an amplitude accuracy level of 65,536, equivalent to 2 to the 16th power.

To convert a decimal number to binary:

  • repeatedly divide the decimal number by two;
  • write down the remainder, which will be either zero or one;
  • use the quotient as the next value to divide until the original number reaches zero;
  • flip the sequence of remainders end for end to get the final binary number.

Inside the CPU

Groups of eight bits form a byte, which serves as the basic unit of processing and memory organization and can represent 256 distinct values. Hexadecimal uses base 16 with digits from 0 to 9 and A to F, where each hex digit represents exactly 4 bits. Web page colors use RGB encoding where three bytes specify the intensities of red, green, and blue, such as FF0000 for intense red, allowing for approximately 16 million colors calculated as 2 to the 24th power.

A central processing unit performs a simple repeating cycle of fetching instructions, decoding them, and executing basic arithmetic, memory transfers, and conditional decisions to achieve universal computation. A CPU can perform computations at a speed of billions of operations every second. Brian W. Kernighan introduces a pretend Toy computer model with about ten basic instructions, illustrating how short programs can get input, print values, and loop until a specific condition is met.

Real CPU architecture involves complex trade-offs between processing speed, power consumption, physical space, and instruction set complexity. Most cell phones and tablets use low-power ARM processor designs licensed from an English company called ARM Holdings, while Intel dominates desktops and laptops. Real processors incorporate 16 or 32 accumulators, pipelining, parallel execution, and multiple cores on a single chip, with instructions and data typically occupying 2 to 8 bytes in memory.

Caching

Caching exploits data locality by using small, extremely fast memories located close to the CPU to bridge the speed gap between rapid processors and slow RAM. A nanosecond is defined as 10 to the minus 9 power or one billionth of a second. Fetching data or an instruction from RAM requires 25 to 50 nanoseconds.

Restarting a large software application like Word or Firefox is noticeably faster the second time because its instructions remain cached in RAM from the initial disk load. A laptop can feature an L2 cache of 256 KB per core alongside an L3 cache of 4 MB.

3. Algorithms and Software Development

Software translates abstract algorithms into concrete programs that manage complex logic, libraries, and operating system resources through layered abstractions.

Algorithms

An algorithm is a precise, unambiguous sequence of steps guaranteed to compute a result correctly for all possible inputs and terminate in a finite time. Unlike recipes which can be vague and ambiguous, an algorithm resembles a tax form that covers all situations without leaving anything to imagination or interpretation. The classic shampoo instruction to lather, rinse, and repeat is not an algorithm because it fails to stop eventually.

Binary search uses a divide and conquer strategy to find items in a sorted list much faster than linear search by halving the search space at each step. Because items are ordered, each comparison eliminates half of the remaining items, meaning the number of steps grows logarithmically rather than linearly. Searching for the name Harry Lewis in an old Harvard paper telephone directory of about 20,000 names takes 14 tests.

1024 names require 10 comparisons since 2 to the 10th power is 1024. 1 million names require about 20 comparisons. 1 billion names require about 30 comparisons. 20,000 names require between 14 and 15 comparisons.

Quicksort is an efficient sorting algorithm based on divide and conquer that operates in N log N time. Invented by Tony Hoare around 1959, it repeatedly splits data into smaller piles around a pivot value, dramatically outperforming quadratic sorts on large data sets. Sorting 16 brand names by splitting them into piles based on alphabetical ranges.

10 million random 9-digit numbers are used in sorting performance experiments. Quicksort takes about N log N operations.

Computational complexity categorizes algorithms by how their resource requirements grow with data size, distinguishing practical polynomial problems from impractical exponential ones. Polynomial time problems like log N, N, N log N, and N squared are manageable, whereas exponential problems grow so fast that adding one item doubles the workload. Cryptographic systems rely on the exponential difficulty of solving specific computational tasks without a secret shortcut. 2 to the power of N represents exponential complexity.

Programming Languages

High-level languages replaced architecture-specific assembly languages, allowing code to be written independently of particular CPUs and translated via compilers. Assembly languages require manual memory bookkeeping and must be totally rewritten when moving between different CPU architectures. High-level languages use compilers and assemblers to translate human-readable expressions into architecture-specific machine code. Translating assembly between the Toy computer and a different CPU requires meticulous manual conversion of instruction sets.

Programming languages evolved through specialized application domains and specific design trade-offs regarding efficiency, expressiveness, safety, and complexity. Early languages like Fortran targeted science and engineering, COBOL focused on business data processing, and BASIC was built for teaching. Later languages like C addressed system programming, C++ managed large-scale complexity, and Java and JavaScript prioritized developer convenience over raw machine efficiency for internet applications. Bill Gates and Paul Allen started Microsoft by writing a BASIC compiler for the Altair microcomputer in 1975.

1949: EDSAC developed. 1958: Fortran introduced. 1964: BASIC developed at Dartmouth by John Kemeny and Tom Kurtz. 1973: C developed at Bell Labs by Dennis Ritchie. 1975: Microsoft's BASIC compiler for Altair microcomputer. 1977: John Backus received the Turing Award. 1995: JavaScript created at Netscape by Brendan Eich.

All substantial programs contain bugs due to the extreme complexity of software, leaving systems vulnerable to security exploits and requiring constant maintenance. Programming demands flawless attention to detail, making errors inevitable. Flaws can lead to security vulnerabilities exploited by malicious actors, forcing frequent updates and patching. Grace Hopper's colleagues found a literal bug, a dead moth, in the Harvard Mark II mechanical computer in 1947, popularizing the term debugging.

1889: First recorded use of the term bug by the Pall Mall Gazette regarding Thomas Edison's phonograph. 1947: Dead moth found in the Harvard Mark II. Over 100: Security-related bugs discovered in Firefox during 2015.

To maintain code quality, you should use these testing methods:

  • Try simple test cases with known answers during testing.
  • Verify inverse functions by passing values through each in turn to check if the result returns the original number.

Operating Systems

An operating system functions as a coordinator and traffic cop that controls and allocates computer hardware resources for multiple programs. The operating system manages the CPU by scheduling and switching tasks, allocates and swaps RAM via virtual memory to prevent programs from interfering with each other, manages disk storage through file systems, and coordinates connected devices. Microsoft Windows runs roughly 90 percent of desktop and laptop computers.

Operating systems provide standardized access to hardware through explicit entry points called system calls and hardware-specific translation code called device drivers. System calls allow applications to request services like file storage or network connections. Device drivers act as a bridge between the operating system and specific hardware, insulating the rest of the system from device idiosyncrasies. Windows ships with drivers for a vast variety of devices, and users can download updated drivers from manufacturer websites. A modern operating system typically has a few hundred system calls.

A file system provides a uniform logical hierarchy of folders and files to hide the physical implementation details of diverse storage media. File systems divide physical storage into blocks, keep track of block locations and free lists, and enforce privacy and security on multi-user systems. Solid state drives add wear leveling to distribute writes evenly across flash memory blocks. Brian W. Kernighan discovered that his modest MacBook contained over 900,000 files. 500 GB hard disk holding 500 billion bytes or 500 million blocks of 1000 bytes each. Over 900,000 files on a MacBook.

Removing files or emptying the trash does not instantly erase their data blocks from physical storage, leaving digital footprints open to recovery. When a file is sent to the trash or recycle bin, its folder entry is moved and its blocks remain unchanged. Emptying the trash merely clears the folder entry and adds the blocks to the free list without overwriting their contents. Commercial file recovery programs for MS-DOS marked free entries by changing the first character of the filename.

To ensure deleted data is unrecoverable, you can apply these techniques:

  • Use a program that overwrites freed blocks with random bits, such as the secure empty trash option on a Mac.
  • Employ military-grade file erasing to overwrite blocks multiple times with random patterns of 1s and 0s.
  • Demagnetize a hard disk by placing it near a strong magnet.
  • Physically destroy the disk to ensure contents are gone.

4. Networks and Communications

Networks connect devices globally using standardized packet delivery, wireless spectrum, and compression techniques over wired and mobile infrastructures.

Networks are defined by fundamental properties including bandwidth, latency, jitter, and range, which dictate speed, delay, variability, and geographical reach. Bandwidth measures the maximum data transmission speed, while latency or delay measures the time required for a chunk of information to traverse the system. Jitter refers to the variability of delay, which is critical for real-time applications like speech and video. Range defines the maximum geographical coverage of a specific network technology.

Driving a truck full of disk drives across the country represents high delay but enormous bandwidth. Light takes 13 milliseconds to travel from the east coast to the west coast of the US in a vacuum. Systems and fiber optic networks range from a few bits per second to terabits per second.

Home internet access evolved from slow analog telephone modems to much faster broadband technologies like cable modems, DSL, and fiber optics. Traditional analog phone modems are limited to 56 Kbps. Cable systems utilize excess capacity on television cables to offer speeds typically between 10 and 20 Mbps through shared mediums, relying on over-booking principles. Digital Subscriber Loop uses dedicated telephone wires without interfering with voice calls, operating within 3 miles, or 5 kilometers, of a switching office. Modern fiber optic systems use light pulses through glass fibers to provide significantly higher speeds.

Brian Kernighan participated in a fiber to the home research experiment in the early 1990s with a 160 Mbps connection and later obtained a gigabit fiber connection.

Wireless Technologies

Wireless networks use radio frequency electromagnetic radiation to transmit data over the air, operating under strictly allocated spectrum rules and government regulations. Wireless systems impose information signals onto carrier waves using modulation methods such as amplitude modulation and frequency modulation. Because spectrum is a limited and heavily contested resource, government agencies like the Federal Communications Commission and international bodies like the International Telecommunications Union allocate frequency bands and regulate transmission power to minimize interference.

The IEEE 802.11 standard family governs Wi-Fi operations, encompassing versions like 802.11b, 802.11g, 802.11n, and 802.11ac, operating in the 2.4-2.5 GHz and 5 GHz frequency bands. An example frequency of a radio station is 103.7 MHz.

Cellular phone networks divide geographical areas into cells serviced by base stations, reusing frequency bands across non-adjacent cells and handling user mobility. AT&T developed the first commercial cell phone system in the early 1980s. Phones constantly communicate with the base station offering the strongest signal and dynamically adjust their transmission power to preserve battery life, using typical frequency bands of 900 and 1900 MHz. Different regional technologies include GSM and CDMA.

Law enforcement agencies use stingray devices that mimic real cell towers to conduct surveillance by tricking nearby phones into connecting to them. Phone International Mobile Equipment Identity numbers are 15 digits long.

Data Optimization

Data compression reduces memory and bandwidth requirements by eliminating redundant information through lossless or lossy encoding techniques. Lossless compression algorithms, such as Huffman coding, Zip, and bzip2, remove redundancy while allowing the exact original data to be perfectly reconstructed upon decompression. Lossy compression discards information deemed imperceptible to human senses, trading off perfection for significantly higher compression ratios in images, audio, and video.

Huffman coding compresses Jane Austen's Pride and Prejudice by 44 percent, reducing the original 97,000 words or 550,000 bytes down to 310,000 bytes. The Zip program compresses it to 202,000 bytes, and bzip2 reduces it to 145,000 bytes, which is a quarter of its original size. JPEG images and MP3 audio achieve typical compression ratios of a factor of 10 or more.

Error detection and correction add carefully controlled redundancy to data streams, enabling systems to identify and fix transmission errors caused by noise. Specialized algorithms like Peter Luhn's checksum method use mathematical rules on identification numbers to catch single-digit and transposition errors. At the binary level, parity codes attach an extra bit to groups of bits to ensure the total number of 1-bits remains even or odd, making single-bit errors detectable. US Social Security numbers are 9 digits long, while credit card and cash machine numbers are 16 digits long.

To validate a number with a checksum, you can follow these exact steps:

  • Start at the rightmost digit of the number.
  • Multiply each successive digit alternately by 1 or by 2.
  • Subtract 9 if any resulting product is greater than 9.
  • Add the resulting digits together.
  • Verify that the final sum is divisible by 10.

5. The Internet and the World Wide Web

The Internet operates as a decentralized network of autonomous systems governed by TCP/IP protocols, while the web builds graphical information sharing on top of it.

The Internet is a chaotic collection of independent networks bound by communication standards. The network originated from the ARPANET project in the 1960s. The first ARPANET message was sent from UCLA to Stanford, covering about 350 miles or 550 km, on October 29, 1969.

Information travels in standardized packets across gateways and routers owned by diverse institutions and countries. The network was designed to be robust and route traffic around component failures.

Domain Names and Routing

Hosts on the Internet require unique numerical IP addresses for routing. IPv4 uses 32-bit addresses in dotted decimal notation, yielding 4.3 billion total possible addresses. Because IPv4 addresses have been fully allocated, the network is transitioning to IPv6 with 128-bit addresses, which yields 3 x 10^38 total possible addresses.

The Domain Name System translates these numbers into human-readable domain names. The system uses 13 root servers spread globally and a hierarchical divide-and-conquer approach. The country code .tv belongs to Tuvalu, which leases its rights to commercial interests, while Moldova uses .md.

You can interact with the network using specific tools:

  • Determine your own IP address through System Preferences on Mac OS X, an analogous application on Windows, or through Settings on your phone using Wi-Fi.
  • Perform DNS experiments with commands like nslookup a.root-servers.net.
  • Explore routing using traceroute on Unix systems and Macs, or tracert on Windows.

The World Wide Web

The World Wide Web functions through four foundational components: URLs, HTTP, HTML, and web browsers. Tim Berners-Lee created the first web system at CERN in 1989 with these designs, and the first text-only client program was running by 1990.

HTTP is stateless, meaning servers discard records of exchanges after returning pages. To remember user sessions, servers send cookies up to 4,000 bytes which browsers store and send back on subsequent visits. Netscape invented the cookie in 1994.

Brian Kernighan disallows all cookies to cut down tracking, meaning visiting Amazon initially greets him with a generic hello until he logs in and allows cookies for his shopping cart.

6. Privacy, Security, and Cryptography

Digital connectivity exposes users to constant surveillance, malware, and tracking, which can be mitigated through rigorous cryptography and operational security practices.

Security Threats

In June 2013, contractor Edward Snowden leaked documents showing that agencies like the NSA and GCHQ routinely monitor and collect electronic communications globally, while commercial enterprises simultaneously track online user behavior. Leaked documents revealed that the NSA recorded metadata for all phone calls in the United States, intercepted vast amounts of Internet traffic, and eavesdropped on German Chancellor Angela Merkel's cell phone. Websites and advertisers also track you across the internet using automatic data transmission, invisible tracking elements, and browser properties. Browsers automatically send IP addresses, user agents, and referencing pages with every request, while hidden components communicate with third-party servers to collect browsing habits. When the author visited toyota.com with defenses disabled, it downloaded over 200 cookies and scripts from 79 different servers.

Malicious code spreads via viruses requiring user assistance, self-replicating worms, and deceptive Trojan horses. Viruses rely on user action or macro-enabled documents like Word and Excel files containing Visual Basic interpreters to propagate. Worms spread automatically by exploiting network bugs, while Trojans disguise themselves as helpful software to install malware. The Anna Kournikova virus arrived as a Visual Basic program with a hidden extension disguised as a picture of the tennis player, which emailed itself to everyone in the victim's address book. Robert T. Morris launched an Internet worm in November 1988, and researchers discovered the Stuxnet worm targeting uranium enrichment equipment in Iran in 2010.

Cryptography

Cryptography relies on keeping the key secret while assuming the encryption algorithm is completely known by adversaries. Good cryptography ensures that security resides solely in the key rather than in security by obscurity. Mary, Queen of Scots, was executed in 1587 after a man-in-the-middle attack exposed her conspiratorial messages, and Admiral Isoroku Yamamoto was shot down in 1943 because American intelligence cracked Japanese naval encryption.

Secret-key cryptography uses the same key for encryption and decryption, creating a major challenge in secure key distribution. Algorithms like DES and AES require communicating parties to share a secret key. While DES used an insecure 56-bit key vulnerable to brute force, the modern Advanced Encryption Standard supports longer keys that resist exhaustive searching, though safely distributing those keys remains difficult. DES was cracked by brute force in 1999 within a day of computing by a specialized computer, leading to its replacement by AES, which became an official US government standard in 2002 with key lengths of 128, 192, and 256 bits.

Public-key cryptography solves the key distribution problem by employing mathematically related key pairs for encryption and decryption. Invented in 1976 by Whitfield Diffie and Martin Hellman, who shared the Turing Award in 2015, public-key systems use a public key to lock messages and a private key to unlock them. Because public-key algorithms are computationally slow, systems typically use public-key cryptography to securely negotiate a temporary secret key and then switch to AES for bulk data transfer. Browsers use Amazon's public key to encrypt a random temporary key sent to Amazon, which decrypts it with its private key to establish a secure AES channel.

Anonymity and Defending Yourself

Tor conceals communication origins by routing encrypted traffic through a series of distributed relays using onion routing. Tor wraps messages in multiple layers of encryption and routes them through three random relays, with 6,000 relays operating worldwide and a 2007 NSA presentation evaluating Tor anonymity. Each relay only knows its immediate predecessor and successor, preventing any single node from knowing both the origin and the final destination of the connection. Visiting weather.yahoo.com through Tor frequently made the author's browser appear as an exit node located somewhere in Europe, such as Luxembourg, while sharing browser characteristics with 6,000 other users.

Users can significantly improve their digital security by implementing layered precautions categorized by importance and caution. Security requires defending against all weaknesses while attackers only need one. RSA produces a widely used two-factor authentication device called SecurID, though even it was hacked in March 2011, compromising security information for those devices.

You can defend your systems by applying specific practical rules:

  • Choose passwords thoughtfully using a phrase of several words that includes upper and lower case letters, numbers, and special characters.
  • Never use the same password for critical sites like your bank and email as you do for throwaways, and never use work passwords for personal accounts.
  • Use a password manager like LastPass to generate and store safe random passwords.
  • Use two-factor authentication if it is available.
  • Don't open attachments from strangers and don't open unexpected attachments from friends or co-workers.
  • Disallow Visual Basic macros in Microsoft Office programs.
  • Never automatically accept, click, or install when requested, and avoid downloading software of dubious provenance.
  • Don't do anything important at places that offer open Wi-Fi.
  • Use anti-virus software and keep it up to date.
  • Keep software like browsers and the operating system up to date.
  • Back up your information to a safe place regularly.
  • Turn off pop-ups and third-party cookies.
  • Use add-ons like Adblock Plus, uBlock, Privacy Badger, and Flashblock to reject advertising and tracking.
  • Use Ghostery to eliminate most JavaScript tracking.
  • Turn on private browsing or incognito mode and remove cookies at the end of each session.
  • Turn off operating system services that you don't use, and turn on the computer firewall.
  • Use passwords or fingerprint readers to lock your phone and laptop.

10 Key Ideas

  1. The von Neumann architecture separates processing from memory and storage, establishing a standard logical construction common to diverse digital devices from early room-sized computers to modern smartphones.
  2. Moore's Law drives exponential growth in computing power by doubling the number of transistors on an integrated circuit approximately every two years.
  3. Computers represent all types of information internally using bits, which are binary digits taking values of either 0 or 1.
  4. A central processing unit performs a simple repeating cycle of fetching instructions, decoding them, and executing basic arithmetic, memory transfers, and conditional decisions to achieve universal computation.
  5. Computational complexity categorizes algorithms by how their resource requirements grow with data size, distinguishing practical polynomial problems from impractical exponential ones.
  6. All substantial programs contain bugs due to the extreme complexity of software, leaving systems vulnerable to security exploits and requiring constant maintenance.
  7. An operating system functions as a coordinator and traffic cop that controls and allocates computer hardware resources for multiple programs.
  8. Information travels in standardized packets across gateways and routers owned by diverse institutions and countries.
  9. The Domain Name System translates numerical IP addresses into human-readable domain names using 13 root servers spread globally and a hierarchical divide-and-conquer approach.
  10. Public-key cryptography solves the key distribution problem by employing mathematically related key pairs for encryption and decryption.

A summary is an independent retelling, not the text of the book.

Cover of the summary of “The Last Whalers” 20 min read

The Last Whalers

Doug Bock Clark
Cover of the summary of “Confess” 21 min read

Confess

Rob Halford
Cover of the summary of “Toast” 17 min read

Toast

Nigel Slater
Cover of the summary of “Ace Voices” 24 min read

Ace Voices

Eris Young
Cover of the summary of “For Small Creatures Such as We” 17 min read
Cover of the summary of “Two Trees Make a Forest” 16 min read
Cover of the selected audiobook Choose a chapter The player is ready
0:00 0:00

Volume