As a computer scientist, Alan Turing is a man I personally have much and more to thank for. The recent release of ‘The Imitation Game’ – a film I can wholeheartedly recommend – has placed his life and work into the limelight. Yet the achievements of other computing heroes are not widely recognised. These remarkable scientists, who have shaped our modern way of life in so many ways are probably some of the most important people you have never heard of.
History remembers the 19th century work of Charles Babbage and Ada Lovelace; the former for his design of the Analytical and Difference engines (an early form of mechanical calculator) and the latter for the first programs to be written for it. In recent years Ada Lovelace Day (14th October) has been used as a forum to celebrate women in STEM and for popularising her contribution to the very early beginnings of the field. However, computing is really a very young discipline, and there are a multitude of discoveries which are no more than 50 years old. I hope to touch on a few of these that you may use everyday, as well as introduce you to the truly great thinkers who made them a reality.
Have you ever asked Google Maps for the shortest way to get from A to B, or maybe the fastest or cheapest route? Edsger Dijkstra, a Dutch computer scientist, has been helping to get you where you need to be since 1959, when he invented Dijkstra’s Shortest Path Algorithm. Whilst rarely used in its original form in large scale systems (like Google Maps) this algorithm is at the heart of almost every route finding system, and can be used regardless of whether it’s distance, time or expense you want to minimise.
Dijkstra’s sphere of influence in your life extends further still. As you read this article, doubtless you have other tabs open in the background, and you may be listening to music too. Your computer seems to juggle these myriad tasks with ease, and it is another of Dijkstra’s creations that lets it: the semaphore. The semaphore is essentially a bookkeeping tool, allowing multiple programs to have access to a single, shared resource in a controlled manner. For example, if multiple programs attempt to use your computer’s internet connection to communicate, how does your computer make sure they don’t “talk over each other”? By using a semaphore: only the program holding the semaphore can talk, and it hands it back when it is done, ready for the next program to use (think of it like a talking stick). This way each program gets a fair share of the connection without being interrupted when it is sending its messages.
Order is all important and ever present in the computing world. We sort our emails by date and subject; we expect Google to sort our search results by relevance; and we sort our music by year of release, genre and alphabetical order (…or is that just me?). Without order, all the data made available to us is an overwhelming sea of information with no indication of what is worth looking at. There are probably as many ways to sort data as there are reasons to do it (cf. Bogosort, Cocktail Sort, Gnome Sort, Pancake Sort, Spaghetti Sort for some more unconventional examples), but for most of your needs, you can’t go wrong with Quicksort. Originally conceived in 1960 by Tony Hoare to sort words as part of a system for translating between Russian and English, it is now the de facto standard sorting algorithm used in most programming languages. I wouldn’t be surprised if Tony Hoare had been organising your music collection with you for many years now. By his own admission “[it] is the only really interesting algorithm that [he’s] ever developed”; but between you and me, he’s being modest.
Compilers are an essential tool in almost every software engineer’s toolchain, but they are not something most people have come across. These are the programs that take code written by a person, and translate them into a format that a processor can run. They allow programmers to express their ideas more naturally whilst simultaneously allowing them to run the same code on different types of processor (a feature of code known as portability). Before their development, programs were simply not portable. Writing the same program for a new machine involved formulating a second, different (and very long) sequence of binary numbers by hand: an error-prone and inefficient process. Grace Hopper is credited with inventing the first compiler, called A-0, in 1952, and with it and its successors, popularising the idea of decoupling the programming language from the machine that ran it. At the time, this was almost unheard of and the consensus was that computers were essentially calculators for working with numbers; they couldn’t possibly deal with the complex text manipulation required for compiling code. The trend that Grace Hopper started in 1952 – which continues to this day – has afforded subsequent software engineers much higher levels of productivity, which in turn has allowed us to make the leaps and bounds we see today. Without compilers, the widespread use of algorithms like Dijkstra’s, Quicksort and countless others would have been close to impossible.
Of course, I have merely scratched the surface. There are so many achievements that I have left unsaid, and still more computer scientists and logicians who I have not been able to mention at all. So, should you find yourself sufficiently captivated, why not look up Alan Kay and his work on GUIs, or Edgar Codd whose work on the relational model forms the basis of many a large-scale database (like Wikipedia’s, or Facebook’s), or Sir Tim Berners-Lee, credited as the creator of the World Wide Web. After all, between them, they’ve made it so very easy for you.
Original illustration by Isobel Staton