I think about Frank Chimero’s The Web’s Grain a lot. The bicycle-bear in particular:
“Listen bub,” I say, “it is very impressive that you can teach a bear to ride a bicycle, and it is fascinating and novel. But perhaps it’s cruel? Because that’s not what bears are supposed to do. And look, pal, that bear will never actually be good at riding a bicycle.”
Frank’s talking about the (then) obsession with building scroll-jacking, headache-inducing, CPU-igniting websites, but the idea is more broadly applicable than it seems.
Most of us have a desire when faced with an unfamiliar technology or language — particularly one which at first glance seems less ‘sophisticated’ than our tool of choice — to fix it. CSS-in-JS is the poster-child of this mindset, which often stakes its claim on removing one of the language’s core strengths: the cascade. If you embrace the mental-model, writing with specificity in mind, you will rarely find yourself at war with it. SMACSS and BEM may seem unfashionable in 2021, but smart people were writing and managing CSS at scale long before
styled-components came into being.
Yet just last year, whilst working on a React Native app, I spent a week trying to get the inheritance model to better mimic the behaviour I was accustomed to from CSS. Just last month the (seemingly) glacial pace of the Go generics proposal led me to spend far too long experimenting with code-generation and reflection-based solutions for re-implementing
reduce. It’s too easy, particularly when moving freely between languages and spaces, to bring baggage, not perspective. It takes careful discipline to stop, assess the tool, landscape and culture, then re-frame the problem you’re trying to solve. If languages are indeed like instruments, knowledge is transferable only so far as being able to read the music.
That’s not to say that there isn’t value in crossing boundaries. In fact, that’s where innovation often happens — when people from one group bring concepts and ideas from a disparate place and let them percolate through, fostering new practises and ways of thinking. Yet the lasting fruits of these labours are not ports from one place to another, but evolutions that use experience to inform direction, not supplant what already exists.
We spend so much of our time fighting against the grain that we often miss the power of embracing what’s there. The next time you start down the rabbit hole, pause for a moment and think of the bicycle-bear.