Edsgar Dijsktra was a computer science pioneer who stressed the importance of math and formalism in software development. At times funny, at times profound, at times polarizing, much of what he said decades ago still holds true. This says a lot, given this field’s rapid pace of change.
Today, I want to explore one of his quotes:
“Computer science is no more about computers than astronomy is about telescopes, biology is about microscopes, or chemistry is about beakers and test tubes. Science is not about tools. It is about how we use them, and what we find out when we do.
On first glance, this seems wrong. Astronomy, Biology and Chemistry are not named after their primary tools, but Computer Science is. This implies Computer Science’s subject of study IS the tool, right? Besides, people who use telescopes are generally doing Astronomy, even if it’s a very simple sort. A similar argument holds for microscopes and beakers. However, there is no single field of study that unites computer users, many of whom aren’t even studying! Computers are used for games, chatting, checking the news, writing, etc…
These objections can be answered, but the answer is subtle and perhaps a bit confusing. Fortunately, history can help us here.
Before computers were invented, companies used…. computers. In fact, the word “Computer” was in use since at least 1613! In this case though, “Computer” was a job description – it was a human being who performed computations: Compute + er.
Then one day, a new kind of machine came on the scene, one that could do the job of the (human) computers. Naturally, it was named after the job it automated, and the Computer as we know it was born. In all fairness, there were predecessors, but it wasn’t until the 30s that machines were built that led to the computers we know and love (or hate) today.
From here on, I will use “hardware” to mean the physical machine, and “computer” to mean anything capable of computing. In theory a computer can be a person, machine (built in a variety of ways) or an army of super-intelligent ants acting as one.
Originally, computers were programmed by switching wires, but later machine languages were introduced, and people could type in commands. They were still specific to the hardware, but then compilers were created that not only allowed people to get more done with less effort, but allowed the same program to be run on different hardware, provided one recompiled. Now this wasn’t perfect as there were still some hardware specific portions of any non-trivial software that was included for efficiency or to take advantage of unique features, but a great deal of the software was hardware independent and became more so as time went on.
Today, we have software that’s 100% hardware independent. Take a web app; it often runs on a server to which we have no direct access, its client-side code runs on platforms we may not be aware of, and we’re more concerned about the browser than the hardware or even the O/S!
Ask someone how to program a task and the first question you will be asked is “what language”, not “what hardware”. The hardware is largely irrelevant.
Which brings us back to Djisktra.