Being a programmer in the era of AI means not being a programmer

Being a programmer has always meant dealing with abstraction layers and climbing up the abstraction ladder.

You are simply learning a new language, whose syntax happens to look like English (or whatever language you speak), but with new, undiscovered, and constantly changing design patterns and best practices.

It depends how much you outsource to the llm.

If you outsource everything to a llm, I just don’t think you get very good results right now. Language models aren’t great at remembering all the little design decisions that are needed in medium to large projects. The code ends up riddled with semi-conflicting design choices, which have been slammed together and maintained by context inertia. For a lot of projects this is more than fine - sometimes higher quality work simply isn’t worth my time. But for a lot of projects, you will pay for that slop later.

But I think there is a useful middle ground. If you carefully review all the decisions an llm makes, I think you can often be more productive than just programming everything by hand. But it’s a very different way to do engineering. I think I learn more this way than if I program by hand - if only because I’m touching more code. My mind roves around the design space a lot more. I don’t lock in as much as when I’m programming each piece individually.

If you work with an llm like this, your engineering skill matters more than ever.

Typing the code was never the interesting part.

>> Typing the code was never the interesting part.

Code is fascinating! An abstract language to compile to program a CPU. So many ways to do this!

Now we're using natural language, which at times is extremely verbose. "[{}]" versus "array of objects", for example.

For me it definitely was

>Typing the code was never the interesting part.

But solving hard problems and developing systems intuition was. If you're trying to tell me that people working on code bases predominantly written by AI are still solving hard problems themselves, or understand the systems the AI is building, I think they're lying to themselves.

I work on a codebase with a lot of math and I've both learned and implemented a bunch of things that were beyond my level before I could iterate on it with AI. Same for binary reverse engineering. On the other fixing tedious bugs by hand and typing the code in is not something I miss at all.

From what I’ve seen they get to the level of understanding of systems way faster than we did because they iterate and experiment with this from day one. We had to spend years understanding code syntax, and other minutia.

Also, you need a different kind of toolset/skillset to grok a system that was vibe coded all the way - different failure scenarios. Older devs tend to just say “see, I told you, it’s just spaghetti underneath, you need to clean it up”, and the newer gen learns to work with that spaghetti.

I have a blazor app in poduction, Codex made errors which it could not fix and it required me reading documentation. I won't argue that it didn't make my life simpler, tasks which would take me days are done in hours, sometimes without touching code.

Yea, i still deal with a ton of code in AI heavy workflows. If anything the frustrating part is absorbing the code quickly enough. AI (Claude for me) writes in cryptic text and the code flows can often be non-obvious.

I need (and am exploring) custom review tooling to improve this AI->Human code flow. Reviewing PRs were always the hardest part for me in programming. They were often full of the developers decisions and you have to rediscover those as you're reading code for it to make sense[1]. However i find this even more difficult to discover these decisions from AI.

However unlike human PRs we can ask more of AI. Rarely have i had a developer put on a presentation for a PR - but AI could right? AI could produce a guided walkthrough of the code. Not sure if it will help of course, but my thought is we're all stuck in the old "PR review flow" but instead of PRs it's AI - and the volume of them is far greater than anything prior. So i expect we need to tweak how we review, how we get information from LLMs.

[1]: I'm speaking generally, and about larger PRs. Not some small func where you can easily see what it does. Business logic and complex code can be difficult to decipher in PRs, imo.

I'm building https://pyor.review to fix this problem, try it out and let me know what you think.

That is why I am very thankful for my job. We are not really allowed to use LLMs for much of anything.

That sounds like an absolute dream.