21 Dec

⌨️Vibe coding and the slow death of code quality

Vibe coding has become one of the buzzwords of 2025.
When I first heard the term, I found it amusing. I am no longer sure that it is.

Vibe coding describes a way of writing software where prompts replace design and quality concerns. As long as the program runs and produces the expected output, everything is considered fine—regardless of the quality of the code itself. In that sense, even someone who is not a developer can now “code.” I have no doubt that AI can generate working code. Like most professional developers, I use it myself: mainly for boilerplate, documentation, and sometimes to help analyze legacy code or explore solutions to a problem.

AI as a tool, not a substitute

Vibe coding

Used well, AI is a powerful assistant. But it remains an assistant—one that must be supervised. Sometimes it helps you move faster; sometimes it slows you down. It can suggest good solutions, but it can also hallucinate dependencies causing security issues, invent APIs, or generate code that poses significant cybersecurity risks. Supervising all of this takes time, judgment, and experience.

There is also another concern. Using too much AI may slowly erode those very skills. By delegating too much, we risk losing the ability to reason deeply about code over time. I am personally cautious for that reason—not because I am resistant to modern tools, but because I still want to be able to do my job correctly in a few years or when the AI bubble inevitably bursts.

The cost of not looking at the code

Vibe coding is something else entirely. It is the moment when we stop supervising the quality of the code and only validate the result. The output looks correct, tests pass, the demo works—and we move on. The code itself becomes incidental.

But even if we choose not to look at the code itself, one might still argue that it has sufficient quality. However, studies suggest otherwise. They show that AI-generated code produces about 1.7 times more issues, including readability problems, incorrect failure handling, and even security vulnerabilities. Notably, these studies focus on AI used as an assistant, not on fully AI-generated code without supervision, so the results could reasonably be expected to be even worse.

Writing code for durability

For some projects, this may be acceptable. Personal projects, throwaway prototypes, or experiments that will never be touched again can tolerate this approach. But most professional software does not fall into that category. Enterprise systems are expected to evolve, to be secured, to be audited, and to be maintained by humans over long periods of time. In that context, unreadable or poorly structured code is not a minor inconvenience; it is a liability.

Blindly trusting what AI produces can destroy a business. One enterprise learned this the hard way when a vibe-coded application ended up destroying its database. Who is responsible when AI-written code fails?

As long as code is meant to be read, understood, modified, and guaranteed by humans, it cannot be treated as a disposable byproduct. It must be written for humans. And only a human can validate that it is done right. Structure, clarity, intent, and durability still matter—perhaps more than ever in a world where producing code has become easy.

This tension between speed and understanding, between results and responsibility, is not new. But AI makes it impossible to ignore. And it is precisely why we need to rethink what it means to write good code—not just code that works today, but code that lasts.
That question, and what it implies for our craft, is at the heart of The Art of Code.

20 Dec

🍂Why beautiful code still matters in a world of fast software

Beautiful code

I started writing my book, the art of code, in autumn last year. The trees were dressed in a thousand colors—lemon yellow, amber, scarlet—beginning to shed their leaves. Scattered across the ground in a colorful patchwork, they were illuminated by the last soft sunlight of the year. Walking outside awakened the senses, and the mind drifted into a serene, contemplative space. The world was… beautiful.

What makes something beautiful?

We seek beauty within ourselves, whether inner or outer, in our homes, on our walks, in our creations. Whether it’s a landscape, a person, or a work of art, this concept—so difficult to define—feels somehow self-evident. Something beautiful is something that is pleasing to look at or listen to. Observing it triggers an emotion close to happiness, an “aesthetic” feeling.

But emotions are purely subjective, making beauty difficult to define. Standards of beauty evolve over time and often differ from one person to another. These standards reflect our cultural background, as well as our personal tastes. What was beautiful yesterday may not be today; what one finds beautiful might not appeal to someone else. Yet, certain patterns emerge: beauty often evokes balance, symmetry, harmony, and elegance. It represents an ideal, an absolute, a form of perfection.

Can code be beautiful?

Can we apply this concept to code? Can code be “beautiful”? The idea is unsettling; code exists to solve a problem, and in that sense, it’s closer to mathematical reasoning. In our culture, beauty is typically associated with people, landscapes, the arts—painting, music, poetry, literature, sculpture—and even fashion, but rarely with science. A painting can be beautiful, but can we call a mathematical equation beautiful?

And yet, mathematics has always held a place in the study of beauty. Mathematical patterns defining beauty can be found throughout nature and art—for example, the golden ratio, symmetry, fractals, and even the harmonic principles that structure music.

Mathematical beauty is defined by Wikipedia as “the aesthetic pleasure derived from the abstractness, purity, simplicity, depth, or orderliness of mathematics.” Those same words could easily be applied to an algorithm, which is defined by the Cambridge Dictionary as “a set of mathematical instructions or rules.”

In my previous book, I dedicated an entire chapter to “The Art of Coding.” I compare coding to writing a book, crafting a piece of furniture, or painting. Like each of these activities, coding requires a certain expertise, skills hard-won through experience, to produce something useful, readable, and maintainable.

But it’s also something that gives the developer a deep intellectual satisfaction that’s difficult to explain. It took me years to realize that this feeling was triggered by the perfection and elegance of some of the code before me, whether it was my own or that of a peer. That code was magnificent; it was beautiful.

Beauty as a practical discipline to improve quality

Beautiful code is code that elicits a sense of intellectual pleasure and satisfaction. Certainly, code can only reach this level if it follows programming best practices — including indentation and cleanliness — but there’s got to be more. For it to be truly beautiful, there must be a touch of elegance, a simple clarity in its solution.

In The Art of Code, I explore this idea in depth, looking beyond intuition to understand how beauty can emerge in software through deliberate choices. The book offers concrete guidance drawn from real practice, and shows why striving for beautiful code is not an abstract pursuit, but a practical one—leading to systems that are clearer, more resilient, and more satisfying to work with over time.

The art of code

17 Dec

🎨The Art of Code: The surprising power of beauty in software development

The Art of Code

I’m very happy to share a huge milestone for a project I’ve been working on for the past year, and, in some ways, for most of my life as a developer: my book The Art of Code is now available through Manning’s Early Access Program (MEAP).

For the next couple of weeks, it’s available at 50% off: https://www.manning.com/books/the-art-of-code

The Art of Code is a modern software craftsmanship book that explores how the dimensions of beautiful code—such as simplicity, clarity, expressiveness, storytelling, durability, and purity—can be implemented in practice, and how they lead to code that is easier to understand, safer to refactor, and more resilient over time. It also addresses concerns that matter in real-world enterprise systems, such as concurrency, failure handling, robustness, and sustainability.

In an era where AI is reshaping the landscape of programming, the book deliberately refocuses attention on what remains deeply human in our work: passion, creativity, and beauty.

Most examples use modern Java features, making the book a good fit to get up to speed with recent language evolutions such as records, streams, and pattern matching. That said, the ideas go well beyond any single language.

With Manning’s Early Access Program, the first chapters are already available, and new chapters will be released progressively. Early readers can share feedback, which directly helps shape the final version of the book. I’d genuinely love to hear your thoughts, and you’re more than welcome to discuss the book with me here on this blog as well.

Writing this book has been both challenging and deeply rewarding. I’m very grateful to Manning Publications Co. and to the early reviewers for their support so far.

Thanks for reading, and for any support, feedback, or sharing along the way.