Not so long ago, Hardware Engineers lived on Venus (some Software Engineers still believe that they should all be shipped back there when they get the technology sorted out) where they built things. On Venus, capacitors grow on trees, resistors grow on bushes, inductors rain from the sky and Hardware Engineers have selectively bred several strains of diode (they were trying to breed edible plants at the time, but what the heck). Whenever they felt suitably inspired, they would knock up a nifty circuit from local Venusian resources, analyse it to death with oscilloscopes and go and drink a few beers. Hardware Engineer dominance rituals involved boasting about circuits they had built, the number of functions on their oscilloscope and games of dare involving hot soldering iron tips.

Meanwhile, Mars was inhabited by Software Engineers (or ‘Computer Geeks’). Since Mars was the rusting hulk of an ancient cosmic supercomputer, Martian Computer Geeks spent most of their time reprogramming it, optimising code, debugging bad code and boasting about the size of their stack dumps and core dumps. Whenever they had excess energy to work off, the Martian Computer Geeks would settle down and hold code reviews or try to invent Real-time Cobol or Artificial Intelligence. Computer Geek dominance rituals generally involved writing complicated programs that printed ‘Hello World’ and duelling in virtual reality.

Due to a cosmic calamity, both Venus and Mars became uninhabitable. Venusian Hardware Engineers built themselves a spaceship while Martian Software Engineers reprogrammed an old one that happened to be lying around unused. By chance, both races landed on a previously uninhabited planet called Earth. And there they were in for a shock. In order to make software run, Computer Geeks had to get hardware Engineers to build it! And whenever a Hardware Engineers sat back glowing with pride at his latest circuit board, some cocky Software Engineer would come along and tell him how much better it would be if it contained an EPROM full of the latest software. It was bound to cause trouble.


To make things more complicated, the two races spoke totally different languages. Hardware Engineers used unintelligible words like ‘bridge rectifier’, ‘opamp’, ‘Schmitt trigger’ and ‘thyristor’. Software Engineers talked about ‘real-time system analysis’ and ‘cyclomatic complexity’. Basically, if it didn’t involve a multi-function scope , hardware Engineers distrusted it. And conversely, if it couldn’t be run through a symbolic debugger, Computer Geeks would have nothing to do with it. Since they both had to share a planet (and moreover one where capacitors didn’t grow on trees and the weather couldn’t be programmed) they would have to learn to understand each other.

For example, whenever a Computer Geek said ‘Let’s shake the bugs out of the system’, the last thing he wanted was for some Hardware Engineer to pick it up and physically shake it. But that’s what happened, every time, because Hardware Engineers always took things literally. Meanwhile, Hardware Engineers got frustrated because Software Engineers retreated behind a smokescreen of jokes and jargon at times when Hardware Engineers needed to hold serious discussions.

Note: Software Engineers are referred to as ‘he’. There are female Computer Geeks, but not very many. No-one is quite sure how Software Engineers reproduce (probably most of them don’t ). As for hardware Engineers, no-one has yet been interested in studying their reproductive strategy, but it probably involves a set of probes somewhere along the line (and overcoming resistance).

To understand each other, Hardware Engineers and Computer Geeks need to know a few basic facts of life about each other.

Hardware Engineers are pedantic; Software Engineers are frivolous. A Hardware Engineer’s pedantic style is sometimes mistaken for a dry sense of humour. Software Engineers flit from frivolous topic to frivolous topic so quickly that they are sometimes mistaken for Attention Deficit Sufferers. Take the following example. The following email was sent to Hardware Engineers and Software Engineers:

"There will be 2 one-hour training sessions on Friday. Please attend between 15:00 and 16:00."

The Hardware Engineers all wrote back asking how to fit 2 hours into a 1 hour training session. They were still discussing the matter five days later. The Software Engineers looked for Dilbert cartoons on time travel. They then forgot about it.

Note: In actual fact, Software Engineers have no real concept of time and space. They phone home saying ‘I’ll be another 45 minutes, I just need to debug this code module and rebuild the exe’. They return home 3 days later wondering (a) why they are so damn hungry, (b) why they smell bad and (c) why their partner has begun divorce proceedings.

The correct approach is use Occam’s Razor. The simplest answer is usually the correct one. In this case the simplest answer is that the time of the first session only has been provided. Hardware Engineers would cut themselves with Occam’s Razor. Software Engineers would say that (a) Occam was only ever used to program transputers, or (b) a razor is hardware (hence the ‘beard and sandals’ image of dedicated Unix users).

Take the next example. An email with the following footnote was sent to a mixture of Hardware Engineers and Computer Geeks:

"Sorry if I have missed anyone off the distribution list of this email."

The Hardware Engineers all sent replies saying, "How does anyone know if they have been missed off the distribution list since they won’t have received the email to find out whether they should have been on the distribution list. Ha!".

Software Engineers thought it was another email joke and forward the message to all their friends with a covering note saying "Is this stupid or what?" thus ensuring that everyone receives a copy, whether or not they need to.

Hardware Engineers and Software Engineers will never be able to communicate until they understand fundamental things about each other’s culture. For example there is the problem of the Bathtub Curve.

This is a hardware concept. Failure rate of components increase after a critical time when components wear out. Hardware Engineers cannot understand why software doesn’t have a bathtub curve. Doesn’t software wear out? Sure, says the sniggering Software Engineers, a few thousand times round this DO-WHILE loop and the 1s and 0s will start to wear out. Hardware Engineers can’t understand the ridicule. Software Engineers can’t work out why car tyres need replacing after several thousand miles.

Note: Software Engineers may not understand the concept of a bathtub. Or of soap and water for that matter.



Unlike Software Engineers, Hardware Engineers have not evolved the ability to survive for several weeks on cold pizza, strong coffee and no sleep. A hardware Engineer is frequently confused by Software Engineer body language: the bloodshot eyes, staring expression and manic appearance seem to him a sign of mental instability and he will feel uneasy or threatened. Another Software Engineer correctly interprets this body language as that of someone who has spent the last caffeine-fueled week trying to debug someone else’s spaghetti code. Conversely, Software Engineers are sometimes so frustrated at a Hardware Engineer’s lack of response to Computer Geek stimuli such as puns, corny jokes and compiler errors that he will be tempted to check for a pulse.

When things get bad, Hardware Engineers get depressed. To Software Engineers they always sound depressed, or at least serious. Sometimes they sound so depressed that Software Engineers start offering to hang nooses from roof-supports so that Hardware Engineers can hang themselves. When Douglas Adams wrote the character of Marvin the Paranoid Android, he must have based it on a Hardware Engineer (Marvin mentions diodes; it’s a dead giveaway). When things get bad, Software Engineers get drunk and tell bad jokes. So bad, in fact, that Hardware Engineers offer to hang Software Engineers from their own nooses. Software Engineer jokes are often so bad and incomprehensible that Hardware Engineers have coined the phrase ‘It’s all geek to me.’

Somewhere along the line, Hardware Engineers and Software Engineers must have interfaced successfully. How else can ‘Systems Engineers’ or ‘Firmware’ be explained? A Systems Engineer is either a Computer Geek who knows which end of a soldering iron not to touch, or a Hardware Engineer who can get a ‘Hello World’ program to compile without wiping the hard drive. Most likely, this successful integration resulted from a misunderstanding about where to put some probes.

In order to share the same planet, Hardware Engineers and Software Engineers must learn a little of each other’s language and behaviour. Faced with a Resistor, a Hardware Engineer will design a circuit. A Software Engineer will hold it up and say ‘Hah! Resistance is useless!" and tell Star trek jokes which Hardware Engineers don’t understand. Faced with a symbolic debugger, a Software Engineer will say "Well who buggered de symbols in de first place?" while a Hardware Engineer looks blank. Hardware Engineers do have a sense of humour, it’s just that Software Engineers haven’t found it yet.

The best places to find a Software Engineer are (a) at Science Fiction conventions; (b) at Dungeons and dragons conventions; (c) job fairs since they are convinced that they earn less than the industry average and (d) at work in front of a computer screen (usually logged onto a porn site). Since the internet, they now attend (a), (b) and (c) in virtual capacity while remaining sat in front of their PC at work.

The best places to find Hardware Engineers are (a) components stores where they can be found haggling over the price of diodes; (b) equipment fairs where they can be seen ogling over rack-mounted test kit and double-sided PCB assembly instructions or (c) anywhere smelling of blown-up kit (they call it ‘smoke testing’). They are rarely found logged onto porn sites, partly because they haven’t worked out what is going on on porn sites, but mainly because they haven’t mastered the use of a computer in order to get on the Internet.

Software Engineers communicate in jargon: megabits, teraflops, object orientation, inheritance classes, unified modelling language, stack underflow, dynamic memory allocation …. The fact that no-one else understands them doesn’t matter as, mostly, they don’t understand each other either. Hardware Engineers sometimes talk about design proving, backplanes, MOSFETs and Hay Bridges, but mostly they draw squiggly lines on paper, a bit like ancient Egyptian hieroglyphics without the storks and baboons. They then go away and build what they’ve drawn. So far, none of them have built pyramids (with one notable exception – see below).

Note: Some software Engineers believe that Egyptian hieroglyphics are ancient computer programs. They have watched too man episodes of Stargate SG-1. The only Hardware Engineers to have treated hieroglyhics as a hardware design built a replica pyramid and temple in Las Vegas. One Software Engineer is reputed to have programmed the heiroglyphs of Seti IV’s tomb into a Cray supercomputer and come up with a beta version of the Microsoft Windows operating system.


The other problem is one of attitude and prejudice. Take, for example, the old joke "How many Software Engineers does it take to change a lightbulb?" Answer: "None, it’s a hardware problem."

Such deeply ingrained attitudes of mutual contempt are hard to change while Engineer stereotypes exist. Let’s face it, not all Software Engineers spend all day, every day at a PC screen writing code! No, they spend a substantial part of each day at the PC screen playing Quake or using the Internet to communicate with other Software Engineers (or surf porn sites). And not all Hardware Engineers spend their time blowing up circuit boards and watching waveforms on oscilloscopes. Indeed, some of them have never blown up anything and never make waves. Unfortunately, they are greatly outnumbered by stereotypes of Engineers and suffer by association. The key is: never treat an Engineer as a stereotype until he’s proved to be a stereotype. This normally takes 3 minutes and clues are: sense of humour, vocabulary and proficiency with actual hardware.

A Software Engineer will hold actual hardware at arm’s length in case it bites or, marginally more likely, blows up (something which Hardware Engineers could exploit if their sense of humour stretched to it). A true Hardware Engineer is so scared of computers that he thinks it will blow up if he hits the wrong key sequence (something Computer Geeks have exploited in a series of cruel, but oddly amusing, practical jokes).

Having identified whether an Engineer is a stereotypical software-phobic Venusian Hardware Engineer or a genuine Martian Computer Geek it’s possible for inter-species communication to occur.

When Software Engineers deal with a Hardware Engineer they must remember to speak to him slowly, avoiding innuendo, jokes and jargon (except for jargon-free jokes unrelated to computers) - he doesn’t know the difference between C++ and COBOL and his mind works on the literal level so that innuendo is interpreted as a syntax error. Never, under any circumstances, insult his probes! He will be unmoved by tales of 48 hour coding marathons and any attempt to describe local area networks and the relative benefits of token rings and ethernet backbones will confuse or irritate him.

When Hardware Engineers deal with a Software Engineer the following is essential: don’t offer to show him your probes as he will think it is a sexual offer; don’t ask him to hold any hardware as hardware terrifies him – he thinks it’s going to blow up; don’t use any words which could be misinterpreted as Software Engineers thrive on innuendo and smutty jokes (it compensates for lack of reproductive success in real life) and remember that he’s probably spent so long living his virtual life on the Internet that reality scares him (he thinks Star Trek is real life).

And above all, neither party should ever suggest checking out hardware-software interfaces or doing hardware-software integration unless they take appropriate precautions (we’re not talking static-safe wrist-straps here) to prevent the accidental generation of Firmware Engineers.

Note: The last Software Engineer who tried to perform a hardware-software interface audit got the surprise of her life. She was so impressed by hardware performance that she conducted a follow-up audit 35 minutes later. She has since gone through several hardware upgrades and probably has the only software that can genuinely be described as ‘worn out’. She has worked out the mean time before critical failure (MTBCF) of the hardware as 49 hours (continuous usage). Hardware Engineers have complained that the hardware was never designed to be used in quite that manner.



The best way to communicate with a Software Engineer is by email or in an Internet chat room. The best way to communicate with a Hardware Engineer is in slow, precise language that he can’t misunderstand.

The average Software Engineer may be seen as insensitive and self-absorbed. He appears to be too busy looking for the ‘magic eye effect’ in a screenful of code to acknowledge the presence of others. The communication-effort to Engineer-response ratio makes the activity unrewarding. The following example shows why Software Engineers appear to outsiders to be insensitive due to an inappropriate frivolous response to bad news (actual case). In actuality, the displayed behaviour was their way of coping with a bad situation.

Project stresses were so bad in one company that there had been one unexplained death (unconfirmed suicide), a confirmed suicide and two nervous breakdowns (one involved attempted suicide). The reaction of colleagues was to calculate odds on who would be next to crack, who would be next to ‘top themselves’ and the most likely method of suicide.

This cold, heartless, ignorance of others’ emotional needs was in fact the Software Engineers’ pressure release valve. That’s how things work on Mars. It did not, however, endear them to Hardware Engineers. Venusians like to sit down and discuss seriously what could have driven their colleagues to such desperate actions. That’s not to say that Hardware Engineers are any more in touch with their feelings than Software Engineers. They were simply looking for a solution to the problem of suicide. The result of their soul-searching was (a) safety check all electrical equipment; (b) hide all rope and (c) lock away all poisons. Meanwhile, Software Engineers were letting off emotional steam by hanging rope nooses from roof-supports, giving each other electric shocks and joking about strychnine in the coffee. There were no further suicides. Instead there was one suspicious death, four attempted murders and thirty four ‘suspicious incidents requiring medical attention’.


You are visitor number: