by Blagovesta Pirelli
Hardware is hard - it is close to physics. It is predictable, it has its rules. There are some surprises but do you remember a time when silicon has decided on its own to behave like some other element from the periodic table?
Software is soft - it is close to the human brain. It is unpredictable. It looks more like a Van Vogh painting - it is beautiful only if you “know” how to look at it. Appreciation for software is an acquired skill and the beauty sensor develops over time.
How many times have you find yourself looking at someone else’s code just to ponder what this person was thinking when they named their variable ARV (later you discover it stands for A Random Variable)? Looking at code is almost equivalent to skimming through a personal diary. It’s a map of a person’s brain. And we often have to reverse engineer not a set of instructions but Steve’s neuron networks. Honestly, someone should start diagnosing mental disorders based on our code (hopefully it will be far into the future and no one will ever look at my source files).
Code captures the collective or individual dillusions we hold dear. Code is the ultimate truth. We can’t fool the compiler. The compiler doesn’t care the user didn’t specify the input range, the compiler will just throw a big fat error (don’t ignore those, please!).
Do you remember the ancient rule of thump - if you can explain something to another person, you know that something well. Now we level up the complexity - you don’t explain to a person, you explain to a machine. Do you understand well enough to explain it in code?
If we understand something well enough, we are able to code it. If not, then we just create a mess of unsubstantiated assumptions that our binaries constitute. And once our imagination embodied in the form of software reaches the users, the reality clash leaves little intact. Brace yourself for code delirium is shattered. Some of the people, who had already stated how hard software is, are: Donald Knuth, Fred Brooks, Alan Dijkstra. Many more support their view (resources below).
What were the lessons I learned from so many years of intensive work on the practical problem of setting type by computer? One of the most important lessons, perhaps, is the fact that SOFTWARE IS HARD. From now on I shall have significantly greater respect for every successful software tool that I encounter. During the past decade I was surprised to learn that the writing of programs for TeX and Metafont proved to be much more difficult than all the other things I had done (like proving theorems or writing books). The creation of good software demands a significantly higher standard of accuracy than those other things do, and it requires a longer attention span than other intellectual tasks.
—Donald Knuth, Keynote address to 11th World Computer Congress (IFIP Congress 89).