Your pairing interview
For your pairing interview, you'll share your screen and pair program with one of us on some code you've written. The process is as follows:
- Before your interview, write a program that fulfills one of the programming tasks below. Use a programming language you are comfortable with.
- Put your code in a Gist or a public GitHub repo.
- Submit a link to the Gist or repo using the form below.
- On the code submission confirmation page, book your pairing interview.
- After you choose a time to pair, read the screen-sharing instructions and make sure you have the appropriate software set up for your interview.
- Before your interview begins have your code running and ready to go, so that you can spend the interview programming.
Our goal in this interview is not to get the task done; what we really want is to see what it's like to work with you. This is easiest if you select a task which is within your abilities but not trivial for you. A few things to keep in mind while choosing a task:
-
Walking us through a problem you know cold tells us nothing about how you debug, test, take suggestions, think about design, or act when you're confused.
-
Conversely, attempting an overly large or complicated task might mean that we don't get very much code written, which also makes it hard to get a read.
-
Preparing for the interview is not cheating! We expect you to come in with an idea of how to proceed; if you want to choose an interesting task and read up on it first, that's totally fine, but...
-
Please don't "practice" by implementing or memorizing the solution in advance - we've seen people walk through pre-written code before. While it's not a dealbreaker in itself, it makes it much harder to get the information we need to feel good about admitting you.
Read through the tasks below even if you intend to submit your own project; they're good examples of what's feasible to tackle in 20 minutes. Remember you will need some extra time to acquaint your partner with your code, so please think about how to do this in advance.
Programming 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.