Vibe Coding as a software engineer
👋 Hi, this is Gergely with a subscriber-only issue of the Pragmatic Engineer Newsletter. In every issue, I cover challenges at Big Tech and startups through the lens of engineering managers and senior engineers. If you’ve been forwarded this email, you can subscribe here. Vibe Coding as a software engineerThere’s a lot of talk about “vibe coding”, but is it just a vague term for prototyping, or could vibes change how we build software?
The term “vibe coding” is relatively new and has been gaining traction recently, since computer scientist Andrej Karpathy, OpenAI cofounder and Tesla’s former director of AI, used it in a now widely-referenced tweet which helpfully provided a definition. There were a few earlier references to “vibe coding”, but Andrej’s post seems to have propelled it into wider usage. Today, terms like “I vibe coded this app” can be found in developers’ lingo, especially frontend-focused devs. Last week, my colleague Elin attended the Local First conference in Berlin, and found that more than a few engineers mentioned “vibe coding” when discussing the development process. So, today, we’re all about the vibes:
Before we start: I recently talked about AI coding with Yuzheng Sun, host of the Pragmatic Data Scientists YouTube channel. It’s a 35-minute conversation that you can watch here. The bottom of this article could be cut off in some email clients. Read the full article uninterrupted, online. 1. What is vibe coding?Here’s how Andrej Karpathy defined his understanding of it (emphasis mine):
Andrej explains talking to his Mac using SuperWhisper, and telling Cursor’s agent mode, Composer, what to add to the app he’s building. It sounds like being involved in coding but a bit disengaged from it at the same time; the focus is not on the code itself, but on the big idea. With AI coding tools and agents increasingly good at generating code, this mostly works. Letting AI generate codeAt least two books with “vibe coding” in their titles will be published this year:
In Beyond Vibe Coding, Addy Osmani defines it like this:
Steve Yegge, co-author of Vibe Coding, told me what the term means to him:
My take on vibe coding is similar, in that you allow an LLM to “take the lead” in writing code, a bit like turning on a car’s self-driving mode and taking a metaphorical back seat. Vibe coding vs AI-assisted codingSoftware engineer and Django creator Simon Willison, points out how “vibe coding” gets meshed together with “AI assisted coding,” in his post Not all AI-assisted programming is vibe coding (but vibe coding rocks):
What if we can’t separate “vibe coding” and “AI assisted coding”?A strict definition of vibe coding seems to involve not looking at the code, only at what it generates, and prompting an LLM. But can we really do this? I tried several times and failed at vibe coding by that definition; usually because the AI tool asked me to approve things, like creating a new database schema or picking an approach. Then, I took a glance at what it did and sometimes intervened. I knew what I wanted to build, and kind of knew how I wanted to do it. To repeat the driving analogy, I was mostly letting the car drive itself, and occasionally steered it to change lanes, or take an exit. So, was that “vibe coding” because I gave away most control, or was it “AI assisted coding” because I paid some attention? It felt like I was moving faster with less effort, so I’d say it was “vibe coding” to a good extent. Personally, I find it hard to pretend I don’t know anything about code, but I do sometimes hand over most control to an agent, then check what it does. I guess this combines “vibe coding” and letting the agent “rip”, with taking control back, as and when. In the book, Beyond Vibe Coding, Addy Onsmani differentiates between vibe coding and “AI-assisted engineering”:
For the purposes of this article, “vibe coding” means handing over control to an AI tool to write all the code. The definition of “vibe coding” seems clear cut for non-developers who don’t understand code, but it’s murkier for us engineers who do understand – if we choose to, that is! 2. Vibe coding toolsThere are lots of tools for vibe coding, and many are also useful for AI-assisted development. I asked devs for their most commonly-used tools: “Agent modes” within IDEs or IDE extensionsTools many of us likely use for autocomplete or AI-assisted coding, can also be used to let the AI rip with vibe coding. Popular ones include:
Others:
Command line agentic toolsI am hearing more devs rave about the power of using agents without an IDE, and just via a command line. For vibe coding, when not looking to “take over” from the AI and edit the code, an IDE could be unnecessary:
Other toolsTried and tested:
Design-related tools:
Other:
There’s an ever-growing list of tools that generate code with AI: here’s an additional 20+. Fullstack web platformsSeveral startups have built products which can theoretically build and deploy a fullstack web app with database support, usually using Supabase. Some of the more popular ones:
Others:
These products seem built for non-developers. Even so, devs are in a much better position to create something usable because these tools inevitably run into issues when you try to prompt anything even moderately complex, such as using a database for a website. Most engineers who mentioned these tools made it clear they use them for prototyping UIs, and showing off ideas. 3. Use casesVibe coding seems best suited for prototyping, and devs also mention a few other interesting use cases... Subscribe to The Pragmatic Engineer to unlock the rest.Become a paying subscriber of The Pragmatic Engineer to get access to this post and other subscriber-only content. A subscription gets you:
|
Comments
Post a Comment