07.22.08
Introductory Books on Web Testing
Someone at work asked for introductory books on testing, that would help them test our web site. I think these are the best, and thought I’d have some fun with Amazon’s web widgets.
Inspiring lunatics, tainting meats
Someone at work asked for introductory books on testing, that would help them test our web site. I think these are the best, and thought I’d have some fun with Amazon’s web widgets.
Here’s a conversation I seem to be having over and over these days:
Someone else: Computers are getting more and more cores. So, we need to thread our software to take advantage of them.
Me: But threads (the Dijkstra style shared-state-with-locks-and-mutexes-and-semaphores-oh-my variety) are almost impossible to get right, and when they’re used in other than the simplest way, its easy to get random deadlocks that happen every few months/years.
Someone else: Computers are getting more and more cores, so we need threads.
Me: But there are other forms of concurrency. Processes that communicate using files, pipes, sockets, or even shared memory. Or software transactional memory (hell, people use databases for IPC now, so STM can only be better), or message passing.
Someone else: … ?
A few days later:
Someone else: Let’s talk about how to multi-thread our code.
Sorry people. As Sutter and Larus say:
“humans are quickly overwhelmed by concurrency and find it much more difficult to
reason about concurrent than sequential code. Even careful people miss possible interleavings among even simple collections of partially ordered operations.”
And as Edward A Lee says:
“[Threads] discard the most essential and appealing properties of sequential computation: understandability, predictability, and determinism.”
[Clever summary encouraging people to understand concurrency more closely.]
“A PhD is a big, multi-year project. You really learn self-reliance, how to budget your time, and how to motivate yourself,” says Martin Martin, a senior software engineer with a PhD in robotics from Carnegie Mellon University.
From Should you pursue your PhD?, an article that includes a couple different paragraphs from yours truly.
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: