Articles on Python · Rust · 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.

  • Ship Your First Python App: a Free Course on the Local Dev Workflow

    I keep hearing this a lot: the Python syntax I picked up in an afternoon, but shipping a real project meant learning ten more things. There is a stark difference between writing some code in Python vs building an app that someone else can run on their system. These skills are taught, but rarely together in one place. So I am building a free course to teach this.

  • 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 Rust makes you import a trait to use its methods

    An interesting challenge for a new developer came up in our Rust cohort: they opened a file and wanted to read its contents from disk, but the compiler refused to let them call read_to_string.

  • How Libraries Run Rust Inside Python (with PyO3)

    Every time you validate data with Pydantic v2, the data-validation library most Python apps reach for, a Rust extension does the work. Its core, pydantic-core, is built with PyO3, the same toolchain we'll use here.

  • 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.

  • Database-Driven RBAC with FastAPI and Azure Entra ID

    This came out of a coaching project: a FastAPI service backing a geotechnical database. We use Azure Entra ID for authentication, but we needed role-based access control (RBAC) granularly per endpoint and across different user roles. It turned into an interesting sprint where we designed it so that role changes did not require code changes.

  • 5 design patterns used in my new habit tracker app

    There are plenty of habit trackers, but I wanted to build mine with constraints, a calendar view and habit streaks. So I built commitgraph: a small Django + HTMX app. Here are five Python design and testing patterns from building it.

  • Why does Alembic need an import you never use?

    A coaching session this week surfaced a good question: Alembic autogenerate only works if you import your models first, even though you never reference them.

    Ruff flags the import as unused.

    So why is it there?

  • Unsubscribe links without a login: Django signing

    Django has a signing module that makes it easy to build an unsubscribe link that works with no login and no session: token = signing.dumps(recipient.pk, salt=UNSUBSCRIBE_SALT). The token itself is the credential, and it ships with Django out of the box.

Notes on Python, Rust, and AI for developers who value deep work over shallow trends.

Read the newsletter →