Notes on AI Assisted Programming
← Back to HomeMarch 13, 2025
Notes on AI Assisted Programming - Thinking at the Right Level of Abstraction
AI will replace code monkeys (developers who output large amounts of low-quality code). The AI is faster than any human at writing code and the produces better than low-quality code. Code monkeys are stictly dominated in these two dimensions.
To get the most out of AI, we need to think at the right level of abstraction—from naming a variable to designing the overall architecture. The AI can operate at any level, but it won’t change focus unless we prompt it to.
AI can write code, organize files, and help design systems—but only if you guide it. You must constantly zoom in and out: one moment reviewing function-level details, the next restructuring modules. The human role is now orchestration, not just implementation.
Low-Level Abstraction I have a controversial opinion, vibe coding will only be used for
I have a different opinion than most when it comes to vibe coding (true vibe coding in the sense of not looking at the code and going purely on vibes)–it is not the future.
I think it’s important to be very anal about your code. If you know what good code looks like, then just tell the AI exactly what to improve.
Better names. Simpler control flow. More readable logic. The cost of iteration is low now. Don’t settle for “okay” when “clean” is just a prompt away.
1. Break down big tasks. Well-scoped prompts yield better results. When you decompose a task into a small, clear subproblem, AI tends to perform well. Feed it clear intent, and it returns structured, readable code.
3. AI can help with high-level design—but only if you ask. Architecture, module layout, interfaces, design patterns—AI can reason through all of these. But it won’t volunteer structural suggestions unless you prompt it. Ask it to sketch an interface, propose a refactor, or critique the module boundaries.
4. Don’t forget to step back. Too much decomposition without synthesis leads to disjointed parts. You must regularly assess how everything fits together. Are components duplicating logic? Are names drifting from intent? Only humans can spot when a structural pivot is needed.
5. The AI is an optimizer by default—but you can ask it to be a strategist. Left unprompted, the AI will focus on local improvements. It won’t ask whether the plan is flawed. But if you prompt it with strategic questions—“Is this design scalable?”, “Is there a simpler pattern?”—it can reason at a surprisingly high level. You just have to initiate that conversation.
6. Refactoring isn’t optional—it’s leverage. Every so often, take a step back and clean things up. Refactoring makes the AI more effective on future tasks and gives you (the human) a clearer mental model of the codebase. Think of it as paying down cognitive debt—for both parties.
8. But if you don’t know what good code looks like, you’re both coding on vibes. Inexperienced developers won’t always know what to ask for. That’s a shared limitation—of both the human and the AI. Until you develop that judgment, code quality will reflect the ambiguity of your prompts. But this, too, can be improved through iteration and feedback.
9. The human-in-the-loop is not a workaround—it’s the core of the process. The AI amplifies your thinking. It doesn’t replace it. You define the vision, detect when it’s drifting, and decide when to change direction. That’s your job now—and it’s more important than ever.
Would you like a title and short intro paragraph for publishing this as a blog post?