Recurse Center

Pairing interview tasks

The goal of the pairing interview is to get a sense of what it's like to work with you. Pairing interviews only allow about 20 minutes for programming, which isn't very long, so we provide task suggestions to help you choose something well-scoped - but feel free to get creative!

Tic Tac Toe game

Before your interview, write a program that lets two humans play a game of Tic Tac Toe. The interface can be terminal-based or a full GUI. Players should be able to take turns making moves, and the program should report the outcome of the game.

During your interview, you'll pair on extending the game in a way of your choosing. For example, you might add support for a computer player to your game, starting with random moves and then making the AI smarter if you have time.

Lisp parser

Write code that takes some Lisp code and returns an abstract syntax tree. The AST should represent the structure of the code and the meaning of each token. For example, if your code is given "(first (list 1 (+ 2 3) 9))", it could return a nested array like ["first", ["list", 1, ["+", 2, 3], 9]].

During your interview, you'll pair on writing an interpreter to run the AST. You can start by implementing a single built-in function (for example, +) and add more if you have time.

Space Invaders

Write a game of Space Invaders that has computer-controller enemies that move left and right automatically and a human-controlled player that you can move left and right with the arrow keys.

During your interview, you'll pair on adding more functionality to your game. For example, you might add the ability to shoot bullets at the enemies and track your score.

Database server

Before your interview, write a program that runs a server that is accessible on http://localhost:4000/. When your server receives a request on http://localhost:4000/set?somekey=somevalue it should store the passed key and value in memory. When it receives a request on http://localhost:4000/get?key=somekey it should return the value stored at somekey.

During your interview, you'll pair on improving your server. For example, you might decide to save the data to a file; you could start with simply appending each write to the file, and work on making it more efficient if you have time.

Symbolic differentiator

Write a symbolic differentiator for polynomial expressions of one variable.

During your interview, you'll pair on extending your program. For example, you might add pretty printing to display the results in a more human-friendly format or extend the code to handle more complex expressions.

Your own project

If you have an existing project that you are particularly excited about working on for your pairing interview, you can submit that. If you choose to use your own project, please come prepared with a specific task (a bug, small feature, or refactor) that could reasonably take about twenty minutes to work on with someone.

Common failure modes to avoid with this option:

  • Choosing a project that requires too much background knowledge or context to get your interviewer up to speed in only a few minutes. If you can't sufficiently explain the project in under 3-4 minutes (and then start writing code with your interviewer), it's not a good choice for this interview.
  • Picking a task that's too simple. Our goals for this interview are to understand where you are as a programmer, how you write code, and how you work through problems. If you choose a task that only requires writing one or two lines of code or which you can complete in just a couple of minutes, we likely won't learn what we need to learn from the interview to admit you.
  • Not properly scoping the task for the interview. This can be hard, but if you're not sure what would be a good task for a twenty-minute session or whether you'll be able to get to programming with your chosen task, consider choosing one of the suggested tasks above. You should read through them anyway, to get a sense of what's feasible to get done during the interview.

Can I use AI tools in my interview?

It depends! Read more about this here.