Notice: This blog is no longer maintained. All new content is being published as guides/books/screencasts. Have a look around!

Programmer Job Interviews

There’s still quite a few people out there who think that a question like "how do you effectively sort data structure XYZ" makes for a good, default programming interview question. Additionally there seems to be a never ending rush to find the perfect algorithm question to weed out inapt candidates.

I wonder why we make things so complicated?

If the job is in Business IT, I’d like to know two things:

Domain-Specific Knowledge

Do you (the applicant) have any domain specific knowledge for the job? Do you know, say, how credit card payments work, how ship tracking is done? Know the ins and outs of healthcare regulations? Interestingly enough, I find this point to be most often completely ignored and undervalued.

Job-Specific Programming Skills

If you are, say, applying for a backend developer position, do you know your way around backend programming and databases. Or Web (REST/SOAP/flavour of the decade) services. Or Messaging. Or Security.

More specifically I would love to see a thorough practical understanding, not just regurgitated theory (ACID transaction properties, synchronous vs asynchronous, OAuth Basics).

And I certainly do not care about how you would balance binary search trees or implementing a breadth-first-search algorithm on a whiteboard, if that has nothing to do with the day-to-day work you are going to do.

So how to find out?

There’s really just two ways.

Either we sit together for a couple of hours and build a tiny, running (!) work-related project.

Example: If you are main job is going to be to move data from service A to B, then I’ll prepare a flaky web service for you (random 2xx, 4xx, 5xx response codes, timeouts, delays) and you show me how to consume that service reliably and how you would handle those errors and why.

Yes, practical coding is always resource intensive, but honestly imho the best way of filtering out bad applicants.

Or we have a discussion about practical, real-life problems that you are going to run into.

Here’s a piece of code that will tell you if someone has a thorough understanding of (Java) Spring database transaction handling or if they lied on their résumé stating they have had 15+ years of experience building database applications.

public class Java {
    @Transactional
    public void someBusinessMethod() {
      try {
        doStuffToDatabaseWithHibernate();
        doStuffThatThrowsException();
      } catch (Exception e) {
        logger.warn("Don't worry, can safely be ignored", e);
      }
    }
}

What’s going to happen? Will that database transaction commit or rollback? Why? Is Hibernate going to explode? Has Hibernate got anything to do with it at all? And if you mention the words "UnexpectedRollbackTransaction" or "Marked as rollback-only", here’s an instant job offer with 15% extra!

Finally…​.

Would you ask a ballerina, who’s auditioning for a classical play, to do some hip-hop or west-coast swing moves?

Or better yet, just talk about the best way of doing hip hop move XYZ?

Wouldn’t you simply want to see her dance ballet? Some basics, some advanced moves? Level of technique? Feel for the music? Presence on stage?

Why don’t we do the same when hiring programmers?