Metaphors I use to describe software development.

Tuesday, April 20, 2010 :: Tagged under: pablolife. ⏰ 2 minutes.

Hey! Thanks for reading! Just a reminder that I wrote this some years ago, and may have much more complicated feelings about this topic than I did when I wrote it. Happy to elaborate, feel free to reach out to me! 😄

Programming is Magic


You don't have to be much of a fantasy fan to have a conception of magic and wizards: with curiosity, hard study, and diligence, you can perform taxing and exacting actions to do something marvelous. After studying until you're old enough to have a white beard, you perform some sequence of actions that will turn a man into a toad.

We have magic, and it's programming. After much study, you can perform a very intricate mental task (the code a programmer produces is just an artifact of a much richer process) which yields impossible fruit.

And like magic, you have to do it just right. Compilers will annoyingly tell you it's Wingardium Leviosa, not Wingardium Leviosaaaa! The worst are spells that pass, but work incorrectly. You may end up spitting slugs.

Programming is the new literacy


It's very recent that reading and writing are expected skills, which we believe everyone has a right to learn. For hundreds of years, it was only scribes who could do it. The writing systems were themselves complex, it required privilege, education, and training before you could put anything to a tablet (and you lived very comfortably for it).

Somewhere in the last few thousand years, it's a basic skill everyone is expected to have. Knowing how to read and write isn't enough for a competitive, skilled job. You need to know how to write to even apply for one.

Programming is very new, and we're in the cave-painting phases of it. Long after I'm dead, programmers will look at today's languages and wonder how we bothered to endure it.

And like reading, once you learn it, worlds and worlds of intellectual exercise and stimulation open up as a result.

I'm with the authors of How To Design Programs in that I believe everybody should learn to design programs, just as we expect them to learn to read and do math.

On imperative vs. functional

Most programmers are imperative programmers, which I like to think of as boxers. They punch very hard, and very well. They have giant upper bodies, mean biceps, and when an obstacle presents itself, great programmers can take it down with a sustained set of punches.

Sadly, most boxers are a little brutish: there is an established and valuable boxing theory which consists of more than just punching hard. But few boxers take the time and discipline to learn it. Most will just punch as hard as possible, as close to center as they know. Boxers who study on the theory tend to be marvelous in combat.

In this world however, are people who do things a little differently. Functional programmers are mixed martial artists. At some point they got tired of punching, and learned to grapple. Learned to kick. They can still punch, but its not their favored solution, and for many their arms aren't quite so beastly for lack of practice.

Boxers judge the mixed martial artists using tests made for boxers, and deem it unworthy. When allowed to use pressure points or grapples, the mixed martial artist will generally win, but most spars are set to boxing rules.

But in the world of big biceps, a few boxers get curious, and wonder what the other side can teach.

Thanks for the read! Disagreed? Violent agreement!? Feel free to drop me a line at , or leave a comment below! I'd love to hear from you 😄