One of the very first steps in solving a problem with code is to build a mental representation of the problem space. An engineer will ask themselves, "how do we take this real world problem, and model it to be solved in code?". Different programming paradigms can shape