Programmer Zef Hemel recently made a confession, aptly titled I Hate Puzzles. In it, he confesses to a deep loathing for the recruitment come-ons that read “Do you love puzzles?” and even more for recruitment ads that are puzzles. He says, eventually, that he and his wife agreed they don’t understand why people do puzzles. “Sure, if you don’t have anything else to do. We had plenty more useful stuff to do.”
And while I enjoy video games, and especially enjoyed the puzzles within the Portal series, in general I avoid the kind of puzzles found on the average bookshelf or in the average game store window display. Not just jigsaw puzzles, but sudoku, crosswords, the whole gamut of paper-and-pencil puzzling that seems to take up some people’s entire commutes.
Zef then says that he doesn’t care much about algorithms. Algorithms aren’t at the heart of programming: design is. Coming up with a syntax, a domain specific language, an API, that reduces the friction between what another developer wants to acheive and the computer’s capability to achieve, are at the heart of almost all that he does.
And he’s absolutely right.
If I want a word puzzle that’ll increase my vocabulary, I’ll write a fucking novel with my thesaurus and my mind open. I’ll delight in solving the puzzle (yes!) of making sure the characters are three-dimensional, the plot is consistent, the foreshadowing is appropriate, the guns on the mantlepieces have all been fired or elided or revealed to be red herrings. I will hope to make someone else’s day sexier, happier, thoughtful, and delightful.
If I want a brain-teaser, I’ll spend my days trying to understand monads, write tools that let users write tests to a database more efficiently, or (my current unreleased project) write my own goddamn programming language. I will solve not just a puzzle, but a problem. I will hope to make someone else’s day easier, more interesting, and more effective.
I won’t write experimental novels, messing with the structure to produce quasi-lyrical novel-like works, although I admire writers who try that. I don’t have to create new algorithms for my programming language; transducers, scope, homoiconicity, Hindley-Milner, pattern-based dispatch and automatic currying are solved problems; I just want to put those puzzling pieces together in my own idiosyncratic way and hope to learn something about how programming languages work as I do, to make myself a better programmer and to give myself tools for the project after that.
I am a novelist who doesn’t do crosswords. I am a programmer who doesn’t enjoy sudoku. And I don’t do those things because I have much more interesting things to do with my grey matter.