I Hate Puzzles: Am I Still A Programmer?

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.

Facebook:

Do you like puzzles? So do we.

Google:

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?

Got something to say?
  1. At Google there is definitely room for softer designers. The odds that you will get a interviewer asking you to design an API rather than algorithmic problems are probably closer to 1/3 than to 2/3 though.

  2. Funny. Puzzles like the one you described from Google are what makes programming fun to me (I’ll have some fun trying to solve it tonight ;). But definitely not all people developing software are like that.

  3. Mikko Larjava says:

    And trying to come up with a good design is not a puzzle?

  4. Rnm says:

    I’m with you. I find puzzles tedious, esp. when it’s solving a problem that’s already solved; I feel like a rat in a maze. As you say, design is a different problem, and most of the work I’ve done in twenty-odd years is about the latter, not the former.

  5. Bong Munoz says:

    Puzzle solving and design, to me at least, are different skills. The former requires analysis the latter synthesis. I’m not a good puzzle solver myself and am happier with design. However, debugging isn’t that onerous to me. The big difference between debugging and this kind of puzzle is feedback. I definitely know if I’ve solved a bug; I don’t get the same feedback from puzzles.

  6. Brent says:

    Check out the program manager position at Microsoft. What they are looking for is technically experienced designers. So far as I know, they ask very few algorithmic problems, and many design problems during the interview process.

  7. Justin says:

    Clever, but design != puzzleSolving.

    Unless of course you describe everything in life this way. I suppose you could ask “And trying to come up with a way to survive day to day is not a puzzle?” and a few people would nod appreciatively.

  8. sky says:

    oh boy, the old 12134212 question… doesn’t tell you much about someone who can answer it… well, maybe it tells that the guy likes puzzles.

  9. Jonathan Edwards says:

    Zef – well said. I hate puzzles too. It is an immature and self-indulgent attitude towards programming.

  10. Chris M says:

    Super article and it’s not the first time I’ve heard someone talk about this exactly. I’ve been programming for about 18 years as well and I too dislike puzzles, especially puzzle-piece puzzles. To me, it’s a different sort of problem solving, understand code to the level that you probably do allows you to solve puzzles and problems in a medium that you’re familiar with. If you’re given a code puzzle, I reckon you’ll solve it, regardless of its level of difficulty, but get given one of these silly word puzzles, you fall apart. Completely understandable. The satisfaction of solving a programming puzzle is far more enthralling than a word puzzle anyway. Poor start up though, by the sounds of things they missed out on a great possible employee.

  11. Dick says:

    fuck all puzzles

  12. Anonymous says:

    What does solving puzzles have got to with programming? How is mindless detail seeking simila…ah I see what you did there.

  13. Anon says:

    Fuck google, facebook and all other startups that think we all must love puzzles to get a job doing stupid CRUD shit, its because of them that we get these stupid questions nowadays, to all the hiring managers of all these companies: FUCK YOU.

  14. Winfield says:

    This is always a touchy subject, since every engineer declaims any interview test they fail.

    At the same time, hiring for Software Engineers is a sad state of affairs where the interview process doesn’t closely reflect the work you’ll be doing. I’ve been asked to solve graphics transformation algorithm problems for web applications jobs. Many of these puzzles fall into the same category.

    We can only hope that more companies pick up interview practices that more closely resemble the work and the skills they are hiring for. Designing software, writing code, and working with people to get things is a very rough tangent to solving puzzles.

  15. Puzzles are fun when they are not used to judge a person’s value and compatibility at a certain institution. Once they are used as measuring sticks they become less fun. By the way, most of the puzzles you are likely to encounter during programming interviews follow a pretty standard template and can be solved by either backtracking or by some variation of dynamic programming and people who do well are simply the ones that have practiced doing these types of problems and usually it has no bearing on how good of a programmer they are.

  16. Andrew says:

    I suspect you may want to aim for an earlier stage startup. A company which hasn’t yet gone public or been acquired may still call itself a “startup”, but may hire like a big company. At an early stage startup, someone who can write working software is worth their weight in gold.

  17. Anonymous Redditor says:

    Awesome, You Nailed it!

  18. Jayanthi Rangarajan says:

    Just took a look at the Facebook puzzle set (I tend to work on a bunch of Project Euler problems, although many of them are too much math, too little programming for my taste).

    The Facebook puzzles are each a page full of description. That’s what I’d expect from a bunch of 24 year olds without any other priorities. When you get a little more experience, you respect other peoples’ time & learn to be concise.

    If you can’t state your puzzle problem in 2-4 sentences, you’re a moron, or your puzzle is crap.

  19. Greensnake1965 says:

    From now on refer to yourself as a “Software Developer” which includes both design and programming and then some. Don’t call yourself a programmer only or a designer only, doesn’t work. Also do not call yourself a “consultant” as many agencies may do. By what you have described you are one of the rare few that lean towards design as the upfront issue in developing software. Design is an art form and when the designer (artist) and the technical (programmer) are one person, the odds are you will end up with a piece of software that is tight, sensible and realistic. It’s people like you that end up making great software products.

    Programming vs Puzzles? Bah, Puzzles have a few techniques or the allowance of a little inventiveness to get the job done but in the end, it always looks the same and is static. Software development is about striving for that perfect, realistic marriage of art and technology. If you get it right, it’s something very amazing and your customers will sure tell you about it in their own words.

    You are a Software Developer. It’s accurate, and has that right amount of modesty.

  20. CD Adams says:

    Amen, brother! I love programming because I like solving real world problems. My favorite programming task involves creating something that makes someone’s life better in some way today. The last thing I want to do is work on an manufactured problem that, if unsolved, would make no difference to anyone.

  21. JavaGuy says:

    I recently had an interview where I was asked to solve a puzzle. I had to correct the interviewer when he asked a stupid question about indexes in an Oracle database. Any junior programmer should have known that. There are so many wanna be Google engineers out there. They don’t know the basics but they want to invent a new algorithm.

  22. John Bailo says:

    The thing about most puzzles is, someone else already knows the answer.

  23. Macyou says:

    Although I hate puzzles too, I still have a try for this puzzle. First time: 1 + 2 = 3 minutes (2minutes go, 1minutes back) Second time: 1+ 7 = 8 minutes (7minutes go, 1minutes back) Third time: 1+ 10 = 10 minutes. 10 minutes go, no back The total time might be 3 + 8 + 10 = 21 minutes. Is that right?

  24. Tom Jiang1987 says:

    agreed exactly

  25. Kevin Lin says:

    @32e0b3a4bfe6a21afca94009c2cb3c82:disqus

    Best I got was 17: => 2 <= 2 => 10 <= 1 => 2

  26. Adeel Ahmed says:

    I used to defeat the young people in video games,jigsaws,checkers when I was in 7th;but I was weak at studies at that time.Now I am Computer Systems Engineer and my field is Software development.I became good at studies when I tried harder in that area.Simply hard work and nothing else.A developer is already engaged in his family life and job related stuff.I think puzzle solving is the way to humiliate developer.What I was asked in one of my early and very good interview was simple.Use GridView,bind it with data,enable paging and sorting,then perform string operations such as sorting,reversing,use arraylist add items and loop through each within 1 hr 20 mins.Then interview : What is the difference between C@google-282aa1d6ec3578b48962658be0753479:disqus   and Vb.Net.What is client script and server script.Difference between dataset,datatable,dataadapter and datareader.What are the different types of joins in SQL statement.How many type of keys are there. This is the way to judge.If you give  cricket bat to Bill Gates and programming book to Shane Warne what they will do

    “Everybody is a genius. But, if you judge a fish by its ability to climb a tree, it will spend its whole life believing that it is stupid.” ~Albert Einstein

  27. Steve says:

    I see your misdirection here – you’re focusing on puzzles, and then you slip in that thing about not liking science fiction. That’s the give away. You can’t possibly be a geek if you don’t like sci-fi.

  28. Ryan Hackett says:

    You’re not crazy or a bad programmer. Some people, some software developers that is, just want to get shit done! Instead of being given contrived puzzles to solve for gratuitous reasons, I feel much better tackling real world problems which require some element of practical knowledge application. For me, this still holds true even for hobby projects I work on.

Trackbacks for this post

  1. The Job Interview Question, Part 2 | Possibly Wrong
  2. 我讨厌难题:我还是程序猿吗? | 程序猿
  3. On Interviews « I am Zef

Comments are closed now.