Neither an artistic pursuit nor a scientific discipline, software creation resembles carpentry or horology. We’re poised to lament its passing.
Recently, while discussing the remarkable ascent of AI-powered coding with my friend Josh, he expressed how much he would miss the artisanal aspect of manually crafting code.
I am a firm believer that software development is fundamentally a craft, rather than an engineering pursuit. The term “engineering” implies a level of certainty and exactitude that software can never genuinely achieve. Similarly, I’ve never been fond of “computer science,” as “science” suggests adherence to the scientific method and reproducibility. A key challenge in software development is that every project is distinct, and attempting to replicate one would yield an entirely different outcome.
Some propose that creating software is akin to painting, but I’ve never fully embraced that comparison. Artists typically enjoy creative freedom and few constraints, often feeling uninhibited even by artistic conventions.
Software consistently occupies a middle ground. The prevalent view among many developers—including figures like Uncle Bob Martin—is that writing software is a craft, more akin to woodworking or watchmaking. All three disciplines are somewhat constrained by the inherent properties of their materials. They demand exactness for successful results, and this precision necessitates diligence, dedication, and specialized skill.
Thus, I empathize with Josh’s sense of loss regarding the future of hands-on software development.
The discussion took a more intriguing turn, however, when I posed this idea: “Consider it this way: You are now a seasoned artisan, equipped with an indefatigable, eager, and continuously learning apprentice, completely prepared to handle all workshop tasks without any complaint whatsoever.”
And that truly is a compelling notion. While senior craftspeople certainly take pride in developing elegant code, structuring robust class hierarchies, and engineering functional software, I must concede that much of the work is repetitive. Having an unwavering coder to churn out the “grunt work” is undeniably advantageous.
Yet, its potential extends beyond that. Your AI coding assistant can now construct virtually anything under your guidance. The role shifts from playing an instrument to conducting an orchestra. Not every musician aspires to conduct, but given the direction things are heading, it’s a prospect we should all at least contemplate. The ultimate outcomes remain consistent. You can engage with the code as deeply as you wish – inspecting every line, merely reviewing the overarching architecture, or, if you’re like me, feeling quite content transitioning from the laborious task of actual coding to orchestrating the entire process and ensuring the desired final product.
Nevertheless, I share Josh’s apprehension. I will genuinely miss the gratification of crafting that impeccably clean and efficient procedure, of conceiving the perfect, minimalist object, of achieving that exquisite functional harmony. All of that is fading, much like a conductor’s opportunity for a solo performance. It’s a challenging reality, but it’s our current state.
This transition isn’t unlike choosing a managerial path – you step away from daily coding for a distinct new role. While you might reminisce about the rewarding programming days, the fresh challenges are both valuable and fulfilling.
Currently, there are individuals who meticulously write assembly code. In a few years, we’ll see similar devotion applied to Java, C#, and Pascal. Coding will soon become an idiosyncratic hobby, pursued solely by eccentric, veteran developers who cherish the artistry of software construction.
Though only a few months have passed, I already perceive Claude Code as nothing more than a sophisticated compiler, and the code it generates (regardless of language) as essentially assembly.