The Hardest Part of Using AI: Taste vs. Craft
Why reading code isn't the same as writing it.
Overview
The rapid integration of artificial intelligence into software development has sparked intense debate regarding the nature of programming expertise. While AI tools can generate functional code at unprecedented speeds, they cannot easily replicate the nuanced judgment developed through years of experience. This gap highlights a critical distinction between craft and taste in the modern developer workflow.
Many professionals find that reading code is fundamentally different from writing it, yet both are essential for developing an intuitive sense of quality. As developers engage with diverse codebases, they unconsciously absorb patterns that define what "good" code looks like within their specific domain. This unconscious accumulation of knowledge forms the basis of professional identity and makes critiques of one’s paradigm feel deeply personal.
The Apprenticeship of Code
Programming education often resembles a traditional apprenticeship system. Developers typically carry the stylistic fingerprints of their first company or the primary open-source communities they engaged with early in their careers. Even those who describe themselves as self-taught tend to build their distinctive style upon the foundation of their first significant success.
Key Insight: Reading good code frequently leads to improvement. By absorbing patterns long enough, developers begin to store them as mental pattern matches.
Most developers follow programming influencers or read posts by experienced practitioners who have established preferred projects. Over time, this exposure creates a sense that code gravitates toward certain shapes. As developers wander through the vast terrain of public repositories and private corporate codebases, they encounter code that feels right and naturally settle into a specific Paradigm.
This Paradigm is usually tied to a specific domain, becoming the developer’s trade. It is not merely a set of technical rules but a conceptual framework through which problems are viewed. Consequently, challenging a programming paradigm can feel like a denial of one’s entire worldview rather than a simple technical correction.
Tacit Knowledge and Professional Identity
At their first job, most programmers internalize specific tenets that become unconscious truths. These include beliefs such as "the service layer owns this responsibility" or "this is how DB transactions must be structured." Repeated over several years, these practices develop into tacit knowledge—an intuitive sense that code is simply supposed to look a certain way.
Because this knowledge is compressed into a personal problem-solving scheme, critiques of it are rarely received as neutral feedback. For instance, telling a ten-year Object-Oriented Programming (OOP) veteran that "the abstraction of objects itself is flawed" does not land as a comment on an API choice. Instead, it sounds like a statement that their entire perceptual framework for the last decade is incorrect. That sting is real and understandable.
University computer science programs provide the building blocks of software theory but leave the application to experience. In culinary terms, academic curricula teach knife skills, data structures, and algorithms. However, they do not dictate which discipline a graduate will pursue. The transition from student to professional requires finding a specific kitchen in which to practice those skills.
The Culinary Analogy of Programming
To understand the difference between academic training and professional mastery, consider the path of a chef. After learning foundational techniques such as knife skills, ingredient properties, and food safety, a culinary student must choose a cuisine to specialize in.
- French cuisine prizes refined sauces and meticulous technique.
- Japanese cuisine focuses on the natural flavor of ingredients and seasonality.
- Chinese cuisine handles an enormous range of ingredients in diverse ways.
- Korean cuisine centers on fermentation and preservation.
- American and Indian cuisines emphasize cultural fusion and spice combinations, respectively.
Whichever path is chosen, foundational knife skills remain highly relevant, though modern tools mean they are not always strictly essential. More importantly, becoming a great French chef is a different journey from becoming a great Japanese chef. Even when using the same knife, what is cut, how thinly, and when heat is applied varies significantly by discipline.
Domain-Specific Judgment
The craft of programming mirrors this culinary diversity. A specific kitchen’s Conceptual framework is built upon the foundation of computer science fundamentals. What is commonly referred to as "real-world coding" is not just about learning hygiene standards that school overlooked. It is a process of learning which problems to claim as one’s own and what to sense as dangerous.
Web developers learn to think in terms of HTTP and databases. Game developers prioritize frames, state, and memory layout. Embedded developers focus on timing and hardware boundaries. None of these domains conflict with university fundamentals; they simply add layers of specialized judgment on top.
A French chef can look at a sauce and judge if a dish is finished. A Japanese chef reads the condition of a fish or the angle of a cut. A Korean chef stands before fermented ingredients, reading the time of their aging by the sourness of kimchi, the salinity of salted seafood, and the temperature inside the jar. They are not just looking at the ingredients as they are now; they are reading what those ingredients have been through and where they are headed.
Similarly, a developer with years of backend experience is sensitive to transaction boundaries and data consistency. A game programmer notices allocation patterns and frame spikes. This sensitivity is the essence of taste.
AI, Taste, and the Future of Development
Artificial intelligence excels at generating code based on learned patterns, but it lacks the embodied experience that defines human taste. AI can mimic the style of a specific paradigm, but it cannot inherently understand the historical context or the long-term implications of architectural choices in the way a seasoned expert does.
The hardest part of using AI is recognizing that reading code and writing code are distinct skills. AI can help bridge the gap by exposing developers to a wider variety of patterns than they might encounter in their daily work. However, the ability to discern whether generated code "fits" within a broader ecosystem remains a human responsibility.
As the industry evolves, the value proposition of senior developers will increasingly center on this taste—the ability to judge where code is headed, not just where it currently sits. Understanding this distinction is crucial for integrating AI tools effectively without diminishing the irreplaceable value of human expertise.
Sources
- 1
The Hardest Part of Using AI: Taste vs. Craft
https://www.makonea.com/en-US/casual/the-hardest-part-of-using-ai
Tools mentioned
GEO Radar
https://geodetect.io
Gemini Brand Scanner
https://gemini-brand.scanner
SpyFu
https://spyfu.com
Ubersuggest
https://ubersuggest.com
Gemini
https://gemini.google.com
Copilot
https://github.com/copilot
Mistral Chat
https://mistral.ai
Descript
https://descript.com
Canva Magic Studio
https://canva.com
You.com
https://you.com