Throughout the entirety of the interview:
- Be friendly
- Be talking. Especially when you are not sure what to do next, or, are thinking about what you will do, you need to be sharing these thoughts with your interviewer
- Be using eye contact to check in with your interviewer
- Be honest (about what you've done, what you don't know)
- Be enthusiastic about a challenge
- Be a delightful coworker
When given a programming challenge to solve:
- Consider the amount of whiteboard space you have to work with
- Define inputs and outputs (at the top left corner of the whiteboard)
- Ask if there are any constraints, especially around inputs and time/space complexity(make note of them below the inputs and outputs)
- Try to identify edge cases
- Visually / spatially work at a solution on the whiteboard
- Write down "rules to the process" as you discover them
- Test out your visual representation, and rules, with some inputs (aka test cases)
- Try to break your visual representation, and rules, with edge case scenarios
- Pseudo code out the solution (feel free to use fantasy functions), always mapping directly from your visuals
- Revisit and iterate on your visuals if you find your pseudo code not mapping directly
- Write actual code (feel free to use fantasy functions), always following your pseudocode precisely
- Revisit and iterate on your visuals and pseudo code if you find your code not following precisely
- Always return to the whiteboard when you find yourself needing to "figure something out" that you have not already explored, such as the details of a fantasy function, or an unforseen aspect of the problem