Reading The Fine Manual

I’m always amazed how long people spend trying to figure out software by fumbling around with it, rather than reading the manual. Now, I know what you’re thinking. You’re thinking “Golly Martin, reading manuals is all swell and good, but I’ve got to write code and fix bugs. If I spend an hour or two reading those manuals, well jeepers, by the end of it I won’t have written a single line of code, or fixed a single bug. Not one line! I don’t have time to read them, I need to get things done!”

Continue reading

Posted in Brain Rental, Process | 5 Comments

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. Widgets

Posted in Brain Rental | Leave a comment

Concurrency ≠ Threads

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.]

Posted in Random Thoughts | 19 Comments

Should you pursue your PhD?

“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.

Posted in Random Thoughts | Leave a comment

Where are the fast dynamic languages?

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.

Continue reading

Posted in Programming Languages | 36 Comments

What I’ve Learned From Programming In Lisp

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,, and most of the U.S. airline websites, among others. The main things I’ve learned are:

Continue reading

Posted in Programming Languages | 34 Comments

Ian Simon Martin-Swader



Ian Simon Martin-Swader
joined our family
July 12, 2007 at 1:17 pm

6 pounds 0 ounces
18 inches long

Mother doing well

Father low on sleep

– Martin, Joy, Amber, Miles and Ian

#flickr_badge_source_txt {padding:0; font: 11px Arial, Helvetica, Sans serif; color:#666666;}
#flickr_badge_icon {display:block !important; margin:0 !important; border: 1px solid rgb(0, 0, 0) !important;}
#flickr_icon_td {padding:0 5px 0 0 !important;}
.flickr_badge_image {text-align:center !important;}
.flickr_badge_image img {border: 1px solid black !important;}
#flickr_www {display:block; padding:0 10px 0 10px !important; font: 11px Arial, Helvetica, Sans serif !important; color:#3993ff !important;}
#flickr_badge_uber_wrapper a:hover,
#flickr_badge_uber_wrapper a:link,
#flickr_badge_uber_wrapper a:active,
#flickr_badge_uber_wrapper a:visited {text-decoration:none !important; background:inherit !important;color:#3993ff;}
#flickr_badge_wrapper {background-color:#ffffff;border: solid 1px #000000}
#flickr_badge_source {padding:0 !important; font: 11px Arial, Helvetica, Sans serif !important; color:#666666 !important;}

Posted in Random Thoughts | Leave a comment

How to Interview A Manager

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.

Continue reading

Posted in Brain Rental | 2 Comments

Life and Death

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…

Posted in Game Design | Comments Off on Life and Death

Review of “Game Design: Theory & Practice” by Richard Rouse III

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.

Continue reading

Posted in Game Design, Review | Comments Off on Review of “Game Design: Theory & Practice” by Richard Rouse III