Every Possible Way
Part of mastering your medium is understanding the tradeoffs you make when you choose one approach over another. For a painter, that’s knowing when to use acrylic paints vs oil paints. As a developer, that’s how you make good, informed, decisions when you choosing technologies (whether it be a CMS, hosting provider, database, MVC framework, etc).
But how do you get there? It’s hard to understand the tradeoffs unless you have actually tried each of the approaches, and it’s hard to get experience with all the approaches in your day-to-day work. You’re often at the mercy of what flows down the “business-requirements” pipeline. Do you end up leaving your technical strengths to chance?
One way I’ve handled this is by taking a small topic, and exploring every possible way to accomplish it. Several of my recent projects have done this:
- Logo Experiments is an exercise in finding every possible way to display a logo visually on the web.
- Bouncy Ball attempts to build a bouncing-ball animation using all the major web-animation techniques and libraries.
Other great examples of these kinds of projects include the hello-world repo, and TodoMVC.
All these projects are exercises in constraint-based learning and can be a lot of fun (which isn’t always the case for this kind of deliberate practice). What technologies or techniques would you like to understand better? Would you benefit by exploring every possible way to complete an unfamiliar task?