… and other wild and carefree – probably offensive – stereotypes. A collection of ‘light-hearted’ (see what we did there?) thoughts and anecdotes trying to get to the bottom of what makes a Computer Scientist tick. There may or may not ultimately be a serious point …
It’s an old one but a good one:
There are 10 types of people in the world; those that understand binary and those that don’t
(At least, it’s as old and as good as CS jokes tend to be, which may not be a long vector in either direction.) But how much truth lies behind it? We hear a lot about this ‘computational thinking’, for example, these days but what does it take to be good at it? To what extent is CS ability a natural thing compared to what can be realistically taught? How much ‘computational thinking’ does everyone need today and how much can be left to the ‘experts’? In which case, what do we expect from the ‘experts’? Are programmers born that way or can the skill be developed? (Compare with artists: can you teach someone with no sense of perspective to be a landscape painter?) How much have Computer Scientists ‘evolved’ from experts in other disciplines? Whatever the underlying statistics might say, it does often seem that Computer Scientists are a breed apart from the rest of the world so what makes them so ‘special’?
We can’t deny that Computer Science (CS) is a ‘young’ discipline. (Those of us of a certain age will remember being taught CS in school by the Physics or Business teacher, for example; it’s just unfortunate that, in the UK, a lot hasn’t changed yet.) If we look at the historical development of CS, there are obvious tributaries of Mathematics, Engineering and Philosophy. (A decent case could be made for a number more, of course: we don’t get far building a modern computer without Physics, or even Chemistry, for example, but we have to start somewhere on this journey.) Roughly speaking, we need Engineering to build the machines, Mathematics to understand the data structures and algorithms we work with and Philosophy to question what we’re actually doing and why. (If you doubt the relevance of Philosophy to CS, you may have already failed the entrance exam – see pretty much all of Turing‘s work, for example.) Let’s begin with the Mathematicians …
Externally, mathematicians have something of a reputation for laziness:
“One of the endearing things about mathematicians is the extent to which they will go to avoid doing any real work.” Matthew Pordage
But this somewhat obscures the truth. In essence, it comes from the Mathematician’s perpetual struggle to abstract and generalise problems instead of solving individual examples. (Really not interested that (2+1)x(2+1)=9 but (n+1)2 = n2+2n+1 is good.) So, in a sense, it’s sort of the other way around. There’s almost a delayed gratification going on here in a psychological sense; Mathematicians are prepared to invest considerable effort – almost sledgehammer on nut effort – to solve a problem in way that will make subsequent examples easier. That’s very much what sets them apart. Although there’s a clear pay-off here for Computer Scientists (compare programming and algebra, for example), this is often more to do with the way Mathematicians think about things rather that how they actually solve them. (See the kettle example later on.)
In pure terms, Mathematicians think logically; ruthlessly, brutally logically and they don’t take anything for granted:
A Sociologist, an Astro-physicist and a Mathematician are on a train travelling through Scotland. They see a black sheep in a field. “Oh, look,” says the Sociologist. Scottish sheep are black.” The Astro-phycisist smiles condescendingly and corrects him, “No, SOME Scottish sheep are black.” The Mathematician raises her eyes to Heaven and chants in an exasperated broken monotone, “There exists at least one field in Scotland, in which there exists at least one sheep, of which at least ONE SIDE is black!”
Philosophers also try to think logically, of course, but they’re hampered by language. To express concepts precisely, you need a precise language or notation and that doesn’t exist outside of Mathematics. Much of Lewis Carroll‘s most quoted material, for example, is, in effect, exposing the inadequacies of English as a vehicle for logical discussion and debate, particularly in relation to Mathematics:
`Take some more tea,’ the March Hare said to Alice, very earnestly. `I’ve had nothing yet,’ Alice replied in an offended tone, `so I can’t take more.’ `You mean you can’t take LESS,’ said the Hatter: `it’s very easy to take MORE than nothing.’ (Alice’s Adventures in Wonderland: Chapter VII)
Formal languages are precise but natural languages aren’t and that’s where philosophers come unstuck. (Alice’s confusion disappears if we rewrite the above dialogue symbolically with ‘<‘ and ‘>’ in the right places.) People have tried to bridge the gap, of course. Bertrand Russell very famously took 362 pages to prove that 1+1=2 in his (and Alfred North Whitehead‘s) Principia Mathematica attempt to show the universe to be logically complete. It took Kurt Gödel to show that it wasn’t. However, we’re never going to be able to discuss the arguments for and against free will, say, with symbolic logic – it’s just too big. However, once again, that sort of thing’s not gone without attempt. The origins of the following masterpiece are lost in the mists of time but it spectacularly combines bad mathematics with bad logic with bad philosophy:
Consider the infinite series, 1-1+1-1+1-1+1-1… . What does it sum to? Well, we can group terms as (1-1)+(1-1)+(1-1)+(1-1)… , in which case we get zero, or we can redistribute brackets as 1(-1+1)(-1+1)(-1+1)(-1… , which seems to give one. So one and zero are the same thing, something can come from nothing, so God (or the Big Bang – take your pick) exists.
Anyway, we digress; let’s assume we’re dealing with competent practitioners. It turns out that Computer Scientists need more than just the Mathematician’s or the Philosopher’s logic; they need the Engineer’s practicality too. (See How to Write a Really Bad Program.) In fact, and this matters a lot in Computing, logicality isn’t always the same as efficiency:
Give an Engineer an empty electric kettle and ask her to boil some water. She will fill the kettle from the tap, plug it in and switch it on. The following day, give her a full kettle and ask again for boiling water. Naturally, she will simply plug in the kettle and switch it on. Now give the same tasks to a Mathematician. The first day’s solution will be the same as the Engineer’s – fill kettle and boil. However, when presented with the full kettle on the second day, the Mathematician will immediately empty the kettle down the sink. Why? Because that’s reduced the problem to the one he solved the day before.
Mathematicians, it turns out, are more interested in what can and can’t be done than exactly how to do them. Many sequences, series and other constructs mathematicians use to prove things are often very inefficient in practice; but that doesn’t matter to them, they’re proving, not doing. Engineers, on the other hand, pride themselves on their ability to be practical, reducing real work and other resources where possible, often on a case-by-case basis – almost the opposite of the Mathematicians’ generalisations:
An optimist thinks the glass is half-full; a pessimist thinks it’s half-empty. An engineer thinks the glass is twice as large as it needs to be.
(Although experience suggests that a Computer Scientist might have an entirely different viewpoint: “Why have you given me a #@&$^*~ half-glass of water? I ordered a cheeseburger!”) However, there’s no doubt that both Engineers and Computer Scientists have to be practical and industrious and there are places where we begin to see the overlap, both technically and … unfortunately … socially:
An Engineer is walking through a wood, when he hears a small voice from a pool by his feet. “If you kiss me, I’ll turn into a beautiful princess.” He looks down and sees a frog. He bends over, picks up the frog and puts it in his pocket. The frog speaks up again and says, “If you kiss me and turn me back into a beautiful princess, I’ll stay with you for one month.” The Engineer takes the frog out of his pocket, smiles at it and returns it to the pocket. The frog then cries out, “If you kiss me and turn me back, I’ll do whatever you say!” Again the Engineer takes the frog out, smiles at it and puts it back into his pocket. Finally, the frog asks, “What’s the matter with you? I’ve told you I’m a beautiful princess, I’ll stay with you for a month and do whatever you say. What more do you want?” The Engineer says, “Look, I’m an Engineer. I don’t have time for a girlfriend, but a talking frog, now that’s cool!”
And it’s starting to come together. We could easily substitute ‘Computer Scientist’ for ‘Engineer’ in the above.
It may not be proven – and it will upset the politically correct element – but there certainly seems to be a link between below-average social skills and Engineering or Computing ability. Certainly, Scott Adams thinks Engineers are born, not nurtured, in both senses and there’s no shortage of material for the yet-to-be-written ‘compendium of mad mathematicians and scientists’. (Gödel himself was a great example.)
For Computer Scientists, this works on many levels. On the surface, computers are reliable and communicate logically and consistently; they respond in the same way to the same input and give results in a predictable form. People don’t; so it’s hardy surprising that some prefer one to the other. However, a much deeper problem is how things (possibly including people) actually work. In simple terms, whilst a program might appreciate constant and in-depth analysis, your partner probably won’t. Alternatively, if a ‘human system’ isn’t being consistent or reliable, there’s a tendency to give up altogether and go back to the comfort of the machine. Once again, Dilbert explains it best …
In a sense, this tendency – or ability, call it what you will – to physically or metaphorically take things apart. is always going to be a blessing and a curse in different circumstances. No critical system should ever really be developed without input from a decent analyst but not everything needs that level of detail – deciding what to watch on TV or packing a suitcase, for example. The problem is that personalities aren’t so easily switched on and off. Soldiers, for example, have a similar issue; being praised and condemned for exactly the same behaviour based on the unfortunate detail of whether they’re on or off duty.
But there’s an argument for thinking it may be even worse for a computer scientist than those in most other technology professions, even those in other areas of basic IT. Computers may be consistent but they’re also entirely unforgiving. Design a flawed manual process, for example, and it might take years for an issue with the necessary ‘special’ characteristics to expose the problem. Write a flawed algorithm or implement some real-time code badly and the impact is likely to be instant. You need a certain mind-set to work in that environment, someone who really can see into all the detail. In fact, however, program analysts are often good at seeing the loopholes in offline systems too. (‘It doesn’t matter what I write on that form because it only goes to XXX whereas the signing-off is actually done by YYY’.) Sometimes this is a real benefit – even an advantage – but often it isn’t welcome on a day-to-day basis. It’s too simplistic to suggest that the Autism Scale and the ‘Good Computer Scientist’ scale are the same thing but, equally, it would be naive to suggest that there isn’t correlation. Interestingly, those that buck the trend often over-compensate as self-publicists and larger-than-life personalities.
On the whole, then, It’s possible that Computer Scientists integrate the best technical traits of the Mathematician and Engineer; logic and application – theory and practice. But, in the wider world, is there a price to pay? Do the Mathematician’s tendency to abstract and the Engineer’s (pre)disposition to detach make Computer Scientists hard to live with? There are many that would argue they do. This may just be the way it is.
Finally going back to the headline question then … Your average Computer Scientist is probably just about capable of changing a light bulb unaided but the lazy Mathematician within will much prefer that they don’t have to bother in the first place – actually thinking about the bigger picture, of course. There are two ways of arguing this. Firstly, we really should be considering automating the process, which involves some Engineering to build a robot or something similar. Secondly, the inner Philosopher might want to question whether the bulb really needs changing at all or whether it’s all just a question of perception. Actually, this is not an entirely abstract position to take, but a logical one too. For example, anyone who’s ever owned a Vauxhall (Opel/General Motors) car will have stories to tell about electrical (un)reliability. In particular, if a message appears warning of a component malfunction, there’s a 50% chance the component is actually faulty and a 50% chance there’s a fault in the fault detection system. Logic circuits often work that way.
So, how many Computer Scientists does it take to change a light bulb? 0 or 1, obviously.