In recent discussions about software development, a divide has emerged between what some call "serious" engineers focused on reliable results and "artisanal" programmers who prioritize the coding experience. This distinction, however, oversimplifies the reality for many developers. One programmer expresses concern that this framing misrepresents their approach and others like them, who value precision and correctness above all.
The writer emphasizes a commitment to producing reliable software through patience and deep engagement with code, rejecting the use of large language models (LLMs) for coding because they obscure low-level details crucial for correctness. While tools like unit tests and automated verifiers can ensure high confidence in code, they cannot guarantee perfection in maintainability or adherence to undocumented behaviors. This dedication to quality, the author argues, aligns more closely with traditional engineering principles.
The current industry trend often contrasts "artisanal" programmers—those who avoid AI tools—with "software engineers," a term increasingly associated with AI-assisted coding and managerial roles. This shift in terminology has subconscious effects on professional identity, raising questions about who qualifies as an engineer. Historically, developers resisted management attitudes that prioritized speed over technical debt and reliability, but today, rapid, AI-driven coding practices are often normalized.
Referencing a 2021 study by Hillel Wayne, which interviewed professionals transitioning from other engineering fields, the article highlights a different perspective: those who deeply care about software quality are true engineers, while others might be better described as craftsmen or developers. This contrasts with the current popular usage, where "artisanal" is applied to careful coders and "software engineer" to those embracing AI tools.
The author notes a rapid cultural shift in software development norms, from valuing strong type systems and rigorous practices to embracing free-form specifications and automated reviews. This change is not merely a preference for better tools but a redefinition of what constitutes professionalism and engineering in software.
The piece warns that redefining terms to elevate AI-assisted coding while marginalizing traditional craftsmanship risks undermining the value of education, hard work, and intellectual rigor in programming. It suggests that this trend reflects broader anti-intellectual tendencies within some software communities, where ease and speed are prioritized over deep understanding.
To address this, the author proposes clearer terminology: "AI-assisted coding" for work involving AI tools and "AI-free software engineering" for manual, detail-oriented development. This distinction aims to preserve respect for both approaches without dismissing the care involved in traditional coding.
Ultimately, the article calls for a more nuanced conversation about software development that acknowledges the human effort behind quality code, challenges assumptions that AI is the only viable path, and promotes awareness of how language shapes professional identity in the evolving tech landscape.