English is a high-level programming language now. I spend about 90% of my programming time writing English, not code. The other 10% is reviewing what the AI produces. AI agents are my primary tool now, not my editor.
A few weeks ago, I switched to using AI agents (Claude Code, specifically) as my main development environment. When I need to add a feature, I don’t open files anymore. I write: “Add a dark mode toggle to the settings page with proper state management.” The AI writes the code. I review it. If it’s wrong, I write another English sentence explaining what needs to change.
This is not “AI slop.” I review almost every line of code the AI generates. For core systems like authentication, payments, and cryptography, I review every single character. For tangential code like styling tweaks or minor UI adjustments, my review is less rigorous. But I’m still the one making engineering decisions. The AI is just operating at a lower level of abstraction.
What changed is that English became a sufficiently precise interface to express programmer intent. When I write “implement HMAC-SHA256 with proper key derivation,” the AI knows what that means. It writes the code correctly often enough that this workflow is faster than writing it myself. The compilation from English to TypeScript happens reliably.
This feels like the jump from assembly to C, or from C to JavaScript. Each level of abstraction raised productivity because you could express the same intent with less ceremony. English is the next level up. Instead of specifying every function signature and loop condition, I describe what the code should do. The AI handles the details.
The hard part isn’t writing code anymore. It’s knowing what code to write. Understanding system architecture. Making tradeoffs between performance and maintainability. Reviewing output for correctness. These skills matter more than they did before. Typing speed matters less.
If you’re still writing code character-by-character in 2025, you’re programming in assembly.