- But I also knew, and forgot, Hoare’s dictum that premature optimization is the root of all evil in programming.
- — Donald Knuth
Something bizarre happened on the Groovy-dev mailing list the other day. Alex Tkachman made what I thought was a simple suggestion: since some rarely used features of the language make it slow, we should have a keyword or annotation which says to the compiler, “Hey there, compiler, I’m not using those features in this code, so please give me the faster code.” I had expected the others to debate the pros and cons of the idea, but instead, they couldn’t quite understand it.
They kept saying you’d need to check that the features weren’t actually used at runtime. I suggested the checks could work like assertions: have them on while testing, but off when performance mattered. But that didn’t seem to sink in. At one point, they even said that turning off these features would “betray” the core values of the language.
Two years ago I landed a job at ITA Software, which Paul Graham called one of the “ten or twenty places where hackers most want to work,” along with Google. And one of the interesting things about ITA is that the majority of their software is written in Lisp.
Now before starting there, my experience with Lisp was about the same as most CS grads. I’d used it as an undergrad in a programming languages course, as well as an AI course on natural language processing. And my thoughts about it were pretty standard: it’s a functional language, so if you’re going to use it you’re best off doing recursion and avoiding assignment statements; and dynamic typing and garbage collection make it slow.
Boy, was I wrong. It turns out, Lisp is a lot more practical than that, and we use it for the search engine that powers Orbitz.com, Kayak.com, and most of the U.S. airline websites, among others. The main things I’ve learned are:
There’s been a lot written about interviewing programmers, and about good management, but I couldn’t find anything about how to interview managers. So I’ve been looking into it and thought I’d write up what I’ve learned so far.
First of all, some things not to do. While you might want to lead with a big, open ended question (“What’s your management philosophy?”), you don’t want most of your questions to be like that. That’s because while some people are reflecitve and think explicitly about what they do, there are others who are “naturals.” The naturals have good instincts about how to handle most situations, but they may never really have thought about what they’re doing or tried to put it into words. So instead, you want most of your questions to be scenarios.
There’s a great old game I remember for my Amiga, called Life And Death. The WHDLoad download has the manual and solution, but not the game itself. I found the PC version at a number of abandonware sites, including:
The beeper codes and solution are available from the XTC Abandonware site, and I’ve mirrored them here.
Actually, that XTC site has a bunch of games, including old Infocom games like “A Mind Forever Voyaging.” Cool.
I’d still love an Amiga version…
I’m evaluating books on game design as potential texts for a game design course at Union College and also perhaps RPI. The first book I’m looking at is “Game Design: Theory & Practice” 2nd edition by Richard Rouse III.
Overall, I like it. He mixes high level ideas with both analysis of specific games and interviews with game designers, and talks a lot about nuts and bolts. For example, there’s a chapter on the design document, and another on documentation in general. There are also two appendices of example design docs, one for a hypothetical game, the other for The Suffering. He also takes a historical perspective, analyzing Centipede and Tetris along with The Sims and GTA III.
Does anyone have a good distribution for characterizing the number of ratings per customer? Graphing the histogram log-log (where the vertical axis is density, not count) it’s clearly not the straight line implied by a power law:
The red line is the gamma distribution fit by the method of moments. It’s way too high on the left, and way too low on the right. Can anyone think of anything better?
This thread on the Netflix Prize forums: