Programming is like an analogy

I have a one-liner I like to whip out whenever someone tries to explain what programming is “like.”

Programming is like an analogy.

(This is a joke about recursion. See also GNU’s Not Unix”)

Anyway, I spent a little while thinking about my last post, and the generally imprecise nature of analogies. People who create things for money — which is to say that the things themselves are worth money, not only that we make money while making the things — we do all the things other people do during the day, and then this Other Thing on top of that. We pitch sales and plan projects and analyze data and present slides just like other office workers, but in smaller proportion. And then we have to build. Not everyone builds. So builders speak, if not very competently, the language spoken by other office workers. The breadth of experience in a web shop is asymmetrical. Many Finns speak a little English, but few Britons speak any Finnish.

But if you haven’t built a thing intended to make money, and seen it soar or bomb, can you know what it feels like? That’s my goal here, to project empathy. Do you remember what a pain in the ass term papers were? Day after day, my job feels like writing a never-ending term paper upon which the entire organization depends. Sure, I could be replaced by another builder, or an outside contractor. But someone will have to write the term papers that make the shop money, and it will behoove anyone working with those people to empathize with the feeling of building. That’s all.

But I lovehate creating things all day, even blog posts, so I’m gonna worry this analogy until it breaks.

(making web things) : (writing term papers) :: (mowing the lawn) : (cleaning the kitchen)

“Making web things” isn’t particularly like “writing term papers;” it’s about as much effort as writing term papers. They are both tasks that require focus and concentration, and which carry over a non-trivial period of time. This is a little like saying, “mowing the lawn is like cleaning the kitchen.” They require approximately equal physical and mental effort, but I can’t ever recall bringing a lawnmower into a kitchen. (Personally I like mowing lawns more than I like cleaning the kitchen.)

How making web things is actually like writing term papers

  • The only things you really start with are a goal and deadline. Figuring out what to do is the first task after that.
  • Usually you have to figure out what to do and how to do it as you are doing it.
  • Any worthwhile product will almost certainly take more than 8 hours of actual concentrated effort.
  • Under the right conditions, you can pound out a major component of a project in a few highly productive hours. (I wrote the outline for my thesis over a long breakfast at the Glenwood Café in Eugene.)
  • It takes at least 90 minutes to create those conditions. It takes about five minutes to destroy them.
  • At an arbitrary point, adding collaborators actually delays progress.
  • Lateral effort — for example writing a blog post, or running a sync script, or taking a walk — is a necessary component, during which new productive lines of thought might emerge.
  • The ratio of lateral to direct effort rises with the unfamiliarity of the problem.
  • Through sheer cussedness you can grind through a project under suboptimal conditions, but it will take magnitudes more time and effort. And if you think the end product is just as good, you’re kidding yourself.

How making web things is not really like writing term papers

  • Web things are worth real actual money.
  • Even relatively insignificant web things will be seen by thousands of people. At some point you throw a switch and your web thing is live on the Internet throughout the entire universe.
  • Bombing on a term paper only has consequences for one person: you. Your web thing is not about you, or even about your job. The Internet doesn’t care about your job. It doesn’t care how much time you put into your web thing. The Internet only cares about your web thing.
  • The Internet is the meanest professor ever. The Internet doesn’t care which family member died. The Internet will never hear your excuses. The Internet won’t grade you up for hard work. You can’t kiss the Internet’s ass for half a grade point. You can’t fake your way through your web thing’s presentation. It is very very hard to bullshit the Internet. You take the Internet’s grade and move on.
  • The Internet never takes summer vacation. Your projects are due all the time, not just during one dreadful week every three or six months.
  • Web things are always “incomplete.” As soon as you finish writing your web thing you go back to the beginning and start writing it again. If you stop writing it, it will bizarrely continue to write itself. It’s “delivered” when you quit working on it and it’s “done” when the link goes dark. Otherwise it is there, unfinished, forever.