Software & Hardware Development History
Jan. 10th, 2024 09:29 am
Certain historic documents capture the most crucial paradigm shifts in computing technology, and they are priceless. Perhaps the most valuable takeaway from this tour of brilliance is that there is always room for new ideas and approaches. Right now, someone, somewhere, is working on a way of doing things that will shake up the world of software development. Maybe it's you, with a paper that could wind up being #10 on this list. Just don’t be too quick to dismiss wild ideas—including your own.
So please take a look back over the past century (nearly) of software development, encoded in papers that every developer should read:
1. Alan Turing: On Computable Numbers, with an Application to the Entscheidungsproblem (1936)
Turing's writing(https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf) has the character of a mind exploring on paper an uncertain terrain, and finding the landmarks to develop a map. What's more, this particular map has served us well for almost a hundred years.
It is a must-read on many levels, including as a continuation of Gödel's work on incompleteness(https://plato.stanford.edu/entries/goedel-incompleteness). Just the unveiling of the tape-and-machine idea makes it worthwhile.
More details: https://en.wikipedia.org/wiki/Entscheidungsproblem
2. John von Neumann: First Draft of a Report on the EDVAC (1945)
The von Neumann paper(https://web.mit.edu/STS.035/www/PDFs/edvac.pdf) asks what the character of a general computer would be, as it “applies to the physical device as well as to the arithmetical and logical arrangements which govern its functioning.” Von Neumann's answer was an outline of the modern digital computer.
3. John Backuss et al.: Specifications for the IBM Mathematical FORmula TRANSlating System, FORTRAN (1954)
The FORTRAN specification(https://archive.computerhistory.org/resources/text/Fortran/102679231.05.01.acc.pdf) gives a great sense of the moment and helped to create a model that language designers have adopted since. It captures the burgeoning sense of what was then just becoming possible with hardware and software.
4. Edsger Dijkstra: Go To Statement Considered Harmful (1968)
Aside from giving us the “considered harmful” meme, Edsger Dijkstra’s 1968 paper(https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf) not only identifies the superiority of loops and conditional control flows over the hard-to-follow go-to statement, but instigates a new way of thinking and talking about the quality of code.
Dijkstra’s short treatise also helped to usher in the generation of higher-order languages, bringing us one step closer to the programming languages we use today.
5. Diffie-Hellman: New Directions in Cryptography (1976)
When it landed, New Directions in Cryptography(https://www-ee.stanford.edu/~hellman/publications/24.pdf) set off an epic battle between open communication and government espionage agencies like the NSA. It was an extraordinary moment in software, and history in general, and we have it in writing. The authors also seemed to understand the radical nature of their proposal—after all, the paper's opening words were: “We stand today on the brink of a revolution in cryptography.”
6. Richard Stallman: The Gnu Manifesto (1985)
The Gnu Manifesto(https://www.gnu.org/gnu/manifesto.en.html) is still fresh enough today that it reads like it could have been written for a GitHub project in 2023. It is surely the most entertaining of the papers on this list.
7. Roy Fielding: Architectural Styles and the Design of Network-based Software Architectures (2000)
Fielding’s paper(https://ics.uci.edu/~fielding/pubs/dissertation/top.htm) introducing the REST architectural style landed in 2000, it summarized lessons learned in the '90’s distributed programming environment, then proposed a way forward. In this regard, I believe it holds title for two decades of software development history.
8. Satoshi Nakamoto: Bitcoin: A Peer-to-Peer Electronic Cash System (2008)
The now-famous Nakamoto paper(https://bitcoin.org/bitcoin.pdf) was written by a person, group of people, or entity unknown. It draws together all the prior art in digital currencies and summarizes a solution to their main problems. In particular, the Bitcoin paper addresses the double-spend problem.
Beyond the simple notion of a currency like Bitcoin, the paper suggested an engine that could leverage cryptography in producing distributed virtual machines like Ethereum.
The Bitcoin paper is a wonderful example of how to present a simple, clean solution to a seemingly bewildering mess of complexity.
9. Martin Abadi et al.: TensorFlow: A System for Large-Scale Machine Learning (2015)
This paper(https://www.usenix.org/system/files/conference/osdi16/osdi16-abadi.pdf) , by Martín Abadi and a host of contributors too extensive to list, focuses on the specifics of TensorFlow, especially in making a more generalized AI platform. In the process, it provides an excellent, high-level tour of the state of the art in machine learning. Great reading for the ML curious and those looking for a plain-language entry into a deeper understanding of the field.