These exercises are designed to show us how you approach writing software that will be used and maintained by others. They are to be written in Python, but aren't intended to demonstrate a deep knowledge of that language or any particular tooling.
When completing an exercise, please focus on the following:
- Write code for other people. What will happen when (not if) you rotate off this project and someone else has to maintain your code?
- Make the code easy to deploy anywhere. Assume the person grading this has no more than 5 minutes to get your code running.
- Embrace constraints, but assume they are not static. Use design patterns that make your code easy to change.
In particular, we would like to see:
- A README that explains to a non-programmer what the software does and how to use it. (It's OK to assume they will install Docker locally and run the app from the command line.)
- Strong, consistent coding style.
- A modular architecture.
- Well-named classes, modules, methods, and variables.
- Complete docstrings that contain enough information for a user to call the code.
- A
__main__.py
file that follows Python conventions. - Unit and integration tests that convey intent.
- Containerization of your app using Docker.
- Use of appropriate off-the-shelf libraries for the tasks at hand.
- NO notebooks.
- The exercises aren't intended to be difficult, and you shouldn't spend more than 10 hours.
- Start with a complete but minimal implementation (e.g., a walking skeleton), and fill in the details. Focus on the non-trivial parts first.
- You'll do better if you submit an incomplete solution that touches on each of these guidelines than if you submit working code that doesn't.
- One good docstring or unit test is better than complete coverage with perfunctory ones.
This repository has two separate exercises depending on the role:
Your recruiter should have told you which one to complete. If you are unsure about anything, please ask!
Good luck!