The biggest problem with programming is that we don’t agree on what the problem is. The comments on the previous posts reveal fundamentally incompatible views. I am equally shocked by the opinions held by some distinguished academics and leading practitioners. Our views of programming are so at odds that it’s almost as if we were from different planets. Wait – that’s it! It all makes sense now…
I suspect that many programmers and computer scientists are Vulcans. You see, on Vulcan, programming is a form of applied mathematics. All software is precisely specified using logic and mathematics. What’s more, these formal specifications rarely change. So programming is like proving a theorem, and Vulcan programming languages are like mathematics. Vulcans prize elegant programs, and because the specs don’t change they can refine and polish their programs to perfection. Adding a level of abstraction is always worthwhile if it shortens the program. Vulcans don’t use debuggers, because errors are a sign of a flaw in reasoning, and it is better to puzzle out the root mistake than to make ad hoc fixes. Dijkstra must have been a high priest or something back on Vulcan.
Vulcans are renowned throughout the galaxy for their compilers and algorithm libraries. You would be crazy to use a non-Vulcan regular expression engine. But they are equally as famous for their terrible user interfaces, where they lack objective metrics to optimize. And don’t ask them to build something without first having a precise and complete specification, unless you’re into that nerve pinch thing. Luckily for the galactic software industry, there is an even larger community of programmers who originated on the Planet of the Apes.
The Apes aren’t into mathematics and logic. Instead their passion is for socio-economic-grooming systems of unrivaled intricacy. Galactic anthropologists are baffled by the incredible complexity of Ape society. There are no written rules, and the rules are continually evolving, yet Apes can simultaneously fulfill a dozen different roles without breaking their rules. On top of this, the Apes have integrated software throughout their society. All sorts of automated systems play central roles: communication, entertainment, accounting, manufacturing, distribution, you name it. All these systems exist primarily to interact with Apes in their informal shifting social games. So there are no formal specifications, nor can there be any. As a result the Apes have developed a style of programming inconceivable to Vulcans. Their software is constantly being redesigned, so they make it as lightweight and clear-cut as possible. The Apes can’t prove their software is correct, and they seem puzzled by the very idea, as if they were being asked to prove correct a chair. However they design amazing user interfaces that harmoniously blend cognitive, artistic, and emotional significance. Much like the Apes themselves do. Their systems are imperfect and provisional, but they are forever fixing and improving and transforming them at a furious pace. For these qualities, Ape programmers are highly prized throughout the galaxy. If the purpose of your system is to interact with sentients in a social or economic context, you get an Ape to program it. Using Vulcan tools.
The Vulcans and the Apes despise each other. The Vulcans believe the Apes are too stupid to think abstractly, which is the essence of programming. The Apes believe the Vulcans are crippled at communication, which is is the essence of programming. My doom is to be torn between these irreconcilable opposites. For I am Vulcan, and was raised Vulcan, but I married an Ape, and made her planet my home. I will not know peace until I find a way to combine the best of both worlds.