Git Is The Most Important Vibe Coding Skill
There has been a lot of discussion about “Vibe Coding” lately. As I have said in other posts: I treat Large Language Models as the fastest, worst junior dev I have ever worked with.
Among junior devs who have Dunning Krueger-ed their way into a vibe coding senior dev roll there are complaints about what the LLM does to their codebase. The regressions, odd wanderings and sometimes self-defeating auto-arson of a code base that can come from letting an LLM run free.
To me this is funny, because these junior devs don’t understand that the LLM’s often do to codebases what Junior devs do to codebase. Of course, I only know this because I was once a Junior dev.
I honestly have never seen an LLM do something to a code base that I haven’t also done or seen done to a codebase. A lot of times massive mistakes are created by doing “what makes sense”.
The road to a broken production deployment is paved by reasonable choices.
The nearest and best answer to this problem is to deepen and utilize one’s Git techniques.
My favorite resources for this knowledge comes from WizardZines, specifically the evocatively titled Oh Shit Git, but the zine How Git Works is also useful.
Having good Git habits – branching at the appropriate time, having good branch names, git commits with the right amount of information, etc – mitigates a vast amount of problems when it comes to using the Large Language Model to help write code.
I am of a certain generation so I still use the command line for most of my git and LLM interface, but I have used Sublime Merge and didn’t hate it – I just never got fast enough for it to be useful for me.
One thing I would caution against, however: you might be tempted to let the LLM Agent use git for you. I did for a moment until one day the LLM fixed a bug, created a git commit and then pushed the fix to main, deploying the fix on the server.
This was amazing to see but terrifying to comprehend. From that point forward I have specifically forbade all LLM’s I work with from using any git commands.
As the human in the software loop, your discretion – this branch is worthwhile, this experiment was a failure – is the value add that you bring to the job.