Learning Through Example – Mars Rover Kata
Over my career, I’ve spent a lot of time bringing new engineers up to speed on how to break down problems, how to write better code, and how to write automated tests. What I’ve come to find out is that there are a ton of resources on how to do each of these things individually, but not very many that brings all of these concepts together in one place. The purpose of this series is to bring all of these ideas together as we solve the Mars Rover kata.
For new engineers, this kata has about the right amount of complexity to explore these various concepts and help identify things to improve on. As a team lead at SentryOne, I’ve onboard interns and our associate engineers using this kata as a launch point to teach them the tooling and processes we use. In addition, this kata serves as a method to evaluate their current skills so we can help round out a solid foundation for their career.
By the end of this series, you will have a better understanding of how to break down a problem into small, deliverable pieces while being able to write tests around new functionality. Even though there will be a lot of code to look at, none of these concepts are technology-specific so I challenge you to follow along with your tech stack of choice and see how you would implement some of these concepts in that stack.
On the topic of technologies, I’ll be using the following for my implementation of this kata. As long as you find the relevant tool for your technology stack, you should be able to follow along!
- Source Control: GitHub
- Language/Framework: C# on .NET Core 3.1
- Unit Testing Framework: NUnit
- Mocking Framework: NSubstitute
- Editor: Visual Studio Code
- Part 0 – Introduction
- Part 1 – Defining the Problem
- Part 2 – Modeling Concepts
- Part 3 – Intro to Testing
- Part 4 – Creating a Rover
- Part 5 – Rover Moving Forward
- Part 6 – Rover Moving Backward
- Part 7 – Rover Turning Left
- Part 8 – Refactoring Rover
- Part 9 – Rover Turning Right
- Part 10 – Creating a Logger
- Part 11 – Logging to a File
- Part 12 – Combining Rover and Logger
- Part 13 – Implementing the User Interface
- Part 14 – Reflection