I’m convinced that a large % of programmers don’t actually like computers.
As a side effect, are also perfectly happy to throw away their reasoning to a model as soon as they can.
I don’t get it, at ALL. Don’t you *LIKE* understanding the magic of the machine?
You do realize hand-programming (I hate that I even have to specify hand now) is fun…right?
Remembering Don S. Davis - Hammond of Texas
My earliest memory of Don S. Davis is of a charming, bigger-than-life individual who greeted me with a hardy handshake and a boisterous “Hellooo, Jooooe! Welcome to Stargate!” on one of my very first days on set. This was back in season four, sometime between our second script (Window of Opportunity) and our third (Point of No Return). In those early years, Paul and I spent most of our days in our respective offices, writing, spinning or, in one inspired afternoon, creating the lyrics to the Stargate SG-1 theme. We were busy and, most important of all, we wanted to look busy. The last thing we needed was to be seen hanging around set, gawking at the actors when there were scripts to be written, brilliant ideas to be spun. But several weeks in, it became apparent to me that sitting alone in my office (or, occasionally, Paul’s office for a little variety) would inevitably drive me nuts – and the loss of my sanity would no doubt be reflected in the quality of my work. So I decided to start taking little walks. Pitch document or outline in hand, I would pace – up and down the corridors, in and around the building, and through the empty sets.
Except for one afternoon when I inadvertently strolled onto an active set where they were setting up for the next shot. Realizing my error, I immediately turned on my heels, prepared to march right back out when Brad Wright spotted me and called me over. “Joe,”he said, “I’d like you to meet Don Davis. Don, Joe is one of our new writers.” Don, who’d been standing by, waiting for that next shot, threw me his trademark ear to ear grin, gave me a firm handshake and bellowed “Hellooo, Jooooe! Welcome to Stargate!”
“Hellooo, Jooooe!” It was a greeting I’d come to associate with the man, a good-natured, self-deprecating southern gent who always had a story to tell but, more than anything, always wanted to hear how YOU were doing. “Hellooo, Jooooe! How’s that script coming along?”. “Hellooo Jooooe! How was lunch?” “Hellooo, Jooooe! How was your weekend?” Meeting actors for the first time can be a little daunting, especially for a newbie writer on his first big show, but Don’s down-home warmth and cordiality put me instantly at ease. And it was no different when he met the fans. I’ve seen convention-goers approach him with trepidation, perhaps fearful of overstepping their bounds and imposing upon him. But Don was never the type to be stand-offish or put himself on display. When you met Don, you weren’t meeting a t.v. star – you were meeting a regular guy. A regular, modest, kind-hearted guy who genuinely cared for his fans and the people he worked with. And, inevitably, those convention-goers who had, moments before, cautiously approached the man they knew as General Hammond would, moments later, be sitting, chatting and laughing, in conversation with good old Don.
If there’s one thing I’ll always remember about the man, it was his willingness to put others before him. Back when Rick was reducing his workload to spend more time with his young daughter, and the writing department was scrambling to come up with in-story reasons for O’Neill’s off-world absences, Don came up to the offices and offered a solution. “Have Hammond step aside and let O’Neill be General,”he suggested. I was floored. Here was a guy, perfectly willing to walk away from a plum role as a regular on a hit series, just to (in his mind) make it easier on everyone else. Of course we thanked him for his kind offer, but we weren’t willing to let George Hammond go just yet.
Ultimately, the decision was made for us when health issues curtailed Don’s involvement in the show. But even so, he continued to maintain a presence in the Stargate universe, popping up in occasional episodes and then in his final appearance in Stargate: Continuum. And every time he was on set, he would always make it a point to drop by the office to say hello.
As the years wore on, I saw less and less of Don. Still, I’d run into him now and then and whenever I’d inquire about him, he was always upbeat. There was never a trace of bitterness or remorse that he was no longer a regular presence on the show. “I have no regrets,”he’d told me on more than one occasion. And, always: “I’m the luckiest man in the world.” It was a wild, fun-filled ride and, finally, it was time for the southern gent to settle back and enjoy his retirement.
The last time I spoke to Don was when he called me up out of the blue after being tipped off that I’d mentioned him in a blog entry. In answering a fan who wanted to know why I didn’t keep in touch with Richard Dean Anderson, I responded: “We don’t talk a lot for the simple reason that he no longer works on the show. I don’t really talk to Don Davis that much and I love the guy. It’s nothing personal.” Less than twenty-four hours later, I got the call. “Ah luuv yoou tooo,“came that familiar low, Southern drawl. He‘d been tipped off to what I’d written and wanted to touch base. “It’s always great hearing from my fellow gourmand,”I’d written. “Apparently, 2007 was a busy year for him (which is great to hear), and he’s now enjoying some much-needed downtime." I'd expressed the hope that we would soon be able to get together for another culinary excursion. Sadly, that day would never come.
In my many years at Stargate, I’ve worked with actors whose company I have greatly enjoyed, but only a few would I actually be bold enough to call my friends. And among those few was the magnanimous southern gent who used to greet me with that familiar “Hellooo, Joooe!”, the always affable Don S. Davis.
He is truly missed.
(One of my favorite pictures of Don I snapped of him, happily eating chocolate in my office.)
Introducing /visual-plan - a skill to generate rich, visual plans for Claude Code and Codex.
Plan mode in Claude Code is incredible.
But I always find my eyes glazing over when it gives me this huge markdown essay in my terminal.
I found I can make much better visual plans with reusable components.
So I made a skill called `/visual-plan`.
It generates plans as MDX with visual, interactive components. Diagrams, interactive API specs, schema design changes, annotated code, and even pan and zoomable wireframes.
So for any UI work, you can look at a wireframe first, comment on it, iterate, and then have the agent work.
I’ve found this to be a much more intuitive interface for reasoning about what the agent is doing.
It’s somewhat inspired by that popular post about how HTML is better than Markdown.
But HTML can be slow and verbose to write. And it doesn’t look good checked into a repo.
This has really made me feel like humans and engineering are entering a new abstraction phase, where we reason about things at the plan level.
As long as the plan is good, agents are getting more and more reliable at executing on it.
Almost to the degree that we trust the C compiler to compile to assembly reliably.
Plans are the new intermediate representation.
I also made a skill for the reverse of this, called `/visual-recap`.
After the agent works, it gives you a recap of everything it did.
Same idea: wireframes, interactive API specs and diffs, schemas, annotated code, etc.
So now when you’re reviewing what the agent did for you, or looking at a pull request of somebody else’s code, you can see a visual recap instead of just reading a wall of text.
It’s all free and open source. You can find it on my GitHub.
Will link to it in the reply because we all know how dumb these algorithms are with links.
Lots of people asked how I used Fable to edit its own launch video so I made a video about that!
TLDR it wrote a lot of code & tool calls to use transcription services, ffmpeg, do colorgrading, use the figma mcp, make remotion UI and render it.
I didn't touch a video editor.
I've got an agent in a loop optimizing a renderer with the goal to minimize frame times (and tests to measure). It got times down from 88ms to 2ms and allocations down from ~150K to 500. Sounds good, right? Wrong. This is exactly why agent psychosis is a big fucking problem.
As an experiment, I rewrote the Ghostty core render state in Go, with access to identically laid out data structures as Ghostty and the exact same validation tests. I made a purposely naive renderer (simple, correct, but slow). 88ms per frame with 150,000 allocations (horrendous, lol)!
I then kickstarted a Ralph loop to bring the frame times down. I told it it can't modify input data structures or the public API or tests (they're correct), but it can do anything else it wants. It got to work.
It has worked for about 4 hours. I've spent around $350 on this experiment so far. The results?
88ms => 1.5ms
150K allocs => ~500 allocs
Incredible right? Nope.
My hand-written renderer I ported has frame times (same benchmark) of ~20us (0.020ms) and 0 allocations in the update path.
This is the problem with psychosis and lacking systems understanding. If you don't understand the system, you're going to accept that this is an incredible result. If you understand the system, you'll see better solutions immediately and can do roughly 75x better on throughput.
The people who blindly trust agent output are in the former camp. They're sheeple, overdrinking from a fountain of mediocrity.
Standard disclaimer: I use AI all the time. I like AI. The point I'm making is to not blindly accept results. Think. Analyze. Learn.
Tactical vs Strategic Programming, and why I'm nervous for juniors:
Good programming involves a mix of tactical and strategic decision-making:
- Tactical: on the ground, short-term. The soldier doing the fighting.
- Strategic: high-view, long-term. The general planning the war.
You need to be a tactician to write good code. To choose the right syntax. To figure out the file structure. To figure out how best to test your changes.
But you need to be a strategist to build code that lasts. To design the architecture. To automate away problems. To think beyond today.
Agents have eaten the tactical part of programming. When you can pay below minimum wage for code, there's no point going into the trenches yourself.
But AI cannot code strategically. Agents need someone at the top of the pyramid to tell them what to do. They need oversight.
So, a developer's day-to-day job has become 100% strategy. Long-term thinking, all the time. (maybe this is why I'm so tired all the time now)
If you identify as a tactical programmer - a code monkey - then you are out of luck. The job has changed.
Personally, I like it. I always preferred thinking strategically about code. If you asked me what my job was about, I'd say 'building apps', not 'writing code'.
But what makes me nervous is that we've pulled down the only bridge that brought juniors into the industry.
We used to train juniors like this:
1. Give them only tactical tasks
2. Let them build up their strategic experience slowly
Eventually, they are a good enough strategist that they are no longer a junior.
But what happens when all tactical code is written by AI? What is the point of a junior?
We obviously need juniors. We need new lifeblood coming into the industry. We need to leave paths open for extraordinary hires to enrich our companies.
But how do we train them? How do you train strategic thinking?
These are the questions I'm thinking about. I'd love to know your thoughts.
I strongly believe there are entire companies right now under heavy AI psychosis and its impossible to have rational conversations about it with them. I can't name any specific people because they include personal friends I deeply respect, but I worry about how this plays out.
I lived through the great MTBF vs MTTR (mean-time-between-failure vs. mean-time-to-recovery) reckoning of infrastructure during the transition to cloud and cloud automation. All those arguments are rearing their ugly heads again but now its... the whole software development industry (maybe the whole world, really).
It's frightening, because the psychosis folks operate under an almost absolute "MTTR is all you need" mentality: "its fine to ship bugs because the agents will fix them so quickly and at a scale humans can't do!" We learned in infrastructure that MTTR is great but you can't yeet resilient systems entirely.
The main issue is I don't even know how to bring this up to people I know personally, because bringing this topic up leads to immediately dismissals like "no no, it has full test coverage" or "bug reports are going down" or something, which just don't paint the whole picture.
We already learned this lesson once in infrastructure: you can automate yourself into a very resilient catastrophe machine. Systems can appear healthy by local metrics while globally becoming incomprehensible. Bug reports can go down while latent risk explodes. Test coverage can rise while semantic understanding falls. Changes happens so fast that nobody notices the underlying architecture decaying.
I worry.
4 of the most confusing terms in AI, defined:
Model: a blob of parameters, written during training. Does next-token prediction and nothing else. Stateless.
Harness: everything around the model that turns it into an agent: tools, system prompt, context window management, etc.
Environment: the world the agent acts on. Anything outside the harness that the agent perceives and acts on via tools.
Agent: a model, harnessed, in an environment.
---
Opus is a model.
Claude Code and Claude Web are different agents, because their harnesses differ - even though the models are the same.
The file system is an environment. MCP servers add tools to the environment.