Real Programmers Do Not Fear The Vibe

In this essay I try to process my conflicting feelings in the face of the beginning era of agentic AI, and specifically so-called vibe coding. This is a very polarized topic, and I want to try building a bridge between the old-school techies and the new mindset driving the current paradigm shift towards heavy usage of agentic tools.

I have nothing new to contribute to the very important discussion about the political and societal impact of the ongoing technological transformations, and I certainly will not open the can of worms that are all the negative side effects on our bio- and infosphere.

Instead, I want to talk about feelings of proud software engineers.

Nostalgia Is A Delusion

I am a 90’s kid, and I already witnessed various phase transitions and so-called revolutions in technology and computing. In fact, so many that I already feel old, even though I am still in my 30s.[1] From 3.5 inch floppy disks with 1.35 MB capacity right into the ephemeral S3 bucket cloud, from HTML 4.1 to WebAssembly, from Visual Basic 6 and dozens other languages to Rust.[2]

History does not repeat itself, but it does rhyme, they say. As a teenager I spent way too much time reading old-school lore and essays, picking my side in the old holy wars, absorbing the spirit of the mythical hacker culture. Even though software development is a relatively young discipline, there already existed a whole generation of younger developers who were thinking in new ways about how to write code, and criticizing the elder for being so stubborn in accepting change and progress.

What is the core of programmer humor? Like a lot of humor, it is based on cultural differences and stereotypes. A bunch of younger eccentric techie personalities making fun of older eccentric techie personalities, the so-called real programmers, and conversely, a bunch of more senior developers making fun of the seemingly incompetent next generation. Like most humor and all good lies, it usually contains at least some grain of (usually exaggerated) truth.

I am saying all that, because I want to tell all those who see what agentic AIs turn software development into, and maybe feel cynical, angry and a bit sad: I get it, I really do, because I can feel what you feel.

Yes, I am also worried about next generation of developers, who might not know how to code their way out of a box or solve any of their problems without mechanical assistance, that all of us will be drowned in an ocean of low-quality, barely working code generated by black-box systems nobody actually understands.[3]

Yes, partially these fears can be considered to be very well justified, certainly things will change, and not necessarily for the better. But it is not the fault of technology. Technology is only as good or bad (in any sense of the word) as its user. Technology just amplifies your impact on the world, whatever you choose to do with it.

So probably we should not judge the merit of a technology just based on the worst thing somebody could do with it. If we did, we probably we should turn off the internet - but more on this later.

If you do not suffer from stockholm syndrome and are not prone to any delusional sentimentality about “good old times”, you maybe should take a sober look at what is happening. Right now, we have a new technological innovation and new debates it sparks. There is nothing unusual about that, and with that knowledge it is a bit easier to keep calm and just watch it unfold, even if at times it feels like an earthquake.

Old Men Yelling At Claude

Through the lens of comedic subculture debates from almost forgotten times we can see genuine past paradigm shifts unfolding. The real programmer trope was always calling out self-righteous gate-keeping by the “old-school”:

  • real programmers write assembly
  • real programmers do not need syntax highlighting
  • real programmers write compiled languages like C and C++
  • real programmers do not need fancy type systems
  • real programmers track lifetimes of objects in their mind
  • real programmers do not need an IDE with auto-complete

Now the interesting thing is that none of the old ways of doing things is gone. Everyone is still free to program on bare metal by cranking out opcodes in hexadecimal, and in fact it is important that there are people who are able to work on all these levels. But the technology stack is growing higher and higher, we are collectively building larger and increasingly complex software, way beyond what people in the 70’s could probably ever imagine.

New development tools and paradigms and their adoption are often a response to some need or pain point, and what most developers want and need, ever since the beginning of computing, are tools that help writing new code that is correct, debugging code that is not, and doing both as efficiently as possible. That is why people turned to languages like Java and then Python, and also why most people use an editor like VSCode instead of notepad.

You can write both amazing and horrible software just with notepad using C, and you can write both amazing and horrible software in Python using an IDE. Tools are not responsible for what users do with them. Otherwise, all chainsaws probably should be outlawed, as somebody could get hurt.

Before turning into this generation’s caricature saying things like “back in my day…” and “real programmers do not vibe-code!”, let us examine a preceding technological development, to see where some of the negative feelings might be coming from.

From Treasure Trove to Garbage Dump

Once there was an exciting new technology with lot of potential for humanity: the internet! Did people who created it anticipate what privatized digital wasteland it would eventually become?[4]

The internet was hijacked by massive corporations, privatized, monetized and now ultimately enshittified to squeeze out all attention and engagement for maximal shareholder value. Truth is, the internet was getting worse each day, long before ChatGPT or any of that stuff was a thing!

I absolutely hate a lot of the developments that are collateral side effects of the new AI tech, which spreads like a cancer, because it is just too easy to (ab)use, exactly like the internet. Even more, at this point I want to clearly declare:

For any prose written and published on my site, I have never, and will never use AI for anything beyond grammar corrections, spell checking and final polishing, This is my space, my voice, my words, as an authentic self-expression of a human being.[5]

Even though the internet was created by idealists, it is now controlled by ruthless capitalists, and this is what determines its current character. Those same corporations pumped all value out of the open internet in questionable ways, to develop and train these insanely huge statistical models which, I hate saying it, actually can do amazing things nobody believed a machine could do!

Is it rational to be an opponent of the concept of wearing clothing, only because a lot of it these days is plastic trash already the day it was made and is based on exploitation? The world is complex and entangled, there needs to be space for nuance when pondering the tools we choose to use or goods we consume.

Pride of the Seasoned Software Engineer

I am the kind of person with too many ideas and too little time (and willpower) to ever implement them all. Dozens of software experiments I would like to do, and probably would be doing, if I still was a student and had no responsibilities - probably enough to fill years of my time. But I am a professional software developer, and more recently, also a father. Free time is by far the most valuable resource I possess.

I used to obsess over every single line of code, every symbol has its right place. Programming, at its best, is engineering and art meeting in a beautiful union - a reflection of a human mind. At least that is how I always felt about code. When you spend a lot of time doing something, you become proud of it, you start deriving your some of your self-worth and feeling of purpose from it.

Like many of you, I spent 20 years of my life honing my skills and learning the craft. Through pain, sweat, sleepless nights, lots of effort and time. I enjoyed most of it, because for people like me, writing code is a fun activity, not just something you have to do for a living! But what is it, that makes it fun?

People have different motivations pulling them towards software development. For people like me, programming is empowerment. Code is an easily accessible and exceptionally powerful way to bring an idea into reality. Ultimately, programming is all about creation. You can and should take pride in doing it well, and you hopefully enjoy the process to some degree, but it is about the result, unlike disciplines such as pure math.

Having creation as the main motivation, once you manage to squeeze your eyes just enough to not see all the problems AI tech comes with, it should be actually pretty easy to appreciate what it can bring to the table. Agentic models are a new kind of powerful technical artifact which can save time and increase productivity.

Unlike other hypes, this is not just manufactured excitement pushed by marketing departments of tech companies. To convince yourself, all you have to do is give these new tools a fair try. Whether we like it or not - these things now do exist and will not go away. They are far from perfect[6], but they can do the most important thing a tool can do: save time and reduce pain.

Of course, if you do not use them right, they will do the opposite, just like when hitting your fingers with a hammer. Furthermore, you do not have to use the most popular and powerful models offered by shady MegaCorp, there is a lot of competition right now and a lot of capable alternatives.

Carefully Embracing The Vibe

Last weekend I started my first pure vibe-coding project, while holding a baby in one hand and a smartphone in the other. Chatting to an AI agent like to some motivated but often confused junior developer who just needs some proper guidance and occasional micro-management.

This synthetic junior developer works for me in a self-hosted Docker container on a spare 10 year old laptop I set up just for this purpose. Even if he messes up beyond what can be fixed by git restore, not much harm can be done.

Under my supervision, that agent has incrementally built a Rust app based on egui which stereoscopically projects 3D slices of 4D space, controlled by a 6-axis 4D camera that is based on the dual-quaternion representation of the 4D rotation space. The resulting prototype app compiles to WASM, perfectly runs in a browser tab on my phone in landscape mode, and does what I wanted it to do.

Do I claim “authorship” for that code? Not more than what “authorship” a movie director can claim for the resulting movie. Was I able to obtain the result I wanted? Absolutely. Was it different from talking to a human developer? I actually do not think that it is much different from communicating with a cheap freelancer I could have hired. However, I doubt that a random freelancer would know the needed math.

It would have taken me weeks to do all of that. No, not writing out the code - I could have done that on a weekend, if I had that much free time. But I have no background in computer graphics, I have never implemented anything that even renders in 3D, I would have to work my way up learning how to build a custom renderer for what I wanted to do. Probably I just would have never done it. Now I have a working app that visualizes 4D in ways which I wanted to explore, lazily done on the side within a few days. Sure, it is a messy prototype, let’s not even start talking about code quality. But it is hard not to see the potential:

  • I did not write a single line of code
  • All I did was: explaining my ideas, prescribing architecture, and supervising
  • I wished a Rust app with 2.5k SLOC into being, it is mind-blowing and surreal![7]

Growing Stack Of Magic Machines

The shift from manual development to vibe coding is like from manual computation with pen and paper to electronic computers, or from manual labor to the autonomous factory line. You can automate and scale up the tedious parts, but now you need to learn to drive that new and more complex machine.

There are and always will be people who want or need to know how the magic machine works. But many people do not know, and do not want or have to care. LLMs are just another new layer in the ever-growing technology stack of magic machines that keep the modern world running:

  • I know how basic processors work (in theory, from a lecture)
  • I know how a basic operating system works (in theory, from a lecture)
  • I know how a database works (in theory, from a lecture)
  • I know how compilers work (in theory, from a lecture)
  • I know how the internet works (in theory, from a lecture)
  • I know how deep learning, convnets and LLMs work (in theory, from a lecture)

All these and many more highly complex systems evolved over time and are being continuously refined by whole subdisciplines of computer science and huge corporate research departments with tens of thousands engineers and billions of funding who do nothing but optimize these things.

No single person can ever fully understand all of that up to intimate detail, and all you actually need is a good-enough mental model for what you want to do. It is no different with our political and legal systems. At some point you just have to trust that the machine works as you understand it is supposed to.

From Coding To Designing

The emotional dilemma around coding agents is basically this:

  • For one, coding is a means to an end, for another a form of meditation.
  • For one, coding is the automatable boring part, for another it is the fun part.

I usually care deeply about the code I write and like to polish it. But these days, I simply cannot afford to write all the code I would like to write myself.

  • In a company, depending on your position you can delegate work to others.
  • Now with coding agents, everybody can delegate implementation work.

So instead of doing the coding myself, I was doing the supervising and controlling. I basically got promoted from development to technical management in my own hobby software project! This is what vibe coding is, not more and not less.

The experience of how far you can get with this made me question my previous obsession with code. In my hobby project I started to think like at work: it does not have to be perfect, it needs to be good enough and be done in reasonable time.

In recent years, I learned that I enjoy designing systems at least as much, if not more, than writing the actual code. And it looks like this is increasingly going to be the main part of the job. You can always dream of and design bigger systems than you could ever implement alone, because system design is on a different abstraction level.

I still am the architect of the solution, I still decide what is a good or bad solution. The fact that a machine could spit out code I would need much more time to write and debug does not take anything essential away from my earned experience as software developer. On the contrary, to make most out of these tools, you must to be able to do everything they do, and then they let you do it much faster.

If these agents can produce reasonable results matching required standards and given specifications, then why not use them? For some tasks, an agent is much faster than doing it yourself, but for many tasks it might take the current generation of agents much more wall-clock time than doing it yourself. However, any of your time that is saved is time you can use doing something else.

Learning to work with an agent in some sense is very much like learning to use an unfamiliar but powerful editor or IDE - the value you get out of it is proportional to your ability of using it well, and sometimes you need to have the wisdom to pick the right tool for a task. Choosing the language model and agentic coding tool is like choosing the most suitable colleague for a specific task.

I believe that the key skill for vibe coding is simply being a good senior engineer, which involves various soft skills, such as:

  • knowing how to break a big project into workable tasks
  • knowing when to invest the time to do it yourself (critical parts, architecture)
  • knowing when to delegate (low-risk, predictable work)
  • knowing how to write out detailed requirements (e.g. formal specifications)
  • knowing how to ensure that the requirements are fulfilled (e.g. tests, etc.)
  • and so on

There are engineers who are very good at the technical stuff, but might lack some of these other skills, and the opposite kind who are more than happy to move up and away of from the “grunt work”. The first kind might be too reluctant to try agents for various reasons and might miss out, the second kind will go ahead and produce a lot of very bad code. I hope for a future where it is recognized that such tools require a capable and experienced operator.

Conclusion

Like many, I also grew up on sci-fi with various robots and artificial intelligences as user interfaces to technology. Back in school, my first longer homework assignment was writing 10 pages about a technological topic of my choice, and I wrote a survey about AI. Back then, it looked like AI winter would last forever and all of that stuff could never really work.

Fast forward to around a year ago, and I was already somewhat excited about reasoning capabilities of leading LLMs at the time. The excitement back then was in anticipation to what was on the horizon. Just one year later, we actually get to create software using natural language! I really did not expect all of this to happen before my retirement, but here we are.

Will this technology replace good engineers? Not in any future I can imagine.

Could it replace bad engineers? I start to believe that very soon it might.

What it can definitely already do today is: making both good and bad engineers more efficient at what they already do. Will it will be piles of slop and technical debt, or amazing and useful software? As always, it is up to you.



  1. Technological progress is accelerating at truly insane speeds, and I really doubt that this uncontrolled explosion is good for human beings and our existing societies. We are randomly walking in uncharted territory without any safety rails. I think this is frightening, but this is a completely different topic.

  2. I really enjoyed learning different programming languages, as a kid I always wanted to invent a new one and write a compiler for it. Never followed through, but in some way, I actually do something very adjacent for a living now. Sometimes you really know early what you want to do when you grow up.

  3. Maybe the real question is: didn’t this already happen a long time ago, and we all just did not notice?

  4. What to the elder ones was the Eternal September, for me is probably the appearance of the smartphone. It is a pretty clear line that separates the Web 1.0, which was full of interesting content written by usually quirky, but usually intelligent and insightful people on authentic personal pages, to well… what it is today.

  5. I believe AI cannot produce art, it produces only a mash-up of existing art. If you take out the human effort, intent and emotion out of art, it does not deserve the classification as art, it is merely kitsch. To produce art, you need a soul and something you have the need to express. AI with no human in the loop can only produce consumable commodities.

  6. Which tool is ever perfect? I like using vim as an editor, I like coding in Rust, but nobody in their right mind would ever say that they are flawless!

  7. I will document my whole AI tech setup, which grew over the last months, in another post. This was my first experience with autonomous coding agents, but I have been watching and playing with all these new toys for a while now.