The Tao of just-in-time coding
The uncarved block... of code
I have long advocated for just-in-time learning as the most efficient way to learn. And ever since Guillermo Rauch admonished me to “never write a line of code before you have to”, I have been promoting just-in-time coding as well.
But it took a discussion with the inestimable Col Perks on the topic of Heidegger and mental models to make me realize that the entire “just-in-time” approach has been perfectly elucidated for at least 2500 years.
And on some subconscious level I’ve known this all along, but it wasn’t until just now that I made the conscious connection.
Pu: the uncarved block
One of the more important ideas enumerated in the book, Tao Te Ching—meaning The Classic on the Way and its Power or Virtue and often now spelled phonetically as Dao De Jing—is that of Pu, the “unhewn wood”, sometimes mistranslated as “simplicity”.
It has nothing to do with simplicity.
What it signifies is potential. The idea, itself, is indeed simple: objects exist as potential before they are reified into concrete objects.
If you are irredeemably Western, perhaps you can conceptualize Potential as the mind of God in which He [sic] creates objects in His [sic] image. Then reifies them—makes them real.
And the lesson that Pu bestows upon us is that once the potential precipitates into the concrete object, there is no going back. Once the uncarved, unhewn block of wood becomes a bowl or a spoon or a bust of Elon Musk, it’s all over. The die is cast.
And so the Tao Te Ching prompts us to remain the uncarved block—as potential—for as long as possible: do not prematurely reify thyself.
This is, now that I think of the two side by side, precisely the message behind just-in-time coding, or never writing a line of code before we have to.
Before we write the code, it remains potential, and we can quickly pivot to a very different object/outcome.
But after we have written the code, that potential has precipitated into reality, where it cannot readily be changed.
Not that it can’t be modified, but if we later decide that we should have taken another path, reified a different object, then we probably are best off simply discarding our code—and our effort—and starting over.
You aren’t going to need it
Coders—who are mostly mewling infants who never saw an acronym they couldn’t immediately embrace, adopt, and overuse—have rejiggered “Pu” to “YAGNI”: You aren’t gonna need it.
“Ain’t” if you are being arch. And when ain’t they?
But this is nothing more than a restatement of the ancient principle of Pu. The imagined benefit of YAGNI, despite wasting three extra characters, is that we can pretend that we just made it up. Ha, ha! Why give credit to the ancient Chinese when we can just hoard it all to ourselves? I say poo to that.
Sadly, and in keeping with the current zeitgeist, YAGNI is often used in a sarcastic or snarky manner. But there is nothing snarky about Pu, and the ancient Chinese don’t give a rat’s ass about your infantile gibbering.
Remain in Potential until the last moment
OK, for all you Star Trek fanboys and fangirls out there, think of it this way: remain cloaked as long as you can, and then de-cloak only briefly to fire the damn weapon.
My partner is a business analyst (and no Trekker) and she often talks about the “problem space” vs. the “solution space” and how so many people in the tech industry are in an awful hurry to leap to the solution space.
Ditto for programmers who get tired of “thinking” after about fifteen seconds and jump straight to writing the code.
And I realized that it’s all just Pu again. The “problem space” is Pu. It is the space in which potential is preserved. Any solution is possible.
The “solution space” is where the reification happens: the infinite possibilities of Potential are reified into a single Actual: the place where you end up with a wooden bust of Elon Musk. Damn.
In physics, I think they call this the collapse of the wave function. From a world of varied probabilities to a single answer with probability 1 and everything else now probability 0. And this was before Heisenberg started dealing blue meth and knocking on doors.
My partner’s frustration is the same as mine (and Guillermo’s): why the hell are we rushing to solutions before we have to?
Be the uncarved block, the unhewn wood. Stick to the potential until you absolutely must embrace the actual. Code and learn just in time. More often than not, you will never get there. And so you will avoid a lot of wasted effort.
You aren’t going to need it.