The Art Behind Every Line
After 40 years writing software, I have come to one conclusion that no framework, no language, and no AI has changed: building something that truly works — simple or complex — is not just technical competence. It is craft. And craft is art.
More Than Syntax: Software as Craftsmanship
A craftsman and a technician can both build a chair. The technician follows the manual. The craftsman understands why every joint is cut at that angle, feels when the wood requires a different approach, and leaves something of themselves in the finished object.
Software is no different. You can learn syntax in a week. You can memorize design patterns in a month. But knowing when to break a pattern, why a particular abstraction fits this specific problem, how to make a system elegant rather than just functional — that is the part that cannot be taught in a course. That is the artisan's touch.
I have always believed that the best code reads like a well-written sentence: clear, purposeful, with nothing wasted.
Forty Years of Learning: From Mentors to Machine Intelligence
The tools for learning have changed more radically than the craft itself. When I started in 1985, knowledge came from people — real mentors, colleagues who had already made every mistake worth making. Books came next, almost exclusively in English, because that was the language of computing. If you could not read English, you were already behind.
Then came the internet. Google and Stack Overflow became the collective memory of every developer on the planet. Suddenly the answer to almost any technical question was one search away. The barrier dropped significantly.
Today, we have AI. And with AI came Vibe Coding — a phenomenon where the barrier has dropped so far that almost anyone can generate working code by describing what they want in plain language. Everyone is a developer now. Or so it seems.
The One Thing AI Cannot Replace
In music, two pianists can play the same score note by note. One performs it. The other interprets it. The difference is not in the notes — it is in what the performer brings from within.
The same is true in software. Two developers given the same brief will build two completely different systems. One will be technically correct. The other might be elegant, extensible, and a pleasure to maintain ten years later. The difference is not in the requirements — it is in the mind that shapes the solution.
Creativity cannot be automated. The ability to look at an existing solution and see how it could be better, to invent a new abstraction that simplifies everything, to know when the right answer is less code rather than more — these are human qualities. AI can assist here, but it cannot originate. It works from what already exists. We work from what could exist.
Vibe Coding: Everyone Is a Developer Now. Or Are They?
I do not dismiss Vibe Coding. It is a genuine evolution, just as Google was a genuine evolution over the library. More people building things is generally good.
But there is a difference between generating code and understanding it. A generated solution you cannot read, cannot debug, and cannot extend is not a solution — it is a dependency. You have not built something; you have borrowed something you do not own.
The craftsman who uses a power tool is still a craftsman. The person who owns the power tool but does not understand wood is not. The tool does not make the artisan. Knowledge, experience, and judgment do.
The industry itself is now proving this in concrete terms. Companies specialising in AI training hire experienced developers specifically to review AI-generated solutions, evaluate their logic, and correct errors the model cannot see — a process known as RLHF (Reinforcement Learning from Human Feedback). Meanwhile, entire consultancy firms have emerged offering "AI refactoring" services, always advertised with the same guarantee: human programmers who verify every generated line.
The reason is simple. AI-generated code suffers from three problems no amount of prompting has solved: logical hallucinations that are syntactically perfect but semantically wrong for your specific domain; absence of long-term context about how a function will affect the broader system in two years; and legal accountability, which requires human review trails for compliance and liability.
The programmer is not disappearing. The role is splitting in two: the AI generates, the human validates and designs. The second role requires deeper understanding, not less.
My Workflow: AI as a Thinking Partner
I use AI in my work every day. But not as a ghost writer. Not as a code generator I copy and paste from blindly.
I use AI because I want it to think like me. I want it to follow my mental processes when designing a solution, use my architectural patterns, reflect my way of approaching problems. When I ask it to generate something, I read every line. I question every choice. I make it mine before I move forward.
If there is a technique or concept I do not yet know, I use AI to understand it — not to skip understanding it. The goal is always that by the next session, that knowledge belongs to me. The AI helped me grow, not helped me avoid growing.
That distinction is everything. AI is not here to replace what I do not know. It is here to help me become someone who knows more.
That is the only workflow I trust.