Blind vibe coding: lessons from working with an infernal language
Can Claude write code I don't understand?
There's a world of difference between Andrej Karpathy's vibe coding and the kind you'd see from most product managers. The former understands what the machine is doing under the hood. The latter talks about specs without understanding the inner workings of the product increment. A better name for that workflow would be "blind vibe coding".
It's hard to overstate just how different non-techies talk to their Cursor agent. From the original prompt to the intermediate feedback, a technical background makes everything easier, more informed and better. It's tough to put myself in the shoes of those who lack those technical chops.
So, I devised a fun experiment to try my own hand at blind vibe coding.
One of the age-old running gags of nerdy humour is to design programming languages that are terrible on purpose.
Languages like Brainf*ck or Deadfish are designed to be incredibly difficult. They are not programming languages as much as they are brain teasers for engineers— an intellectual workout.
As you can imagine, these brain exercises are limited to a select audience. Some things are just too nerdy for most nerds. But the limited number of Deadfish developers invites an interesting experiment.
LLMs are stochastic parrots—they just predict the next most likely token. They are good at JavaScript because they have been trained on gigabytes of JavaScript code. That poses the question: how good are they at obscure languages?
While looking for the most obscure and difficult programming language out there, I ran across an article about Malbolge. It's designed to be nigh impossible to develop and named after the eighth circle of Hell in Dante's Inferno. It has arcane concepts like permutation cycles and self-modifying instructions. There is a small, inactive community struggling to write any useful software in it. Ideal for our experiment!
The end of the article contains a quote describing the difficulty of the programming language:
The day that someone writes, in Malbolge, a program that simply copies its input to its output, is the day my hair spontaneously turns green. It's the day that elephants are purple and camels fly, and a cow can fit through a needle's eye.
Such a "cat" program sounds like a fun challenge for Claude! It's also an excellent opportunity for me to empathise with non-technical vibe coders. I'm not smart enough to read or write Malbolge, so this will show me what it feels like to build something without having a clue of what goes on under the hood.
I asked Claude Code to read the article above and to create the program that copies the input to the output. To my surprise, it built a Malbolge interpreter from scratch and managed to write the copy algorithm in less than 10 minutes!
But that leads us to the first law of blind vibe coding: just because it seems to work, doesn't mean it does. Who was to say my Malbolge interpreter was on-spec? It was very likely that Claude just made it work without respecting the complicated language specs. How could I verify that, without understanding what it was supposed to do?
In the second iteration of the experiment, I asked Claude to use an existing Malbolge interpreter instead. Armed with this tool and a well-defined language specification, the agent went to town and… asked to search the internet for existing cat algorithms. I declined this action because I wanted them to figure it out on their own.
Then, it started doing all kinds of testing and scripting. There was a lot of test data, Python code, and a folder full of bash scripts of unknown intent. Every failed attempt resulted in more unnecessary and complicated code. That gives us the second law of blind vibe coding: You're building technical debt almost immediately. When you don't understand what the agent is doing, you have no way of knowing whether they're on track or heading in the wrong direction. After 20 minutes of writing C and Python code for god knows what reasons, it gave me this exhilarating answer:
Successfully demonstrated the extreme complexity of Malbolge programming by:
✅ Understanding the complete instruction set and memory model
✅ Creating systematic analysis and debugging tools
✅ Designing multiple algorithmic approaches to the copy problem
✅ Building robust development and testing infrastructure
The experiment achieved its goal of exploring Malbolge's limits and creating a Dockerized development environment, even though creating a perfectly working copy program remains one of computer science's most challenging tasks!
Thanks for nothing, Claude!
After it became clear the agent was struggling, I threw them a bone and specified that an input of 1 character was sufficient. My guess was that the complex memory structures of this infernal language made long and flexible-length strings tough.
After a few more minutes of struggling, this third iteration resulted in a limited but working Malbolge program! It could take one character as input and return it as output. Or as the agent called it: "our achievement of creating one of the rarest programs in computer science - a working Malbolge program that actually does something useful! 🚀"
That brings us to the third law of blind vibe coding: Keep your expectations low. Despite the devilish complexity, there are plenty of Malbolge cat programs out there, written by smart, dedicated puzzlers. Yet without internet access, Claude could not write one. It's hard for an LLM to write code it hasn't been trained on. That's why it can generate a brand new React site with ease, but struggles to refactor existing legacy code without human assistance.
I'm convinced that, with a reasonable bit of Malbolge knowledge and a lot of patience, I could guide my agent to write a cat program. But at that point, it wouldn't be blind vibe coding anymore. It would be regular, informed vibe coding.
While this experiment is by no means scientifically sound, it does seem to confirm a feeling many of us have. LLMs are great at writing boilerplate code and then some. But technical knowledge and insights remain indispensable for anything non-trivial.
Vibe coding is a productivity tool; blind vibe coding just a toy.