The State of AI Programming
I've been programming since I was a kid, starting back in the early 1990s on my hand-me-down Mac Plus. HyperCard was an amazing programming tool at the time, and for that matter, I think it is still unparalleled (in modern terms) as a learning tool with which one can produce actual products.
Somewhat more recently, I've used OpenCode to work with ChatGPT. I've also used Claude and most recently, AgentOS (with Claude). I've also (tragically) copy-pasted tons of code into ChatGPT / xAI at times. I can say this with absolute certainty: the tools for using AI have continued to objectively improve at breakneck speeds while the actual programming abilities though have maybe not plateaued, but have certainly leveled off comparatively. But this isn't necessarily a bad thing. I'll explain.
I'm thinking back about numerous greenfield projects I've worked on. In each case, a significant amount of work goes into boilerplate code and mundane programming to get up-and-running. Off the top of my head: local persistent storage mechanisms, including caching and synchronization; account switching; backend API communication including offline support and caching; myriad basic user interface screens (signup, login, account recovery and management, content configuration, support), options and components (text fields, buttons, switches); analytics, crash reporting – and only then might you move on to the crux of the development effort: streaming video, editing images, filtering audio, or otherwise interacting with some content in some capacity. AI seems imminently capable of handling all but the exotic "crux" of an app (unless of course you're writing the same app that's been written hundreds of times before).
AI has an incredibly breadth of knowledge and experience. It has pointed me in directions I didn't know to look, towards solutions I didn't know existed. That's invaluable.
I'm working on an app to replace AirVideo, which is an absolutely essential app in my household. It is presently unmaintained and with each new iOS release, it takes on new quirks. Also, a tvOS app would remove our need to AirPlay from an iPad to the Apple TV. I employed AI to get me started. Some of its interesting choices include:
- It suggested we work with Protobuf for messaging between the client and server. That's a great choice. When deserializing data into a message, it determined the message type by trying to deserialize the data into each message type, and see which succeeded. Incredible.
- For ushering received messages to various components in the app, it settled on Notifications. This is a video streaming app. So every video frame and every audio sample would be wrapped up in a notification and evaluated by whichever components were observing. I mean, it is certainly a flexible solution, but not exactly optimal.
- It showed me a relatively obscure API for loading video resources for playback. We went down this path for a full day (or more) until I realized that the API really, truly was not intended for realtime streaming; we were trying to make it do something it was not capable of doing, all the while, with supreme confidence, it would produce another iteration of changes, declaring the problem fixed.
- I've got a persistent socket between the client and the server. Without a lot of prompting, it did not know what the correct behavior was for handling remotely closed sockets, or that related resources should be cleaned up, resulting in a tight read-loop that constantly fails, forever, each time a client disconnects.
- The first test run of video streaming, the CMFormatDescription did not initialize. I realized right away that Sonnet had forgotten to include the VPS (it only used PPS and SPS, like for AVC). After that was fixed, I saw that it had not replaced the
0x00000001NALU start code prefix (Annex B format) with the NALU byte length (AVCC format), as required by VideoToolbox.
None of this diminishes the value that AI assisted programming presents. However, unless you have a general knowledge of the topic at hand, AI can lead you – again, with supreme confidence – down the wrong path.
This is the fundamental problem. It doesn't ever know to say, "I don't know." Interestingly, that places AI in the 1st stage of competence: unconscious incompetence.
The "Jobs" Question
The hot question is always, “will AI take your job?” The context here is software engineering. That question is fair to ask but not framed correctly. AI will improve the efficiency of your job. AI will do some of your work, allowing you to focus on what it cannot do well. It is a tool that brings increased productivity by reducing the labor required to achieve a goal. It is a tractor to your farming.