<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Podcast on</title><link>https://tdhopper.com/tags/podcast/</link><description>Recent content in Podcast on</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 27 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tdhopper.com/tags/podcast/index.xml" rel="self" type="application/rss+xml"/><item><title>The Python Developer Tooling Handbook on The Python Show</title><link>https://tdhopper.com/blog/python-developer-tooling-handbook-on-the-python-show/</link><pubDate>Thu, 27 Aug 2026 00:00:00 +0000</pubDate><guid>https://tdhopper.com/blog/python-developer-tooling-handbook-on-the-python-show/</guid><description>&lt;img src="https://tdhopper.com/images/podcast-interview-min.png" alt="Featured image of post The Python Developer Tooling Handbook on The Python Show" /&gt;&lt;p&gt;&lt;a class="link" href="https://blog.pythonlibrary.org/" target="_blank" rel="noopener"
&gt;Mike Driscoll&lt;/a&gt; invited me onto &lt;a class="link" href="https://www.pythonshow.com/podcast" target="_blank" rel="noopener"
&gt;The Python Show&lt;/a&gt; to talk about the &lt;a class="link" href="https://pydevtools.com/handbook/" target="_blank" rel="noopener"
&gt;Python Developer Tooling Handbook&lt;/a&gt;. We covered how I got into Python, why I built the handbook, the current type checker race, Ruff&amp;rsquo;s autofixes, and why I still think you should have a blog.&lt;/p&gt;
&lt;p&gt;Mike has been writing about Python at &lt;a class="link" href="https://blog.pythonlibrary.org/" target="_blank" rel="noopener"
&gt;Mouse vs Python&lt;/a&gt; for close to twenty years and has written a stack of Python &lt;a class="link" href="https://driscollis.gumroad.com/" target="_blank" rel="noopener"
&gt;books&lt;/a&gt;. &lt;a class="link" href="https://www.pythonshow.com/podcast" target="_blank" rel="noopener"
&gt;Subscribe to it&lt;/a&gt; and go read his blog.&lt;/p&gt;
&lt;h2 id="listen"&gt;Listen
&lt;/h2&gt;&lt;iframe src="https://open.spotify.com/embed/episode/40Qt5oKIpQjI3YkvVg7iX6" width="100%" height="232" frameBorder="0" allowtransparency="true" allow="encrypted-media"&gt;&lt;/iframe&gt;
&lt;h2 id="links"&gt;Links
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.pythonshow.com/podcast" target="_blank" rel="noopener"
&gt;The Python Show&lt;/a&gt; and &lt;a class="link" href="https://www.pythonshow.com/p/57-python-developer-tooling-handbook" target="_blank" rel="noopener"
&gt;this episode&amp;rsquo;s page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.pythonlibrary.org/" target="_blank" rel="noopener"
&gt;Mouse vs Python&lt;/a&gt;, Mike Driscoll&amp;rsquo;s blog&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://driscollis.gumroad.com/" target="_blank" rel="noopener"
&gt;Mike&amp;rsquo;s books&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pydevtools.com/handbook/" target="_blank" rel="noopener"
&gt;Python Developer Tooling Handbook&lt;/a&gt; and its &lt;a class="link" href="https://pydevtools.com/handbook/topics/" target="_blank" rel="noopener"
&gt;topics page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://pythonplot.com/" target="_blank" rel="noopener"
&gt;pythonplot.com&lt;/a&gt;, my guide to plotting in Python&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://podcast.tdhopper.com/" target="_blank" rel="noopener"
&gt;Into the Hopper&lt;/a&gt;, my podcast&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://github.com/python-developer-tooling-handbook/makefile.uv" target="_blank" rel="noopener"
&gt;makefile.uv&lt;/a&gt;, a drop-in Makefile for uv-backed test orchestration&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://scikit-learn.org/" target="_blank" rel="noopener"
&gt;scikit-learn&lt;/a&gt;, &lt;a class="link" href="https://flask.palletsprojects.com/" target="_blank" rel="noopener"
&gt;Flask&lt;/a&gt;, &lt;a class="link" href="https://docs.pytest.org/" target="_blank" rel="noopener"
&gt;pytest&lt;/a&gt;, &lt;a class="link" href="https://pytorch.org/" target="_blank" rel="noopener"
&gt;PyTorch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.astral.sh/uv/" target="_blank" rel="noopener"
&gt;uv&lt;/a&gt; and &lt;a class="link" href="https://docs.astral.sh/ruff/" target="_blank" rel="noopener"
&gt;Ruff&lt;/a&gt; from &lt;a class="link" href="https://astral.sh/" target="_blank" rel="noopener"
&gt;Astral&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Type checkers: &lt;a class="link" href="https://docs.astral.sh/ty/" target="_blank" rel="noopener"
&gt;ty&lt;/a&gt;, &lt;a class="link" href="https://pyrefly.org/" target="_blank" rel="noopener"
&gt;Pyrefly&lt;/a&gt;, &lt;a class="link" href="https://zubanls.com/" target="_blank" rel="noopener"
&gt;Zuban&lt;/a&gt;, &lt;a class="link" href="https://mypy-lang.org/" target="_blank" rel="noopener"
&gt;mypy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://realpython.com/" target="_blank" rel="noopener"
&gt;Real Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://docs.claude.com/en/api/agent-sdk/overview" target="_blank" rel="noopener"
&gt;Anthropic Agent SDK&lt;/a&gt; and &lt;a class="link" href="https://www.claude.com/product/claude-code" target="_blank" rel="noopener"
&gt;Claude Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="transcript"&gt;Transcript
&lt;/h2&gt;&lt;h3 id="getting-into-python"&gt;Getting into Python
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Hello and welcome to The Python Show. I&amp;rsquo;m your host, Mike Driscoll, and today I&amp;rsquo;m honored to have a guest named Tim Hopper on the show. He&amp;rsquo;s the author of the Python Developer Tooling Handbook. Welcome to the show, Tim.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; Thanks for having me on, Mike.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; It&amp;rsquo;s good to have you. When I do these shows, I like to start out by having my guests tell us a little about their journey into programming.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; That was an interesting question to reflect on, because like a lot of people, my path was nonlinear.&lt;/p&gt;
&lt;p&gt;The first thing I ever programmed was a TI-83 graphing calculator.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Nice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; That was in the &amp;rsquo;90s in middle school, back when you could write TI-BASIC. My friends and I made random number generators and things like that.&lt;/p&gt;
&lt;p&gt;Later in high school I got into building static websites. I was the perfect age for Geocities. That got me curious about the dynamic side, so I taught myself PHP to do a little server-side work.&lt;/p&gt;
&lt;p&gt;Then in college, and I&amp;rsquo;ll give you the short version, I started studying computer science but realized I was more interested in the theory than most of the CS students were. I wasn&amp;rsquo;t that interested in programming itself. I ended up majoring in math and minoring in CS. I dabbled in C++, and in my math classes I used Mathematica a lot, which probably set me up to enjoy Python later as a dynamic scripting language.&lt;/p&gt;
&lt;p&gt;It was finally in grad school, when I was 24 and trying to figure out what I was going to do with my life, that I realized programming was a great route to a job. This was 2010, when data science was blowing up, at least on the internet. People I respected, like Hilary Mason and John Cook, were using Python. So I started dabbling, and eventually I read the O&amp;rsquo;Reilly book &lt;em&gt;Learning Python&lt;/em&gt; cover to cover and then tried it out, the way you learned a language back then.&lt;/p&gt;
&lt;p&gt;That was sixteen and a half years ago. I&amp;rsquo;ve been using Python ever since.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; You&amp;rsquo;ve been using it almost as long as I have. That&amp;rsquo;s cool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; When I was first getting into it, I met someone who had used Python for seven years and thought that was an eternity. Now I&amp;rsquo;m sixteen years in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; People keep telling me, Mike, why do you only do Python? You can&amp;rsquo;t have a real job and just do Python. And I&amp;rsquo;m like, what are you talking about? I&amp;rsquo;ve been doing it for twenty years now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; It&amp;rsquo;s a fun language.&lt;/p&gt;
&lt;h3 id="favorite-packages"&gt;Favorite packages
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Speaking of fun things about Python, what are your favorite Python packages?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; Another interesting question, and in the long run it&amp;rsquo;s the one that interests me most.&lt;/p&gt;
&lt;p&gt;The one that helped make my career is scikit-learn. I found it when I was getting interested in machine learning, and it&amp;rsquo;s still one of the most beautifully implemented tools out there. The model for how the pieces fit together is brilliant, and it taught me a lot about machine learning. The documentation has always been excellent. I don&amp;rsquo;t use it as much now, for a variety of reasons, but I&amp;rsquo;m sure that hasn&amp;rsquo;t changed.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a great example to the Python community of building world-class software. It&amp;rsquo;s been used by more companies than anyone will ever know, on more projects, by researchers all over the world. It has a special place in my heart. The first talk I ever gave on Python was at a local meetup on scikit-learn, and I have a friend in the Raleigh area whose career trajectory I helped set when he came to that talk and got into data science.&lt;/p&gt;
&lt;p&gt;Another oldie but goodie is Flask. I&amp;rsquo;ve never been a great web developer, and thankfully AI tools can do a lot of that work for me now, but I built so many websites and APIs on Flask over the years. pytest is probably another favorite, and it&amp;rsquo;s similar: both make it easy to start on something that would be painful in another language, or with a less careful implementation. Being able to spin up a web server quickly and write Python that talks to the browser was very cool to learn early on.&lt;/p&gt;
&lt;p&gt;These days if I want a website, I tell Claude Code to make me one, because I&amp;rsquo;ve never been a front-end person. But I like to share things with people, and that shaped me a lot.&lt;/p&gt;
&lt;p&gt;So: scikit-learn and Flask, with an honorable mention to pytest.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I like Flask too, but whenever I think about it I&amp;rsquo;m like, that thing started out as a joke by the main guy, and it&amp;rsquo;s so funny that it&amp;rsquo;s become number three, I want to say, in the Python web frameworks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; It&amp;rsquo;s pretty amazing. A lot of folks use FastAPI now, but we wouldn&amp;rsquo;t have FastAPI without Flask. It set the stage, and it&amp;rsquo;s still widely used.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; You mentioned scikit-learn. What&amp;rsquo;s the new popular machine learning package for Python, do you know?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; A lot of people still use scikit-learn for traditional machine learning. In the deep learning and LLM world, PyTorch leads the charge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Okay.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; Which is a surprising twist over the last ten years. PyTorch started out, from my perspective, as the thing academics used. Now it&amp;rsquo;s everywhere in industry.&lt;/p&gt;
&lt;p&gt;You can do some of the same things in it that you&amp;rsquo;d do in scikit-learn, but they aren&amp;rsquo;t equivalents. I don&amp;rsquo;t know if people have settled on a term for it, but there&amp;rsquo;s still a lot of interesting pre-deep-learning machine learning work, and it&amp;rsquo;s hard to beat scikit-learn there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Since you&amp;rsquo;re doing stuff with agents, is there a Python library you&amp;rsquo;d recommend as a good intro to using agents with Python?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I don&amp;rsquo;t have a lot of experience there. Mostly I rely on Claude Code or Codex.&lt;/p&gt;
&lt;p&gt;I have tinkered with Anthropic&amp;rsquo;s Agent SDK in Python, which is neat, and one of the superpowers is that Claude Code is quite good at using it. Instead of Claude Code as a generic agent that writes code and does things on your computer, you can build your own agent with access to specific tools that you define. I&amp;rsquo;ve experimented with that on some non-code research projects, adding data sources as tools the agent can reach. It&amp;rsquo;s fun to play with, but it hasn&amp;rsquo;t been a big focus of mine.&lt;/p&gt;
&lt;h3 id="why-the-handbook-exists"&gt;Why the handbook exists
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; That&amp;rsquo;s totally fine. I was curious because it sounds like you do more with agents than I do. Let&amp;rsquo;s pivot and move on to you becoming an author. How did you get into book writing?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I don&amp;rsquo;t know that I think of myself as a book writer. I do think of the Python Developer Tooling Handbook as a book, in the sense that it&amp;rsquo;s more than documentation. It is documentation, but it&amp;rsquo;s trying to bring cohesion to a topic that has lacked cohesion basically forever in the Python world.&lt;/p&gt;
&lt;p&gt;A little backstory on me: I enjoy understanding things and then explaining the ones other people don&amp;rsquo;t understand. If people are talking a lot about something poorly understood, I get this drive to dig in, even when I don&amp;rsquo;t understand it well myself.&lt;/p&gt;
&lt;p&gt;One of my earlier Python projects is still up, and I just revised it: pythonplot.com, a site about making data visualizations in Python. Ten years ago, ggplot in R was the gold standard, and there was a lot of confusion about how to do the same things in Python. People compared Matplotlib to ggplot when they aren&amp;rsquo;t the same kind of thing. So I rage-built a site to help myself make plots, and to help others along the way.&lt;/p&gt;
&lt;p&gt;The handbook came from the same place. My own work pulled me deeper into packaging: building packages, helping developers manage environments. And over ten years of conversations on social media and with friends, two things kept showing up. People are confused about this stuff. And people who are confused about it talk very confidently about Python and misrepresent it.&lt;/p&gt;
&lt;p&gt;Then there&amp;rsquo;s the sheer growth in tooling, not just packaging. Python has had all these formatters and packaging tools. I remember when pytest and nose competed over testing, and then nose2. We have this breadth of tools and no great source on which ones to use, or how to actually use them.&lt;/p&gt;
&lt;p&gt;Every so often a comparison of Python packaging tools hits the front page of Hacker News. Someone put a lot of time into that blog post, and it&amp;rsquo;s out of date almost immediately. It isn&amp;rsquo;t always accurate either, and a post can&amp;rsquo;t go deep enough for people to understand what you&amp;rsquo;re talking about.&lt;/p&gt;
&lt;p&gt;So for a few years I&amp;rsquo;ve wanted to bring clarity here. My general view, which predates uv and which uv has strengthened, is that the tooling is good. The hard part is wading through it and figuring out how to apply it to your situation.&lt;/p&gt;
&lt;p&gt;I wanted the handbook to be comprehensive, opinionated, beginner friendly, and able to grow. Mostly I wanted it to work like Wikipedia, where you read something and click around to dig deeper. One of its strengths is aggressive cross-linking. If you&amp;rsquo;re reading about uv and it mentions wheels, and you don&amp;rsquo;t know what a wheel is, you don&amp;rsquo;t have to sit there wondering or go Google it. I&amp;rsquo;ll give you that too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Nice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; The motivation is a few things at once.&lt;/p&gt;
&lt;p&gt;Python gave me my career, and I want to give back to the community. And I have this urge to explain what&amp;rsquo;s poorly explained and commonly misrepresented.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a can of worms here. The Python Packaging Authority has a guide on packaging, which I have some criticisms of. There&amp;rsquo;s the Python documentation, and realpython.com, which I know you&amp;rsquo;re involved with, and the individual docs from Astral and other projects. But I don&amp;rsquo;t see another single source that tries, in a targeted way, to answer these questions. My hope is to be a source that humans and coding agents both treat as canonical, and to keep it current and useful.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s a long answer to your short question.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; That&amp;rsquo;s a good answer though. The last month, when I&amp;rsquo;ve done Google searches on various Python topics, your handbook has popped up a lot as a potential answer to my question.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; That&amp;rsquo;s great. I spend a lot of time working with Claude Code on SEO, and that&amp;rsquo;s my number one source of traffic by far.&lt;/p&gt;
&lt;p&gt;In case there&amp;rsquo;s not another opportunity to say it: every page has a feedback form at the bottom. If it&amp;rsquo;s not useful, or it doesn&amp;rsquo;t answer your question, or you think it&amp;rsquo;s wrong, tell me. It&amp;rsquo;s just me behind it, and I want that feedback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I like that. That&amp;rsquo;s kind of what my blog originally was. It was supposed to be a forum. People would ask me questions and I&amp;rsquo;d sometimes write new articles based on those questions. Then of course I got all the spam, so I had to disable some of that feedback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I&amp;rsquo;ve had to tinker with the spam settings on mine too. Either I&amp;rsquo;m missing a bunch of stuff or the filtering is holding up for now.&lt;/p&gt;
&lt;p&gt;It isn&amp;rsquo;t an open source project. You can&amp;rsquo;t open a pull request. I own it and I edit it, but I welcome feedback. This is my way to contribute to a community that has meant the world to me. I use Python every day at work, and it&amp;rsquo;s fed my family for a long time, so I&amp;rsquo;m glad to give back. I&amp;rsquo;ve done little open source things here and there, but I&amp;rsquo;ve never been a big maintainer. This has been a great outlet.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I keep thinking one day I&amp;rsquo;m going to come up with something cool and put it on GitHub, but so far it&amp;rsquo;s just little tiny projects mainly for myself that sometimes people find helpful.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; That&amp;rsquo;s a great place to start, and once in a while those take off. You never know.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; True. And I think it&amp;rsquo;s a good idea that you don&amp;rsquo;t let PRs happen, because some of these projects have started to have to turn off open PRs because of all the AI junk.&lt;/p&gt;
&lt;h3 id="whats-next-for-the-handbook"&gt;What&amp;rsquo;s next for the handbook
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Are there any new projects you&amp;rsquo;re working on? A new book, a new site, something to look forward to later this year?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I tinker a lot, like you, mostly on things for myself. I&amp;rsquo;ve enjoyed letting AI agents build websites for me. Recently I&amp;rsquo;ve been talking to Claude Code about my workout routines and having it write new plans, and then I figured I&amp;rsquo;d put it up on Cloudflare as a website. I do a lot of that now, where I&amp;rsquo;m happy to be the audience of one.&lt;/p&gt;
&lt;p&gt;But my biggest effort is the handbook, and there&amp;rsquo;s a lot left to do.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m exploring what best practices look like for writing Python with agents like Claude Code, which is still evolving. Profiling barely gets touched in the handbook and I&amp;rsquo;d like to develop it. I&amp;rsquo;ve been publishing more on PyTorch and other packages that run on GPUs, which Python supports poorly. Getting those installed to run on your GPU takes a lot of hacks right now, so I&amp;rsquo;m documenting what I can.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s also ongoing maintenance. I use an agent to follow GitHub release notes for the big projects, Astral&amp;rsquo;s tools and pip and other core projects, so it can surface anything significant and I can keep pages current. Astral is moving faster than ever since joining OpenAI.&lt;/p&gt;
&lt;p&gt;What I&amp;rsquo;m struggling to keep up with is ty, Astral&amp;rsquo;s type checker, and Pyrefly, the one out of Meta. Both are adding functionality fast, and I&amp;rsquo;m waffling on which to recommend. I like to give good recommendations on the site, and those two are neck and neck.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; What about Zuban? I feel like that&amp;rsquo;s up there too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I have a page on it, but I haven&amp;rsquo;t experimented with it as much.&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;re all hard to test. Everybody&amp;rsquo;s use case is different, and even defining what someone wants out of a type checker is hard. You can see that in the different philosophies behind the tools.&lt;/p&gt;
&lt;p&gt;I still spend time on all of this, watching the ecosystem develop. My biggest source of traffic by far is uv, which makes sense: it&amp;rsquo;s probably the most used Python tool right now in terms of people reaching for it directly. I try not to duplicate the docs, so I look for my own spin and different angles. They iterate on uv fast, so keeping up takes work.&lt;/p&gt;
&lt;p&gt;A couple of small things have spun out of the handbook, and they&amp;rsquo;re on its GitHub page. I made makefile.uv for people who organize projects with Make. It tries to make uv easy to use, and it can partly replace tox by letting you test across multiple Python versions with uv. I haven&amp;rsquo;t figured out how to market it. But as I work on the handbook I keep asking whether we&amp;rsquo;re using certain tools just because, and whether there&amp;rsquo;s another way. That&amp;rsquo;s where it came from, and tox may be a tool some workflows could replace.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not going to become a tool developer, though. The handbook is my focus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I was just browsing through the topics covered because I was curious what other tools you covered.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I did a big reorganization this spring. Go to pydevtools.com and click the topics page and you&amp;rsquo;ll get a high-level organization I didn&amp;rsquo;t have before: testing, packaging, security, scientific Python, AI assistance, type checking, and so on. There are a dozen topical pages now. If you think something high-level is missing, I&amp;rsquo;d love to hear it.&lt;/p&gt;
&lt;p&gt;Documentation is another light one. I have some basic material there, but it could be developed a lot. I&amp;rsquo;m cautiously optimistic that AI tools will get people to have good documentation instead of no documentation, though the old foundations like Sphinx and MkDocs are still valuable.&lt;/p&gt;
&lt;h3 id="the-type-checker-race"&gt;The type checker race
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I was looking at this and wondering if you want to cover mypy more, or, what is that, the one where you package Python scripts into an executable? I don&amp;rsquo;t think that&amp;rsquo;s even on there.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I have a little of that. There are some examples under packaging.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Okay.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I haven&amp;rsquo;t spent much time on those; they don&amp;rsquo;t get a lot of traffic. But cx_Freeze and some of the others are in there.&lt;/p&gt;
&lt;p&gt;mypy is one where I&amp;rsquo;d want your thoughts. If you&amp;rsquo;re adopting a type checker today, I&amp;rsquo;d point you to Pyrefly or ty. Pyrefly even ships mypy migration tools for your configs. mypy&amp;rsquo;s speed is hard to argue for against these Rust-based tools.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; My take, because I ran mypy until, I want to say, January of this year, or maybe December of last. I switched because ty is so much faster, right? But ty, because it&amp;rsquo;s still technically alpha, doesn&amp;rsquo;t catch everything mypy was catching. After using mypy for over a year, I still see stuff that ty doesn&amp;rsquo;t catch, and I&amp;rsquo;m like, these guys are so far behind on catching everything mypy used to catch. That makes me wonder if I should have gone with Pyrefly, which I wasn&amp;rsquo;t aware of when I switched to ty.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; Pyrefly has come a long way this year. Some of the difference is philosophical: ty tries not to be annoying, and that means it lets things through. Pyrefly aims to be more comprehensive.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve thought about whether you could build a set of baseline cases to compare them, and it&amp;rsquo;s genuinely hard. Every project thinks about types differently, and I can&amp;rsquo;t come up with a single metric that would tell you which one to use. Both are powerful. I&amp;rsquo;ve been impressed by how far Pyrefly has come and how much it does now.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; I want to try it out some more. If I recall correctly, Pyrefly started late in 2025, so it&amp;rsquo;s not even quite a year old. That&amp;rsquo;s when Zuban started, and I think ty was only a month or two younger, or older, so to speak. It&amp;rsquo;s weird that they all came out in 2025.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; Meta is investing heavily in Pyrefly and using it widely inside the company. I&amp;rsquo;ve talked to some of the people on it. Their first GitHub commits are August of 2025, but they&amp;rsquo;d been working on it internally before that, and for now they&amp;rsquo;re committed to it as essential infrastructure for Python at Meta, which is still huge in Instagram, for example. It has the kind of internal backing that nothing else in Python has right now outside of CPython itself, because they have so many users. They&amp;rsquo;re responsive, too. Astral and Pyrefly both run Discord servers where they answer questions and take feedback.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s fascinating where we&amp;rsquo;ve landed. Meta is supporting a major Python project in a big way, and now OpenAI, by acquiring Astral, is supporting a core part of Python. That&amp;rsquo;s striking for those of us who have been around a while. You remember how meager the support was fifteen years ago.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; mypy came out in 2014, and it was, and I&amp;rsquo;m not sure if it still is, originally created by Dropbox. I don&amp;rsquo;t know if they&amp;rsquo;ve continued to develop it or if they just completely open-sourced it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I&amp;rsquo;m not sure.&lt;/p&gt;
&lt;h3 id="complexity-checks-and-ruffs-autofixes"&gt;Complexity checks and Ruff&amp;rsquo;s autofixes
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; What was the other thing I was going to ask? Oh, have you thought about talking about complexity checkers or stuff like that?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I haven&amp;rsquo;t. Do you have thoughts on them? I haven&amp;rsquo;t looked in years, and I know the McCabe ones have gotten pushback over whether they&amp;rsquo;re actually valuable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Ruff has support for a complexity checker built into it, so I use that a little. Primarily to force, so, the people I work with are a wide variety. We have interns and we have people hired right out of college and then basically everyone in between. You can end up with some really screwy code because of that. So I started adding a gate to protect us from getting really complex code, because it&amp;rsquo;s hard to review. If they put in something with all these different switch statements and if-elses plus other things in it, I&amp;rsquo;m like, that&amp;rsquo;s not a good function to begin with. You&amp;rsquo;re not really doing DRY. So I encouraged them by having that complexity checker: if you hit it, which is set to about 10 I want to say, you should fix it and try to make your code better. I&amp;rsquo;m not real strict about it, but I am strict enough that they have to fix it, because it bugs me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; That&amp;rsquo;s interesting. I should look at it again. It&amp;rsquo;s C901 in Ruff, the McCabe check. I&amp;rsquo;d be curious whether it&amp;rsquo;s a useful way to rein in coding agents that make things overly complex.&lt;/p&gt;
&lt;p&gt;One thing I&amp;rsquo;ve loved in recent years, and I think it&amp;rsquo;s underappreciated, is Ruff adding autofixes for so many of its checks. Turn that on in your editor, with the growing set of good rules like the SIM class for simplifying code, and small static checks catch a lot of this early. Not perfectly. As the scope of the complexity widens it gets harder to rein in. But on a greenfield project you can enable a lot of it aggressively and let Ruff tell you what good style looks like today.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; That&amp;rsquo;s cool. I&amp;rsquo;ve been meaning to go back, because with Ruff&amp;rsquo;s 0.16 release I think they enabled like 400 additional rules. I have yet to go through the entire list to see what they&amp;rsquo;ve enabled. But it didn&amp;rsquo;t break anything by upgrading.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I think it&amp;rsquo;s great, because they&amp;rsquo;ve been conservative about rules, and overly conservative in my view, since most people enable the defaults and move on. I have some content in the handbook on recommending rules. Now they&amp;rsquo;re recommending much more out of the box, which is good. Upgrading is easy too, and a lot of people already have the rules they use pinned. My own project upgraded without issue. For anyone on the defaults, that was a big step forward.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m looking at the flake8-simplify class, SIM, right now. It has maybe 40 rules. A complex expression that could just be &lt;code&gt;True&lt;/code&gt; or &lt;code&gt;False&lt;/code&gt;? It&amp;rsquo;ll rewrite it. Using an index variable where &lt;code&gt;enumerate&lt;/code&gt; would do? Same. Little Python things, nice cleanups, and having them applied for you, fast, in your editor is really neat.&lt;/p&gt;
&lt;h3 id="advice-for-writing"&gt;Advice for writing
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; We&amp;rsquo;re going to pivot slightly, but do you have any tips for working on these blog posts or your book, for someone else who&amp;rsquo;d like to get started doing something similar?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; Part of it is that you can just do it these days. The sky&amp;rsquo;s the limit, which is exactly why constraining yourself is smart.&lt;/p&gt;
&lt;p&gt;Look at a site like Real Python. It takes on the breadth of Python, which is great and has been good for the community. When I thought about what I could do, I knew I couldn&amp;rsquo;t do everything, so I picked one area I thought I could do well. Constraints improve the quality of the work.&lt;/p&gt;
&lt;p&gt;The other part, as I said earlier, is that you&amp;rsquo;re building your own understanding. Find what people are confused about and explain it. That&amp;rsquo;s half my blog. tdhopper.com is mostly me explaining things that seem to confuse people, and that&amp;rsquo;s useful information to have out there.&lt;/p&gt;
&lt;p&gt;I still recommend having a blog, even if you don&amp;rsquo;t update it often. It&amp;rsquo;s useful, and it&amp;rsquo;s fun to share things. Explaining something is often how you come to understand it, and that attitude carries you a long way.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s plenty of opportunity left. I&amp;rsquo;m fairly convinced Python will keep getting bigger, in no small part because AI tools like Python, and that makes programming more accessible than ever. I was talking to people at my co-working space who aren&amp;rsquo;t developers at all, one who runs a nonprofit and one who runs a landscaping company, and they both said some version of: we don&amp;rsquo;t really know what Python is, but we see our agents writing Python files. They&amp;rsquo;re solving problems in their own domains with AI and watching Python get generated.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Nice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; As that happens, these agents have to learn somewhere. They can consolidate across docs, but I&amp;rsquo;ve taken the approach of making the Python Developer Tooling Handbook as accessible to agents as possible, so people looking for help get good answers. Once in a while someone will come see the site. Often they&amp;rsquo;ll get the help without any reference to me, and that&amp;rsquo;s okay too.&lt;/p&gt;
&lt;p&gt;My point is that the age for this kind of thing isn&amp;rsquo;t over. Python keeps growing, and even when AI can do the work, people still have questions and go looking for answers.&lt;/p&gt;
&lt;p&gt;We haven&amp;rsquo;t talked much about what the handbook means for companies, but my general philosophy is that a lot of them underinvest in their Python developer experience. They let every team figure it out alone instead of saying, here are the best practices at this organization.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s my long rambling answer. If I were writing it, I&amp;rsquo;d be clearer than I&amp;rsquo;ve spoken it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; What I would say, if someone asked me something like that, is that you want to create a blog for yourself first, because you want to record what you&amp;rsquo;ve learned. I&amp;rsquo;m not good at memorizing everything, because I&amp;rsquo;m usually drinking from a firehose. So I solved that problem, and I want to write it in a generic way so I don&amp;rsquo;t forget how to do this, and I&amp;rsquo;ll put it on my blog. And guess what, it might be next year, it might be next month, but I know I can go back to my own blog and solve my problem a lot faster because I already have that information there. If that helps someone, that&amp;rsquo;s great.&lt;/p&gt;
&lt;p&gt;Point two is that I want to write it in a way that can help someone else, so I try not to throw a bunch of slop onto the website. I try to make it look nice and understandable so the next person who reads it doesn&amp;rsquo;t have to ask me a bunch of questions.&lt;/p&gt;
&lt;p&gt;Thirdly, and I never thought about this when I started my blog, employers look at that. They&amp;rsquo;re like, oh, you&amp;rsquo;re active in the community, you&amp;rsquo;re giving back, people find your content useful. That actually goes well on your resume or CV. The same goes with GitHub. That&amp;rsquo;s also your resume. So be careful not to publish crap on your GitHub. Vet it a little, run it through Ruff or whatever, make it nice, because once it&amp;rsquo;s out there that&amp;rsquo;s what people look at. That&amp;rsquo;s how they get to know you.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I fully agree. I&amp;rsquo;ve tried to do that for fifteen years, and I wish I&amp;rsquo;d started earlier. It&amp;rsquo;s fun to go back through years of posts and remember things I used to know while reading about them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; It&amp;rsquo;s really funny to Google something and find your own answer, and it&amp;rsquo;s like, I did know this at some point.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; Yes.&lt;/p&gt;
&lt;h3 id="hobbies"&gt;Hobbies
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; My last question for you today: do you have any non-technical hobbies that you like to do?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I have four small children, so I don&amp;rsquo;t have a ton of time for hobbies.&lt;/p&gt;
&lt;p&gt;In my adult life I&amp;rsquo;ve become an armchair historian, mostly interested in the history of religion in America. One project over the last year has been experimenting with how AI agents can help with that: reviewing documents, synthesizing them, even generating podcasts about what they find. I tinker on it when I have time. I&amp;rsquo;m also interested in the history of science and the history of computing and software development.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Cool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I wasn&amp;rsquo;t interested in history at all until after college. Now it&amp;rsquo;s one of my favorite things. Those are my side projects.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Awesome. I really appreciate you taking some time out today to be on the show, and for those of you listening, I&amp;rsquo;m going to include all the links we mentioned during the show so you can go check out Tim&amp;rsquo;s work, support him, give him some good feedback, and help him continue growing his handbook.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tim:&lt;/strong&gt; I&amp;rsquo;d love feedback from folks, and it&amp;rsquo;s great to meet you, Mike.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mike:&lt;/strong&gt; Thanks so much for being on the show.&lt;/p&gt;</description></item></channel></rss>