Code Better With AI, Not Less
Published
I think a lot about atrophy. I’m the kind of engineer who is really proud of my typing speed - I can crank out high quality code at speed when I’m in a good flow state. But the more I use AI tools, the harder it gets to actually write code. Contrary to what a lot of AI salespeople are saying, engineers are still going to have to write code by hand - whether it’s to keep down costs, or because the mdoels just can’t produce the kind of quality a highly trained software developer can. And yet, when I find myself actually writing code, I realize that the crtical thinking parts of my brain have atrophied significantly.
I’m looking for a new job right now which means I’m grinding Leetcode. Nothing is more humbling that returning to an easy problem I could’ve solved in a minute six months ago, and completely blanking. I’ve started to feel my old strength return to me as I work through problems. I mostly do this by reading the solution and typing out the code - as this blog post argues, actually typing out the code tends to be the best way to get your brain working.
Vibe coding is probably the worst way to maintain your coding skills. You don’t interface directly with the code at all, and you tend to concern yourself with end goals more than implementation. There’s a reason why traditional engineering teams separate out the product design from the implementation - these are different skillsets, and both are important. But using AI ghost text/autocomplete is nearly as bad. I justified it by telling myself that I’m still in the code, but critically, using these autocompletions changes the way you type code. You end up trained to pause for the machine to write your code. Even natural pauses are interrupted by code suggestions - your implementation may have been better, but for the sake of time you’ll probably just hit tab.
So in the interest of actually developing my skills, I decided to take something that works for me (reading problem solutions and implementing them when I get stuck) and turn it into a tool. I built Teaching Ghosts, a VS Code extension that give you suggestions for what to code, but not implementation details or actual code snippets. It has a configurable pause so it doesn’t run immediately when you stop for a moment, giving you time to think for yourself. I’ve been playing with it for a few days and have found it to be helpful - I feel like I’m doing enough of the critical thinking.
Of course the main issue with this is that models are optimizing for writing code, not writing code guidance. This comes across in some of the comments the LLM leaves, which can look more like a summary of the solution than guidance on how one might get to the solution. I’m working to mitigate this at the prompt level, but there’s only so much you can do to overcome the training data.
As per usual, you can find the source code on my GitHub profile. Feel free to download and use it locally, or adapt to your needs.