Software engineering is a young discipline. The process of developing software has been compared to building houses (software patterns), craft (pragmatic programming), gardening, manufacturing on an assembly line (ask your boss about this), and no doubt other metaphors will appear as the discipline’s teeth get lengthier.
Despite the relative youth of the profession, and despite the constantly changing nature of the game, there are nevertheless certain articles about the industry, the discipline, the phenomenon of software programming that have proven to be indispensable, if only because they continue to reveal truisms about ourselves, as coders, that we continue to forget. The simplest lesson is that software projects are always harder than we think they are going to be.
What Mary Knows is a philosophical essay by Frank Jackson which poses a thought experiment in order to explore what we mean when we speak of ‘knowing’. Mary is an imaginary person locked in a darkened room and deprived of all sense impressions. At the same time, she is fed all the knowledge she needs in order to develop a scientifically descriptive and scientifically full picture of the world. Eventually she is released from her room and encounters something she has never comes across before, despite the completeness of her education. She comes across the color yellow, and finds that she doesn’t ‘know’ what it is.
Software developers often suffer from a similar condition. While we feel fully knowledgeable about the specific things, and the specific trends, we are currently working on in our cubicles, we tend to lose sight of the big picture.
To this end, I’ve been trying to build up a library of things every developer should know. The only condition on this canon is that the articles must be publicly accessible for, to my thinking, if an article is hard to get or is something that someone else is making money off (which they certainly deserve to — I don’t have a particular beef with monetizing denken) then it is not something that everyone needs to know. That’s a bit of sophistry, of course, but it serves my purposes. Any suggestions for extending this list (quite short at the moment) are most welcome.
Here’s the beginnings of the canon:
1. Alan Turing’s 1950 essay, Computing Machinery and Intelligence — software programming constantly runs into questions about artificial intelligence, if only because, in developing business solutions, we often are trying to translate human activities into software enforced rules. This article is the original source for many of these considerations.
2. Vernor Vinge’s influential 1993 article on The Singularity — if the Turing paper tells us where software developers come from, Vinge’s paper tells us where we may be headed. It combines two notions: first Moore’s Law, which has become a metaphor for the exponential rate at which technology improves, and second the observation that we are not in control of this progress.
3. Nicholas Carr’s IT Doesn’t Matter is rather hard to find, but is important in that it questions the primacy of software development, and proposes that we, as software developers, may all be working ourselves out of a job.
4. Fred Brooks’s No Silver Bullet tells us why software development on reasonably large projects is so, very hard. More importantly, he reveals some of the preconceptions that often make it harder than it needs to be, and dooms us to frequent failures. Brooks’s essay The Mythical Man-Month is also essential reading, but I cannot find an Internet source for it, alas (fortunately, the title, for the most part, tells you what you need to know).
5. In the same vein as Fred Brooks’s skeptical essays about the nature of software development is Michael Oakeshott’s Rationality in Politics. Though not really about software programming, it does examine some of the preconceptions about rationality that underpin how we view software programming, and provides some intellectual underpinnings for Fred Brooks’s work, should you like to explore it.
The Oakeshott also makes a good segue for discussing some free podcasts worth listening to. Since I spend an inordinate amount of time in Atlanta traffic, I am always on the lookout for these sorts of things. And like the software canon above, I like my listening to be free.
First, you might enjoy Learn Out Loud’s philosophy podcast. By subscribing to this podcast through iTunes, you have the opportunity to listen to dramatic readings of the major philosophers, including Plato, Aristotle, Hobbes, Hume and Wittgenstein. This may seem, at first, like a recipe for falling asleep at the wheel, but they are actually quite engaging, thanks largely to the fact that the reader used in most of these recordings is a dead-ringer for Captain Picard from TNG.
(For some reason, I get many hits for Kierkegaard’s essay The Crowd is Untruth on my blog. For those readers, in particular, I’d like to point out that Learn Out Loud has a 3.6 MB download of K’s essay.)
You might get a kick out of Open Court Publishing’s podcast of excerpts from their Popular Philosophy series. Subscribe today, and you will have the opportunity to hear:
- Why Make a Matrix? And Why You Might Be in One
- Enjoying the So-Called Iced Cream: Mr. Burns, Satan, and Happiness
- Seven Lessons in Philosophy You Already Learned Playing Texas Hold’Em
- When They Aren’t Eating Us, They Bring Us Together: Zombies and the American Social Contract
- Tony Soprano as Ethical Manager
- Monty Python and David Hume on Religion
- … and many more …