A philosopher, a super hero and a software engineer walk into a bar…

Emily Maginess
By Emily Maginess under Engineering 24 May 2013

What possible link could there be between philosophy and software engineering?

As a philosophy graduate turned developer, it’s a question I get quite a lot, and one that bothers me for two reasons: Firstly because it implies a fundamental unconnectedness between the two disciplines and secondly, because it’s impossible to answer without providing a well-considered 500 word summary. Hence this blog post.

Philosophy and IT criss-cross in all kinds of ways, but the one I’ll focus on here is how a philosophical style of thinking can be brought to bear on the problems of application design. To “philosophise” about something is simply to think clearly about it, questioning assumptions and resolving ambiguities. A classic example is the problem of personal identity: think about what the word “Elvis” refers to. On the surface, the answer seems obvious – it refers to the human being with the quiff and sideburns who sang “Hound Dog”. But let’s don our philosophical hats and consider what would happen if we were somehow able to switch Elvis’ brain with mine. Where is Elvis now? The fat guy in the jumpsuit or the tall one with the glasses? Suddenly, it isn’t obvious what a “person” is at all – some kind of animal? A brain? A soul?

I’m not going to attempt to resolve this issue here, and raise it only to exemplify the kind of assumption-busting philosophical mindset under discussion. In many professions this kind of thinking isn’t necessary – everyone, from physicists to fishermen, tend to work within a fixed paradigm, with only the occasional trailblazer daring to ask “What if the Sun doesn’t go round the Earth?” or “What would happen if we chucked a stick of dynamite in the water?” And now we reach my central thesis: software professionals do have to ask these kinds of questions, and they have to ask them all the time.

Let’s suppose that we’ve been asked to build a website that displays information about superheroes. Our requirements state that we need to display the name of each superhero’s alter ego (if any) as well as a summary of the superhero’s life. We could take the spec at face value and hack out a naive solution in a few hours… or we could ponder the problem in a little more depth.

Consider Zorro. Zorro has appeared in numerous films, books and comics over the decades, which raises immediate problems for our “life history”, as we can assume conflicting accounts of Zorro’s life across the various portrayals. The Antonio Banderas incarnation complicates things further as he has a different alter ego to other Zorros and shares his Zorroverse with the Anthony Hopkins version (watch the film if you’re confused).

Clearly there are a bunch of interrelated entities here but can we isolate an essential Zorroness in a single one of them and figure out how they all hang together? Superman is even worse, with something like five parallel Supermen spread across co-existing multiple realities in the comic book world alone. Clearly there’s a lot more to this problem space than meets the eye. Just as with the Elvis example, an apparently simple problem conceals assumptions and ambiguities that demand resolution, and both problems have corresponding problem spaces of entities and relationships to be broken down and analysed. To make headway with either requires the high-level ability to understand a problem space and uncover its subtleties, and the low-level analysis skills to then resolve them i.e. the skills of a philosopher. And every time we are faced with a new project, we have to deal with these issues all over again – there is no comfy paradigm to fall back on.

Who should actually take on this job within a project is an interesting question in itself, but it’s clear that someone of a philosophical bent is required. Looked at this way, software is the obvious career choice for the philosophy graduate and I for one would welcome any philosophers looking to work on The App Business engineering team.

(NB: applicants may also be required to be really really good at computer programming).