ai

  • The Programming Books I Still Recommend After 15 Years

    Someone asked me the other day which programming books are worth reading. I found an old blog post of mine from 2011 (!) and my favorites have barely changed, which is telling. And with AI writing much of the code these days, I think these books are more useful, not less.

  • Protocol or ABC? Designing a pluggable provider interface

    I was designing the provider boundary with a developer for a CLI tool that talks to two different image-generation backends.

    Same inputs from the user, two different SDKs underneath. We were figuring out how best to define the shared contract: an abstract base class, or a typing.Protocol? This article has the answer.

  • Why Learn to Code If AI Can Code? 6 Reasons

    Stanford's Chris Piech runs Code in Place, an intro programming class with 17,000 students and over 1,000 teachers. They've run it both before and after Cursor and Claude Code arrived, and enrollment basically doubled. It turns out that more people, not less, want to learn to code now that AI can write it.

  • Guardrails Protect Your Codebase. What Protects Your Judgment?

    Cal Newport's On AI Coding and Its Discontents lands on an uncomfortable point: the speed AI gives you is paid for with the thinking that made us good engineers in the first place.

    Read code instead of writing it and you get passive recognition where you used to have an active model of the code.

  • Learning New Skills in the AI Era (vBrownBag)

    I joined the vBrownBag podcast with Damian to talk about how to actually learn a new language or skill when an agent can write the code before you finish typing the prompt.

  • Rust, AI, and the Developer Mindset (Develpreneur Podcast)

    I joined the Develpreneur podcast with Jim Hodapp to talk about the Rust developer mindset and what makes Rust a good fit for AI-assisted work.

  • Judgment: The Skill AI Can't Give You

    Every time I hear the phrase coding is solved, I worry about where this industry is heading. Yes, AI writes the code, you review it, ship it, move on. Is there still value in writing the code yourself and going deep into the problem? Yes, and I think it matters more than ever.

  • Python Is Not Enough: Why Pythonistas Love Rust (Podcast)

    I joined Bas Steins and Michal Martinka on their complexity.fm show to talk about why Pythonistas are picking up Rust, what AI really does to how we learn, and why vibe coding is a myth. The conversation ran for over an hour because there was a lot to unpack.

  • AI Is an Accelerator, Not a Compass

    A Reddit thread caught my eye this week. A developer spent three days with AI building out an authentication system, then realized the entire user flow was wrong. Not because the code was bad. Because nobody had mapped out what the system was actually supposed to do before line one.

    That's what happens when speed gets decoupled from direction.

  • When to use classmethod, staticmethod, or instance method in Python

    In a coaching call this week we discussed a create classmethod, and someone asked the obvious question: why is that here? It just forwarded its arguments to __init__. We ended up discussing the difference between instance methods, classmethods, and staticmethods, and how to tell which is which. Here's a simple decision rule.

  • AI Doesn't Change What Software Engineering Is

    Kelsey Hightower said something on the Pragmatic Engineer podcast that I keep coming back to: AI does not change what software engineering is. It is a tool, a more powerful one, but the job did not fundamentally change.

  • Build the Simplest Thing That Works

    I needed a CRM the other day. Not Salesforce, not even a web application. I just needed a way to track contacts, notes, reminders, and a small product catalog.

    Before writing any code, I focused on the constraints first.

  • The control layer is the product, not the model

    Gary Bernhardt posted something this week that names a phenomenon we're teaching in our agentic AI cohort:

    Everyone seems fixated on the models, but I think there's so much low-hanging fruit in the control layer above the model. "Agent" and "harness" sell that layer short. There's so much more that we can do beyond "read input, send to model, run commands it returns."

  • What production AI agents actually require

    Most "AI agents" shipping right now are demos wearing production paint. They answer questions fluently and break the moment they touch a workflow with money, state, or consequences.

  • How to Keep Your Developer Instincts When AI Writes the Code

    The promise was less friction. The cost, it turns out, is instinct, a high price to pay. The answer: add deliberate practice to your routine, and keep the struggle.

  • The Rust Compiler as an AI Coding Agent Guardrail

    AI agents write code now. What they can't do is decide what's correct. That gap is where a compiler becomes your best friend. Rust's compiler is famously strict, and that's exactly why it's a powerful tool for working with AI tools. It offers a fast feedback loop, catching errors early and enforcing good practices. This gives you more confidence in the code AI produces.

  • Build the data layer before you touch the LLM

    Every AI tutorial I've seen opens the same way: client.chat.completions.create(...). Within ten lines you have a response. Within twenty you feel like you're building something.

    What you're actually building is a demo.

  • Vibe Coding is Easy, Owning the Architecture Isn't

    These days you can prompt Claude to generate a working feature in twenty minutes. File uploads, database queries, API calls; the code appears, it runs, it looks right. But if you've never owned a mature architecture, AI-generated code becomes a liability you don't know how to manage.

  • From Hobby Code to SaaS to Orchestrating AI Agents

    Ryan Austin runs a payroll SaaS solution in the Bahamas. He uses AI agents for customer support triage, feature scaffolding, and automated issue resolution. He has even implemented a rating system for issues, allowing agents to autonomously tackle specific tasks based on my available token budget.

    Four years ago, none of this would have been possible.

  • How an AI expense agent is actually structured

    Most AI agent tutorials show you the LLM call. They skip the part where you have to do something useful with the response.

  • Build Your First MCP Server: Code Tips in Claude and Slack

    MCP (Model Context Protocol) is the standard connector between AI clients and external tools. I built a server from scratch in 78 lines. Result: my coding tips repo, searchable inside Claude Code and a Slack slash command, using the same server.

  • Stop Prompting, Start Structuring Your AI Workflow

    Six months ago, every AI-assisted coding session started the same way: I'd type a prompt, get a result, tweak the prompt, try again. It worked, until I noticed I kept solving the same meta-problems: reminding the AI of my conventions, re-explaining how I want code reviewed, re-describing my verification steps.

    The fix wasn't better prompts. It was replacing prompts with a reproducible system.

  • From 1,069 to 156 LOC: Design Over Code

    I wanted to migrate a content drip system. My intuition said "web app," and instead of Django (comfort zone), I'd learn Axum, a Rust web framework. Two sessions with Claude Code and I had something real: 1,069 lines of Rust.

    If only I had asked first: Does this need to be a web app?