Recently I’ve been learning about the history of computers. I find it to be incredibly interesting. I’d like to write a post about it to summarize and comment on what I’ve learned.
I’m a little hesitant though. I’m no expert on this stuff. I’m largely learning about it all for the first time. So then, take all of this with a grain of salt.[1] It’s more of a conversation starter than a finished product. If you want something authoritative, I’d recommend the Stanford Encyclopedia of Philosophy.
Let’s start with logic. Computers are largely based on boolean logic. Y’know, 1s and 0s. AND, OR, NOT.
George Boole did a bunch of important work here in the mid 1800s, but let’s try backing up even further. Was there anything important that came before Boolean logic?
Yeah, there was. It goes all the way back to Aristotle in ~350 BCE. Aristotle did a bunch of groundbreaking work in the field of logic.
Furthermore, after “breaking the ground”, there weren’t any significant developments until the mid 1800s. Wow! That’s a long time. An unusually long time. In other fields like mathematics, natural sciences, literature and engineering, there were significant advances. I wonder why things in the field of logic were so quiet.
Anyway, let’s talk about what exactly Aristotle did. In short, he looked at arguments in the abstract. It’s one thing to say that:
All dogs have feet
Filo is a dog
Therefore, Filo has feet
It’s another thing to say that:
All P have Q
R is a P
Therefore, R has Q
The former is concrete. It’s talking about dogs, feet and Filo. The latter is abstract. It’s talking about P’s, Q’s and R’s. Do you see the difference?
Before Aristotle, people never[2] thought about this stuff in terms of P’s and Q’s. They just thought about dogs and feet. Thinking about P’s and Q’s totally opened things up. Pretty cool. Abstraction is powerful. I think this is very much worth noting as an important milestone in the history of computers.
Ok. So once Aristotle opened the flood gates with categorical logic, over time, people kinda piggybacked off of it and extended his work. For example, the Stoics did a bunch of work with propositional logic.
Propositional logic is different from categorical logic. Categorical logic is about what categories things belong to. For example, earlier we basically said that dogs belong to the category of “things with feet” and that Filo belongs to the category of “dogs”. With those two statements, we deduced that Filo must also belong to the category of “things with feet”. It makes a lot of sense when you think about it visually:

On the other hand, propositional logic is about things being true or false. For example, with this:
It is raining
I don't have an umbrella
we can deduce things like:
"It is raining and I have an umbrella" is false
"It is raining or I have an umbrella" is true
Propositional logic is about truth and uses operators like AND, OR, NOT, IF-THEN, and IF-AND-ONLY-IF. Categorical logic is about categories and uses operators like ALL, NO and SOME.
After propositional logic, subsequent work was done. For example, predicate logic kinda piggybacked off of propositional logic. But in general, nothing too crazy was going on. Let’s jump ahead to the mid 1800s and George Boole.
Boole introduced stuff like this:
p is true
q is false
therefore
(p and q) is false
(p or q) is true
(not (p and q)) is true
...
But wait a minute. I’m confused. Didn’t we get that sort of thing from propositional logic all the way back in 300 BCE from the Stoics? In researching this question I’m seeing things saying that it did in fact already exist, it’s just that Boole made it more “systematic and formalized”. I don’t understand though. In what way did he made it more systematic and formalized?
Oh well. Suffice it to say that boolean logic was a thing that we knew about. Let’s move on.
I was going to start talking about Charles Babbage, but I started wondering whether anything came before him. Turns out that something did: the Jacquard loom.[3]
Let me provide some context. Weaving is a thing. Maybe that doesn’t need to be said, but I at least had to look up what weaving is. Basically, if you want to produce fabric or cloth — ie. for clothing or bed sheets — you’d have to interlace yarn or thread. That’s called weaving.

Up until the Industrial Revolution in the mid 1700s, weaving was done by hand. It was a very labor intensive process. Which means that the resulting products were somewhat expensive. The Invisible Hand doesn’t like that, and so in the Industrial Revolution, people created weaving machines.
But they were kinda static. What if things were dynamic? What if you were able to program the machine to produce fabrics with different colors and patterns?
Enter: the Jacquard loom. The Jacquard loom was a weaving machine that let you do this. You’d provide it with punch cards and the punch cards would determine what colors and patterns the fabric would have.

If you think about it, the people who operated these machines were probably the first programmers. After all, they were providing encoded instructions to a machine in order to get the machine to do something they want. Something useful.
Pretty cool, right? Charles Babbage sure thought so.
Charles Babbage — considered by some to be the “father of the computer” — was inspired by the Jacquard loom.
But let’s back up and get some context first. The year was 1812, and mathematical tables were a thing.
What are mathematical tables, you ask? Imagine that you need to do some trigonometry. What’s sin(79)
?
Well, today you’d just look it up online. 15 years ago you’d probably grab your TI-84 calculator. But in the year 1812, you’d have to consult a mathematical table. Something like this:

They’d use computers to compute all the values and write them down in books. Just not the type of computers you’re probably thinking of. No, they’d use human computers.

Yup, that’s right. Back then, real human beings would sit in a room doing a bunch of math to come up with all of these values.[4]
Babbage didn’t like this though. It was too error prone. Too labor intensive. He wanted to make it less error prone and less labor intensive.
His first step towards this was to make the computations simpler. That way you can employ some relatively unskilled people to do addition and subtraction for you. Traditionally you’d need to employ skilled people to do more complex math. From his own account:
In 1812 he was sitting in his rooms in the Analytical Society looking at a table of logarithms, which he knew to be full of mistakes, when the idea occurred to him of computing all tabular functions by machinery. The French government had produced several tables by a new method. Three or four of their mathematicians decided how to compute the tables, half a dozen more broke down the operations into simple stages, and the work itself, which was restricted to addition and subtraction, was done by eighty computers who knew only these two arithmetical processes. Here, for the first time, mass production was applied to arithmetic, and Babbage was seized by the idea that the labours of the unskilled computers [people] could be taken over completely by machinery which would be quicker and more reliable.
Babbage came up with an organizational structure that became standard for other computing groups:

First the scientist would come up with the thing they wanted to compute. Then there was a planner who would come up with a way to break the computation down into a bunch of simple parts. Finally, the planner would tell various (human) computers to work on these simple tasks. Similar to how a senior software engineer today will break a project down into various tasks and assign those tasks to some junior engineers.
Ten years later, Babbage started working on the Difference Engine. A machine that can do the necessary computations to construct mathematical tables for polynomial functions. It was the era of the Industrial Revolution, after all. Why pay for human labor when you can instead build machines?
By the way, the name “Difference Engine” comes from the fact that it used Newton’s method of finite differences. With this method, the machine didn’t have to do any multiplication or division, which I assume made the mechanical stuff easier.
Unfortunately, Babbage never completed the Difference Engine. He had a bunch of cool blueprints and designs, but he was never able to actually finish building it. Partly due to issues with funding.
However, using Babbage’s designs, people in the 1990s constructed the Difference Engine. It is on display today at the Science Museum in London.
It wasn’t just a lack of funds though that pulled Babbage away from the Difference Engine. No. He was also seduced by visions of the Analytical Engine.
The Difference Engine was just too narrowly scoped. It was used for polynomial functions. But what about other things that need to be computed? In particular, mathematical tables for things like trigonometry and logarithms. Wouldn’t it be cool if there was a machine that was able to compute all of that stuff?
And that was the motivation behind the Analytical Engine. The desire for a general purpose computing device. There was a big demand for mathematical tables at the time, so if you had a device that was capable of computing anything you want it to compute… on demand… well, that’d be pretty game changing.
But Babbage was playing the wrong game. To be fair, he wasn’t alone. Everyone else’s focus was also on using these sorts of machines to do math. However, Babbage was fortunate enough to recognize the genius of and collaborate with a talented young woman in her early 20s named Ada Lovelace, and Lovelace saw this machine as something that was way more than a mere calculator.

She saw it as something to be used for generating music. Art. Translating languages. Science. Poetry. She even envisioned it as something that can perform automated reasoning and deduction.
Music? Art? Language?
…
…
What???? How the hell…
…
…
…
I know, I know. This is what everyone else thought at the time too. It’s the intuitive thing to think. The machine does stuff with numbers. How can something that operates on numbers be used for music and art? Well, let me introduce you to what I’m starting to suspect is the key idea in computer science: encoding.
Let’s start with language. I think that’s an easy one to understand.
Suppose that 00000
represents the letter “a”, 00001
represents the letter “b”, 00010
represents the letter “c”, 00011
represents the letter “d”, so on and so forth. Well, that implies that the word “apple” can be represented as 00000 00111 00111 00110 00101
.
a: 00000
p: 00111
p: 00111
l: 00110
e: 00101
It also implies that the word “manzana” can be represented as 01000 00000 01001 01111 00000 01001 00000
.
m: 01000
a: 00000
n: 01001
z: 01111
a: 00000
n: 01001
a: 00000
Ok. Well, with that, suppose you wanted to have the computer translate English words into Spanish for you. How would you program it to do that?
Easy. You’d write instructions that basically say something along the lines of:
Whenever you see
00000 00111 00111 00110 00101
(“apple”), replace it with01000 00000 01001 01111 00000 01001 00000
(“manzana”).
Do you see? By using this 5-bit encoding system, the computer is now able to do stuff with language, not just with numbers.
I’m telling you, encoding is a crucial idea.
Now what if we wanted the computer to make music for us? How would we get it to do that? Well… we’d have to take advantage of encoding again.
How do we encode music? I dunno. Let’s play around and try to figure it out.
Suppose there are seven notes: A through G. We’ll use three bits to encode them.
A: 000
B: 001
C: 010
D: 011
E: 100
F: 101
G: 110
Suppose that notes can be either flat, sharp or normal. We’ll use two bits to encode this.
Flat: 00
Sharp: 01
Normal: 10
Suppose there are, I dunno, ten possible octaves. We’ll have to use four bits to encode the octave.
1: 0000
2: 0001
3: 0010
4: 0011
5: 0100
6: 0101
7: 0110
8: 0111
9: 1000
10: 1001
With that, a C-sharp in the third octave would be encoded as 010 01 0010
.
010
= C01
= Sharp0010
= Third octave010 01 0010
= C-sharp in the third octave
Ok. Now how would we have the computer compose a song? Well, just move those 1s and 0s around! Something like “start with a C-sharp in the third octave, then keep going up two octaves, down one, and cycle back to the lowest octave if you get too high”. Boom: it’s a computer generated song.
Unfortunately, nothing ever came of the Analytical Engine. The team had trouble building it. Funding was scarce. People didn’t see the vision. It wouldn’t have been fast enough to do useful things anyway. Etc, etc. Babbage had the designs, but they just weren’t able to get it done.
Oh, it’s also worth noting that the proposed architecture of the Analytical Engine really mirrored the architecture of modern day computers. Inspired by the Jacquard loom, the instructions were stored in memory so that you could program it. It had something analogous to a CPU. Control flow. I/O. Etc.
Ada Lovelace wrote a lot about the significance of general purpose computers. That they could be used for things like art and music and would transform many industries. Unfortunately, that work was never circulated or recognized during her lifetime. People weren’t into these general purpose computers. They just wanted their mathematical tables.
Well, I’m actually not even so sure of that. I mean, mathematical tables were really important. There was a large demand for them. Lots of people worked hard at producing many volumes of them. But it wasn’t until the 1940s and the advent of the electronic computer that they actually built a machine that was used to construct mathematical tables.
I’m confused though. Babbage came up with the blueprints for his Difference Engine in the 1820s. I know he never succeeded at actually building it, but he never really had a fair chance if you ask me. If he had a team of thousands of people working for him, that’d be one thing, but he only ever had the budget for a few other engineers and craftsmen to help him. It was much more akin to a guy in his garage with a few buddies than an organization with a real R&D budget. It seems to me like if he had, I don’t know, dozens, maybe hundreds of people working for him, they would have been able to actually build the Difference Engine.
And from what ChatGPT tells me, it’s likely that this would have been an investment with a positive ROI. It’d make the construction of mathematical tables significantly faster and more reliable, and there was a big demand for such tables. It makes sense to me that it’d be a worthwhile investment. After all, they were already employing similar numbers of people to construct the tables by hand.
Anyway, it turns out that not much was really going on. Babbage worked on his stuff and failed. A few others were also working on similar projects but overall the amount of work being done on such machines was pretty limited.
Until the very end of the century, that is. In the late 1880s, a man named Herman Hollerith invented the Hollerith Machine. I think it’s best understood by talking about it’s first project: the 1890 US Census.
To produce a US Census, representatives have to go door-to-door and get citizens to fill out paperwork. Stuff like how many people are in the household, how old they are, male vs female, occupation, etc.
So far so good, right? Ok. Now imagine that you wanted to use this data to answer some questions. What percentage of households make over $1,000/year? What is the average salary of a baker? Which state has the lowest average annual salary? Which county?
It’d be pretty damn tedious to answer these sorts of questions, right? You’d have to go through all of the paperwork. Like for the average salary of a baker, maybe you’d first go through all the papers and put the papers containing people who are employed as a baker in one pile, and then go through that pile and compute the average salary. That’d definitely be a pain.
Well, Hollerith had a solution to this. You still have to go door-to-door and fill out all of the paperwork. But then you employ people to take that paperwork and fill out a punch card for each citizen. The punch card would encode stuff like salary and occupation.

Then you can feed these punch cards into the Hollerith Machine and get answers to your questions. How many doctors are there in our county? How much do they make? Etc. As you might imagine, this was a pretty big breakthrough.
People started to pay attention. Businesses were like, “Hey, we could use this to construct reports.” Scientists were like, “Hey, we could use this to process our data.”
Noticing this, in 1896, Hollerith formed the Tabulating Machine Company.
Then in 1911, four large firms, including the Tabulating Machine Company, merged to form the Computing-Tabulating-Recording Company.
In 1924 the Computing-Tabulating-Recording Company changed it’s name to International Business Machines Corporation, which you probably have heard referred to today as IBM.

In the 1950s, with the invention of the electronic computer, tabulating machines started to take a back seat. In the 1960s some organizations still used them but they weren’t common. By the 1970s and 1980s, they were basically dead.
This whole journey started with me wanting to understand what the big ideas are in computer science and how they developed over time. If you look into this sort of question, you’ll usually find that people start with Babbage, or perhaps Boole, but soon after that they move on to Turing. They really emphasize his work as being super important and foundational.
However, I’m not sure how justified that really is. At least from the perspective of someone who isn’t a theoretical computer science researcher and is just trying to see what the big picture looks like.
But I’m getting ahead of myself here. Let’s take a step back and go through this more slowly.
Turing did a lot of his work in the 1930s. But again, let’s continue to back up. Before talking about that work, I think that it’s important to understand a few things about the context in which he did his work. I like the way this StackExchange answer puts it:
…remember that Turing was working before computers existed. As such, he wasn’t trying to codify what electronic computers do but, rather, computation in general. My parents have a dictionary from the 1930s that defines computer as “someone who computes” and this is basically where Turing was coming from: for him, at that time, computation was about slide rules, log tables, pencils and pieces of paper. In that mind-set, rewriting symbols on a paper tape doesn’t seem like a bad abstraction.
Piggybacking off of that, I’d like to emphasize that Turing’s fields of interest were mathematics and logic. That was the lens through which he peered. He wasn’t looking through a computer-oriented lens.
To elaborate, in the early 20th century, there was a guy named David Hilbert who was unhappy with the state of mathematics. Mathematicians would always seem to run into these weird paradoxes and seemingly unavoidable contradictions. So then, in response to these issues, Hilbert’s thought process went something like this:
Guys, I really want to take a step back here. Us mathematicians, we’ve got our axioms. We’ve got our rules of inference. With these axioms and rules of inference, we should be able to prove all possible mathematical truths. There shouldn’t be any contradictions or ambiguity or uncertainty.
I’m not sure if we actually have this foundation though. Maybe we’re missing certain axioms. Maybe the rules of inference we’re using are unjustified. I say we should pursue a rock-solid foundation.
Once we have the foundation, then we can continue our other work. But it seems a little premature to be pursuing this other work when we’re not sure about the actual axioms and rules of inference that our other work is based off of. When you build on top of a shaky foundation, you risk everything coming crashing down.

So, yeah. Hilbert kinda went around complaining out loud about all of this.
And it worked. People like Kurt Godel, Alan Turing and John von Neumann not only listened, but were inspired and took action.
Godel worked with Hilbert, joining his pursuit. Unfortunately, along this pursuit, Godel discovered something a little unsettling. He discovered that they were doomed to fail.
I’m not joking. I’m not exaggerating. They were doomed to fail.
It’s not what Godel was hoping for. Godel was hoping to add some support to that shaky Jenga piece at the bottom so that they could continue building their beautiful tower taller and taller, consisting of structures ever more elegant. Instead, he ended up proving that it was literally impossible.
Talk about the second virtue.
This really shook things up for mathematicians. It was a huge — and perhaps existentially threatening — discovery.
And that’s when Turing walked up to Hilbert and was like:
Turing: Hey buddy. You ok?
Hilbert: Yeah, I guess.
Turing: You are? Good. Because I’m about to pour some salt in that wound.
He continued:[5]
Turing: Just in case you were secretly hanging on to any threads of hope, I figured I’d really make sure that they’re all burnt to a cri