Finding A Job You’ll Love: Recruiters

Ah recruiters. If you understand their motivations and find a good one, they can work wonders. But the average and bad ones can be worse than searching yourself.

When looking for a job, you should definitely search on your own through websites like and But you should also work with a recruiter. They can find jobs that you wouldn’t find, that aren’t even listed. And what’s more, they can help you understand how employers will view your resume, and when talking to companies they can help explain away any red flags. They can sometimes even give good career advice, if you know how to filter what they say.

The key to working with recruiters is to understand their motives. They’re middle men who are paid by commission, like used car salesmen and real estate agents. They’re paid by the company that hires you, and are paid 1 – 3 months of your salary, as far as I can tell in Boston.

You might think that, because their commission will go up if your starting salary goes up, they’ll negotiate a good one for you. But even if they negotiate a $5k/yr increase, they’ll only see ~ $1k of that. If they spend that time finding someone else a job, they’ll get a whole other commission, ~ $10k+.

So they try to close as many deals as possible and ignore the quality of each deal. To maximize their income, the bad ones will rush you into the first employer that will hire you. They also spend as little time on each deal as possible, and generally just do keyword matching: “This job requires XML, and you have XML on your resume, so it’s a match!”

The good ones will want to cultivate a long term relationship with both you and the companies they work for. But keep in mind, even good recruiters are generally non technical and don’t understand any of those acronyms. And both good and bad recruiters will only get you an offer from a single company, which really reduces your ability to negotiate.

Plus, each recruiter only represents a fraction of companies in your city. Google, for example, doesn’t work with any recruiters. So you always want to search on your own, even if you’re using a recruiter.

When you first talk to a recruiter, describe what you liked and didn’t like about past jobs. Then ask them for career advice: what sort of job do you think I’d enjoy? At what sort of company? What’s a possible career track for me for the next 10-20 years? Why? Listen to their thought process. The bad (including average) recruiters won’t have thought about such things, so they’ll say something generic. Treat them like another job web site: they’ll send you job ads and that’s about it.

How do you find a good recruiter? The best way is probably to ask your friends and co-workers. If you post your resume on job web sites, they’ll contact you, and you can try the test above to see if they’re any good.

In the end, the best strategy is to look for jobs yourself and work with a good recruiter. Just make sure that you do a thorough search on your own before you talk to a recruiter. One of the first thing’s they’ll ask you is what companies you’ve applied to. Once you give them that list, if you discover a company they work with, you need to go through them.

Posted in Brain Rental | 4 Comments

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