There is a difference between good and bad software
A little while back, I was in a meeting with a coworker when they asked me if a particular data problem could be solved by a script. The problem met all the criteria, it was definable, not too complex, and would scale linearly. “Absolutely” I replied. Next, a question that I didn’t quite expect but appreciated. “Do you think I could do it myself? With ChatGPT?”. To this I also replied “Absolutely, it will either work or it won’t, so there is no harm in you trying.”[1]
I’ve thought a lot about that conversation since. Perhaps it was recognizing that someone could quickly pick up a skill in an afternoon that had taken me years to master[2], or perhaps it was optimism that more people would get to express their ideas through code. Today, I was reading an article in Wired, in which the author participated in “Vibe-coding” at Notion for a few days. I came across this quote (the author is asking Ivan, a Notion employee, about the ethos of vibe-coding) that struck a cord:
So I had to ask: How does he feel about the quality of all this AI-generated code? Does vibe coding put more bad software into the world?
Ivan replied that code is either correct or incorrect; there’s no subjective determination of whether it’s high or low. The way he sees it, if I write sentences poorly then I might be considered a bad writer, but if a coder writes code poorly, the program simply won’t run.
NO! This is so wrong that I almost leaped out of my chair when I read it. At a company that is entirely focused on offering software as a service, there is a huge difference between good code and bad code. The code that those developers write is expected to last and be used by others across a 1,000 person company, it needs to do more than just work!
Consider the following example. If I asked you to write a simple program that adds two numbers, you might give me something like this:
#!/bin/bash
echo "$((3 + 5))"
Does this successfully add two numbers? Absolutely. Can you change those numbers? No. Can it handle floating point numbers? Nope. Can you easily use this in other parts of the codebase? Nope!
You may protest that AI tooling will integrate with the entire codebase, it will know the tests, it will know all the integrations! Even if can do that, do you want to pay for all the tokens to load that context into the prompt each and every time? What if AI lies about changes it did or did not make?. What if it comments about commits that don’t exist?.
If you are coding to accomplish a straightforward, one-off task (maybe you want to add a column to a pandas dataframe that displays the current date), then vibe-coding with AI can be a fun way to dip your toes into programming and get a workable solution fast. When you are building a complex product, working with hundreds of people, and affecting millions of customers, the code should have a higher bar to clear. If companies are increasing the rate at which they ship code, but the only requirement of that code is for it not to crash, then there is going to be a lot of work in the coming years to clean it all up.
I was reasonably confident that the chatbot wouldn’t advise them to
rm -rf /
their system, but perhaps I should have taken that into consideration. ↩︎Note that there is a huge difference between being able to copy others and being able to understand and innovate. I can write sentences that successfully communicate ideas, but I would not compare myself to an author. ↩︎