A programming puzzle inspired by a programming career.
Professional programming involves balance between the opposing philosophies of architecture (GRASP, SOLID) and pragmatism (KISS, YAGNI).
Over-architected code front-loads difficulty to solve problems that won't necessarily ever come. Under-architected code
causes exponentially more pain with each new requirement, like a house on a bad foundation. Finding the middle ground consistently, our job, is hard.
In the real world choices we make in our codebase will always come back to us. Yet the feedback loop on decisions may be months or years.
Welcome to the garden of practice. When you make choices in this low-stakes sandbox it'll only take minutes to reap what you have sewn.
Consider this an alternative to traditional coding challenges (e.g. codility, google code jam) that challenges the traditional valuation of engineers on academic math-intensive skills.
Expert engineering is not about plugging a sequence of numbers into the OEIS; it's creative composition.
Your score is measured on productivity and efficiency. Your productivity will be measured in time; you choose how much time to
spend planning, architecting, and coding. Just like the real world, time will be your biggest foe.
However, you will also be scored on efficiency, measured by how much typing you have to do. In the real world, changing
things creates a cost on your team (PRs, test-cycles, time for your teammates to relearn your code). As an exercise in
writing simple yet reusable code, keystrokes will be counted.
Lastly, if you submit broken code a lot, you'll be penalized, like the real world. If your refactors break things, that incurs a cost on other teammates.
And just like the real world you can write tests, but like everything they cost time. You'll get to decide where to draw the line.
You won't be penalized for the following:
Copy-pasting, even if it is the root of all evil
Deleting code, navigating with arrow keys, etc
Time spent researching on stack overflow
Not writing any tests. Tests are a means; flawless code is the ends.
Good Luck! (p.s. My difficulty ratings are strict... like FTL strict)