About a month or two ago, me and my wife got a present from friends: a 1000 pieced puzzle version of this Escher drawing:
Yesterday we decided to give it a shot.
Have a good look at this picture, 60–70% of it is shades of gray. The pieces are small enough that only a few pieces by themselves contained anything recognizable: Escher’s eyes and parts of the window in the background. After putting those together we got stuck.
Why do people enjoy this kind of thing? If you don’t have anything else to do, sure — but we had plenty of more useful stuff to do.
We decided to give up. We once again concluded what we already knew: we hate doing puzzles.
Later during the day I found this “comic” on Reddit or Hacker News or someplace. It’s about the joy of programming. In short: writing boilerplate code — boring; coming up with new algorithms — fun.
Coming up with algorithms is the programmer’s version of puzzle solving. There’s a problem, and it’s fun to come up with the most efficient algorithm to solve it — right? As the end of my PhD is approaching, and I’m looking around to see what’s next, this is what I see many interesting companies want: clever guys and gals that are great at algorithmic puzzle solving. At least, it appears that way from their hiring practices.
Do you like puzzles? So do we.
Four people need to cross a rickety bridge at night. Unfortunately, they have only one torch and the bridge is too dangerous to cross without one. The bridge is only strong enough to support two people at a time. Not all people take the same time to cross the bridge. Times for each person: 1 min, 2 mins, 7 mins and 10 mins. What is the shortest time needed for all four of them to cross the bridge?
A few weeks ago I was contacted by a recruiter from a fairly high-profile San Francisco-based startup — if I was interested in joining their team. Sure! Great! Could you please solve this algorithmic puzzle within half an hour? I failed. Hiring decision made. End of story.
I hate puzzles.
Does that make me a bad programmer? Am I a programmer at all, if I don’t like and suck at these types of problems? There are more hints that I’m not a real nerd — I don’t like science-fiction, for instance. Maybe I’m simply not the type of programmer these companies are looking for. That’s fair enough.
I’ve been programming for 18 years now. Only very rarely have I had to come up with a complex algorithm. What I like about programming is not problem solving — it’s design. How do I design an application in such a way that people will understand it? What tools can you give developers to make them more productive?
My first large-scale programming project, almost ten years ago, was YaBB. I needed forum software and there weren’t any good ones that were free. Was there anything algorithmically complex in YaBB? Hardly. Still, it was immensely useful to people and at the time very successful.
More recently I wrote persistence.js and mobl. Both products that make developers more productive. Again, the challenge here was not algorithmic at all. The challenge was coming up with an API (in case of persistence.js) and language (in case of mobl) that is both simple, powerful, flexible and useful. That’s not an easy challenge and has nothing to do with algorithms. It’s design.
Maybe I should refer to myself as software designer rather than programmer.
What does programming mean to you? Is it algorithmic in nature or not at all? Am I crazy not to enjoy puzzles?