Seven stages of learning

Stage 1: The opportunity At first, you’re excited. Something shiny and new! You’ve always wanted to learn this new thing, a language perhaps, and whether through planning or circumstance, you finally have your chance. Stage 2: Unwarranted optimism So you Google for tutorials, work your way through one or two, buy a book, start a MOOC. […]

Dissecting an interview question: math is hard

For the past year or so, I’ve been asking an interview question which seems like it should be straightforward, but has turned out to be deceptively hard. The reason I like it is that it requires a candidate to convert a very common, well-defined, well-understood task from paper into code. There’s no trick, no gotcha, no […]


I’ve been thinking (again) about what it is that makes some coders special, and have come up with the following idiosyncratic, completely unscientific, my-employer-does-not-endorse-my-views classification. It should go without saying (but won’t) that not only is this graph not to scale, but that it’s a pretty scary power function as you move up the pyramid. […]

Silver Bullets

Paradigms matter. The Pythagorans killed the discoverer of irrational numbers because they didn’t fit within their world view. The Romans had a numerical system that was actively antagonistic to arithmetic, and made no significant mathematical discoveries. The Arabs, on the other hand, had much the same numerical writing system as we use today, developed the […]

Hackers and Software Engineers

Hackers are cool. Described and celebrated by luminaries such as Eric Raymond and Paul Graham, they’re the self-styled “rock stars” and “ninjas” of the industry. Indeed, who wouldn’t want to be the next Wozniak, Torvalds, Carmack, Jeff Dean? Who wouldn’t give their right shift key for entry into The Guild? Hackers are min-maxers – working […]