Ask HN: Best way to learn about computing history?

213 points by Tmkly ↗ HN
I'm a software engineer, mainly working on mobile apps (iOS primarily) through React Native and some Swift/Java. I have a CS degree and about 7 years in this field.

However recently I've become very aware that JS/TS and Swift etc are just APIs on top of APIs. I've been drawn to learning more about how computers work, the history of programming/computers (Unix, Sinclair, commodore, etc and even going back to Ada Lovelace, Babbage and mainframes in the 1950s) and things like memory allocation. I've tried learning some BASIC and Assembly code but haven't really got very far. I read/devour articles on sites like https://twobithistory.org but they only get you so far.

What can I do to help accelerate this and satiate this desire to learn more about how computers work? I live in London, UK and would be happy to spend some money on a uni course or something if there was a good one. I learn best practically so like to be "doing" something as well as theory.

156 comments

[ 10.1 ms ] story [ 250 ms ] thread
Maybe buy a raspberry pi pico and code it in assembly?

Or try to find a retro computer, e.g. a BBC micro and start programming it for fun?

I was looking at a vintage computer, so yeah that's a possible route. Been using emulators so far but it's not the real thing. Thanks.
I'd say if you have experience with vintage computer then it's probably worthwhile to get one. However just work with an emulator if it's not too exciting to hold a real machine because the cost of maintenance might be pretty high.
I'd second the emulator recommendation. While programming, say, an Apple ][+ can be fun, getting one running maybe not so much. Plus, with an emulator, you'll have the ability to do things like write your code in a modern editor and then paste it over to the emulator rather than trying to work with 8-bit tools. I used to hand-assemble my 6502 code back in the day because I couldn't afford to buy a fancy macro assembler, but I wouldn't recommend writing code in long hand and filling in the hex codes on paper before typing it all in to anyone in 2022.
An intermediate step between real hardware and emulation could be buying the hardware for a MisterFPGA.
(comment deleted)
I think the way to go about it is read some books gradually on history of computing & the various designs and rationale that evolved over time. Consider these sources:

1. The Annotated Turing.

2. A History of Modern Computing 3ed

3. The ACM Turing award lectures

4. Theory of computation - Dexter Kozen

5. Coders at Work

6. Hackers: Heroes of the computer revolution

Additionally, you could subscribe to Communications of ACM, which is a computing oriented monthly magazine.

these look good, thanks!
A History of Modern Computing is great

Would add:

- How The Internet Happened (history of the internet)

- To The Digital Age (transistor history)

There are also several good museums dedicated to the subject. I used to work for the national museum of computing at bletchley park in the UK, and there they have a lot of good exhibits that teach basics of how computers and networking works and has evolved over the years.

Another good approach one can take to learn is starting with a simple system with well-defined rules, and making a simple computer out of it. Many people do this in minecraft, for myself it was boolean functions in excel. You can and should look many things up during this process, fail and rework designs several times etc. Learning how logic gates work, then scaling the knowledge up to bit adders, registers, ALU, making a cpu instruction set and starting on basic turing machine architecture is a very rewarding hobby and is definately the best way to get low-level knowledge

I've been meaning to visit Bletchley! thanks, these suggestions are helpful
if you do go, my favorite exhibit at Bletchley is the Harwell Dekatron a.k.a WITCH. It's a really good machine for learning how computers work, both because its so early meaning it has simple architecture, but also for other reasons:

It uses base 10 instead of base 2 to store values in its memory, so doing the calculations in your head is a lot easier

It's memory is made from special tubes that have a orange glow at one of 10 positions, meaning you can see the contents of the computer's memory in its entirety just by looking at the machine.

Building off the previous point, you can see the cpu register, which is a single small piece of memory that stores the current data to be modified, which again with the lit-up memory means you can see what the computer is doing at any givenm time.

Finally, the computer has a debugging switch which can pause and step forwards through each instruction the computer is performing, as well as a more granular mode that lets you step through individual parts of an operation (for example each digit being added in a adding operation separately)

It's not always running but if you go I hope you get to see it :)

EDIT: oh and I suppose I should mention there is more than one museum at bletchley, there is the big one that focuses on ww2, but the museum of computing is tucked away to the side a bit.

If you go to Bletchley Park, don't go on a hot day in summer! Those old machines massively heat up the room.
I second Bletchley. Consider it your obligatory pilgrimage as a computing professional.
They’re just opening a new exhibit in Block A next week!
Sounds like I need to make another Hajj then.
Note that there are two museums on the site of Bletchley Park, with different opening hours -- the historic site, including the main house and the huts, and the separate National Museum of Computing, which has the Colossus replica, the WITCH, and a large collection of other British computing machinery and memorabilia. If your interest is in computing history, you'll probably want to see both -- which means timing your visit when they're both open, so be sure to check.
A long while ago I found the Jargon File, it's a "dictionary" of terms used by hackers as the culture was budding at the universities in the 70's. Reading the entries you get a glimpse of the technology and culture of those places at that time. Young me found it really cool in a nerdy way, and read all the entries from front to back. Since this was before the always online times, I was just reading the TXT file from http://jargon-file.org/archive/ rather than needing to navigate the many pages: http://www.catb.org/~esr/jargon/
that's great, will take a look. thanks
Ben Eater's Youtube series "Building an 8-bit Breadboard Computer" is a really good introduction to the lowest levels of how a computer works:

https://www.youtube.com/playlist?list=PLowKtXNTBypGqImE405J2...

I recommended it to my daughter when she was taking a class in R and asked "But how does the COMPUTER know what to do?"

this looks extremely interesting and may be just what I'm after. I have some basic electronics experience so I could build on that too. Thanks!
Shout out to Ben Eater. This dude explains how the internet works and rips open an Ethernet cable and hooks up an oscilloscope to it and decodes the bits that transfer over the physical cable.

Very informative!

Offtopic: Reminds me that Ben Eater has gone 100% silent since last november (hope he is ok)
>But how does the COMPUTER know what to do?

Ben Eater is amazing, but his series in my very humble opinion isn't the best answer to this question. I found the emphasis on the breadboard and the particulars of physical implementation getting in the way of a clean pedagogical introduction to logic circuits as a DAG of abstract computational elements implementing function from {0,1}^n -> {0,1}^m (which we then implement with real circuits in whatever medium and form we choose), it's very "DIY" and maker-oriented in nature. This doesn't negate it's status as a masterpiece of educational vlogs, I just feel it leaves a first-time learner hanging on some very important questions.

The single best answer I have ever seen to this question is the outstanding The Elements Of Computing Systems[1], better known as the NandToTetris course[2][3]. You literally start with Nand and build a computer, an assembler, a VM, a compiler, a simple runtime library, and - finally - Tetris running on top of all that. It's one of the best introductions to computers and computer science I have ever seen in my life, at once a textbook and a work of science communication. It comes with it's own software suit[4], and the first 4 chapters of the book (from Nand to a fully functional computer capable of running machine code) are gamified in [5].

[1] https://mitpress.mit.edu/books/elements-computing-systems

[2] https://www.youtube.com/playlist?list=PLrDd_kMiAuNmSb-CKWQqq...

[3] https://www.youtube.com/playlist?list=PLrDd_kMiAuNmllp9vuPqC...

[4] https://www.nand2tetris.org/software

[5] https://nandgame.com/

I went from NAND2Tetris to Ben Eater, and I think that’s the right direction to take.

The first gives a great overview, and the latter deep dives into some of the architectural concerns around building computers (which are mostly ignored in the course), like understanding buses, running assembly on actual hardware. The most important bit for me was learning how to read data sheets to figure out how to use chips.

I am wondering if it is a better idea to teach R as an intro to programming as compared to Python. I mean you dont have this whole indentation business with R...
So your title and comment suggest two slightly different things. For "how computers work?" I recommend Code by Petzold (higher level, good book) and The Elements of Computing Systems by Nisan and Schocken (also available here: https://www.nand2tetris.org/). The latter is project based and has you develop a computer starting at NAND gates and working up. It can be run through at a good clip while still learning a lot if you're a moderately experienced developer.

EDIT: Per Amazon there's a second edition of Code coming out at some point, but no date that I've been able to find.

I've also got a copy of, but not yet read, Ideas That Created the Future: Classic Papers of Computer Science edited by Harry R. Lewis, the contents are in chronological order with the most recent in 1979. It has 46 different papers on computing, being largely historical this ought to be a decent starting point as well.

I’d also add the book “But How Do It Know?” from J. Clark Scott as a fantastic primer, building from gates to RAM and CPU, to a simple bootloader and assembly programming. It comes with a CPU simulator on the book’s website so you could make sense of what you’re learning - and being a light read you could reasonably finish it in a week.

http://www.buthowdoitknow.com

yeah I'm not entirely sure what I want. Thanks for these suggestions, will take a look. nand2tetris looks cool!
If you want pacing & support for Nand2Tetris, Coursera has it split into two courses. I've done the first from NAND gates to a working CUP & assembler and can testify it's worthy. Coursera loves to have content sales, so if you're not in a rush you can pick it up for cheap and have their (petty yet ego boosting) certificate of completion to read over one morning with you Cheerios (and then put away in a drawer to be forgotten). Here's the two links:

Part I - https://www.coursera.org/learn/build-a-computer Part II - https://www.coursera.org/learn/nand2tetris2

Some day I hope to pick up Part II, but Part I was still a lot of fun!

Good: split your time between activities and reading something as satisfying as the things you “devour”. To that end, I would plus one Hackers (Levy) and Code (Petzold). Also, the Cathedral and the Bazaar by esr

http://www.catb.org/~esr/writings/cathedral-bazaar/

and other things from esr at

http://www.catb.org/~esr/

including the aforementioned jargon file. Here’s one I hadn’t stumbled on before, ‘Things Every Hacker Once Knew’

http://www.catb.org/~esr/faqs/things-every-hacker-once-knew/

For an activity ymmv depending on how much time you can spend; an alternative to building a computer from scratch, or an OS from scratch, is to buy a vintage cheapie running cp/m or dos, something where the OS isn’t abstracting memory management for you. Growing up in the 80s, I think managing my own memory and _everything_ that implies was the greatest teacher.

these resources look great, thanks. also yeah great suggestion for buying a cheap vintange microcomputer!
Having gotten into computers in the early 1990s, I knew a lot of "Things Every Hacker Once Knew", but I did find something exciting that I didn't know in the discussion of ASCII control characters:

>ETB (End of Transmission Block) = Ctrl-W >Nowadays this is usually "kill window" on a web browser, but it used to mean "delete previous word" in some contexts and sometimes still does.

I tried Ctrl-W in a Linux console and it works! This will save me some trouble in the future.

Though the cathedral/bazaar terminology is influential, I am not sure reading the original text helps understand open source as it actually is now. It concludes that open source would drive out closed source software, when what we see is open libraries being much more popular than open applications. This is in part due to Raymond's own work at the Open Source Initiative. I'd probably be better for someone now to read a retrospective rather than a treatise.
> It concludes that open source would drive out closed source software

Relative to the pre-FLOSS era, this is exactly what has happened. FLOSS is ubiquitous today in systems software. Many of the current Big Tech companies and business practices simply would not exist without FLOSS computing infrastructure.

I agree. You said better what I was trying to say in that second sentence. It's more that for someone new to the theory of open source, reading a 1998 essay about a Linux email application gives the wrong idea of the strengths and weaknesses of the model.
From a NAND gate to Tetris was excellent. Informative and obvious

https://www.nand2tetris.org/

I cannot endorse this enough.

some of it is hard and will have you wondering if you want to continue. if you do, and I highly recommend that every developer complete this course, you will find yourself thinking in new ways and understanding many problems very differently, which is a very good thing.

and you will see huge performance problems in almost all software from them on, because none of this (I gesture vaguely at everything everywhere) should be as slow as it is. none of it.

Agreed. For me, the course was eerily able to hit my exact sweet spot of difficulty. Almost every project had me in the "I'm about to give up" stage just long enough before I had a breakthrough and kept continuing.

>and you will see huge performance problems in almost all software from them on, because none of this (I gesture vaguely at everything everywhere) should be as slow as it is. none of it.

Hah! Yes! After finishing, the first optimization I made was to add an "inc" command to the high-level (Java-like) language you implement. It annoyed me that any time you have "i = i + 1", it translates into VM code of "push 1 onto stack, push i's value onto stack, add, pop stack to i's location", each of which translates into several machine instructions. Especially given that the CPU has an increment instruction!

So I added the inc keyword that would ensure you bypass all of that, if you just want to increment a variable, and thus use significantly fewer cycles. It was really thrilling (well, as much as a technical project can be) to have the level of insight and control needed to make a change like that.

After reading that some huge percentage of x86 instructions are basically never used I’ve often wondered if there’s much more performance that can be gleaned through knowing what to write and how the compiler will use it.
(comment deleted)
Steven Levy's Hackers is a foundational work of the history of computing. Levy spends a lot of time on the MIT hackers of the 1960s and 1970s, the group that hatched Lisp, Richard Stallman and the free software movement, and also a lot of time on the Bay Area hackers that kick-started the microcomputer revolution. Certainly it's not a comprehensive guide to the full range of computing history, but it's an important and engaging look the beginnings of where we are today.
I second that, Hackers was a great read. I read it back in the late 90s and then again a couple years ago and was surprised how much of it came back to me. He's one of the few tech journalists and writers who actually gets it.
I read it early in life and it changed my life. By the time the O’Reilly anniversary edition came around I was there to witness some of the new interviews of people in the first book.
One cannot recommend Hackers enough. In many ways, the stories on Hackernews’ front page are the ripples of the events chronicled by Levy.
> I've become very aware that JS/TS and Swift etc are just APIs on top of APIs.

I'd call them abstractions. This is how it's - high level programming languages (C#) are just abstractions so that we don't have to remember machine instructions. Similar to a name in Contacts connecting to a phone number; the former is far easy to remember.

Ted Nelson's YouTube channel: https://www.youtube.com/user/TheTedNelson

It's also worth looking at: https://www.youtube.com/user/yoshikiohshima. There's a goldmine of talks by people like Alan Kay and Seymour Papert. An important question to ask when, "probing" the literature-- why are computers the way they are in terms of human-computer interaction and human culture? What is a, "computer" without making an appeal to mathematical concepts like Turing Machines/Lambda Calculus? What are the major, "paradigm shifts" that gave us GUIs, mice, ect...?

It's worth noting that the history of popular computers parallels almost exactly the neoliberal economic period. Atari was founded in 1972. Look into the Mansfield Amendment and ARPA. Try to get past a cultural myth that computer companies started in, "normal" people's garages. Try to see past the, "present concept." Alan Kay has famously said, "The computer revolution hasn't happened yet." It's up to the current/future generations to, "really" define what computers are in terms of human culture. Think, "living history." Think, "world before-after the invention of the Gutenberg printing press."

https://www.nsf.gov/nsb/documents/2000/nsb00215/nsb50/1970/m...

https://en.wikipedia.org/wiki/Douglas_Engelbart

https://www.theatlantic.com/magazine/archive/1945/07/as-we-m...

One resource I stumbled upon was The Dream Machine book. Very broad historic overview of computing history throughout last 70 years or so.
A tangent, but you might find interesting starting points from the nand2tetis course. ( www.nand2tetris.org) And reading seminal papers by the likes of Turing and Church
I would recommend: The Innovators: How a Group of Hackers, Geniuses, and Geeks Created the Digital Revolution - Walter Isaacson
I highly enjoy the nandgame[0]. Its a game that goes from the basics of building simple logic gates all the way up through building memory and an ALU. While you can go into it blind expect to need to study and look up a ton of stuff if you have never had an intro-electronics course. Best of all it's a free web game.

Classes to look into. An intro course in microcontrollers would be a good place to start. Usually you will find them attached to the Electrical Engineering department. Maybe take a course in Circuits or Computer Architecture.

[0] - www.nandgame.com

In terms of computing history, The Dream Machine by Mitchell Waldrop is incredibly good.

In terms of "how computers work" I agree with others who recommended Elements of Computing Systems (aka nand2tetris).

The Dream Machine is easily one of the best-written books I've ever read. Really gives a good overview of how many people are involved in various ways in the evolution of computing.
Yes I agree, the writing is superb. I found out about it from Alan Kay, and so far every book Kay has recommended has been really good (you can find his reading lists easily online).
If you wish to learn how COMPUTING works not computers.... then Rosens book on Discrete Mathematics is the MASTER KEY
Was just showing the subject to a youngster recently. Other folks mentioned the Code book, I liked that one. The MMM by Brooks of course. We also looked at the following videos on youtube/Kanopy and other places:

- The Story of Math(s) by Marcus du Sautoy to set the stage... school and taxes in ancient Sumeria, Fibonacci bringing Indian numbers to Europe, and other fascinating subjects.

- We watched short biographies of Babbage and Lovelace, full-length ones of Turing and Von Neumann. The "code breakers" of WWII.

- Top Secret Rosies: The Female "Computers" of WWII, another good one.

- There's more history in PBS' Crash Course Computer science, than you might expect. It is great although so peppy we had to watch at .9x with newpipe. Shows relays, vacuum tubes, to ICs, to the Raspberry Pi. As well as the logic gates they model.

- "The Professor" at Computerphile is a great story teller about the early days.

- There are great videos about CTSS being developed at MIT I think, where they are designing an operating system via paper terminal and trying to decide on how to partition the memory/storage: https://www.youtube.com/watch?v=Q07PhW5sCEk

- The Introducing Unix videos by ATT are straight from the source: https://www.youtube.com/watch?v=tc4ROCJYbm0

- The movie/book "Hidden Figures" touches on this time as well. Facing obsolescence by IBM, one of the characters teaches herself Fortran.

- The Pirates of Silicon Valley is a fun dramatization of the late 70s to 80s PC industry. It specifically calls out the meeting between MS and IBM as the deal of the century. We also watched a "Berkeley in '68" doc on Kanopy to set the stage before this one. Interesting, but a tangent.

- The "8-bit Guy" is also great, he dissects and rebuilds old home computer hardware from the same era, and teaches their history as he does it. Even his tangential videos on why there are no more electronics stores (besides Apple) in malls is great.

- There are good docs on the "dead ends" of the industry as well, such as "General Magic" and "Silicon Cowboys."

- "Revolution OS" a doc about the beginnings of FLOSS and Linux.

Maybe not exactly what you're looking for, but Xibalba BBS (https://xibalba.l33t.codes for a web UI) hosts a ton of articles on computing history in the files section.
The textbooks I used in university were "From Airline Reservations to Sonic the Hedgehog: A History of the Software Industry" (Campbell-Kelly) and "A History of Modern Computing (second edition)" (Ceruzzi). There is a brand-new update to the second one, "A New History of Modern Computing" (Haigh/Ceruzzi) that I'm looking forward to reading this summer.
Came here to mention these two books.