Programming

Posts about code, programming languages, algorithms, software design, debugging, testing, and the craft of writing software.

2026-06-05Priority Starvation
2026-06-05Braess's Paradox
2026-06-05Rush Hour Displacement
2026-06-05The Convoy Effect
2026-06-05Tandem Queue Blocking
2026-06-04The Inspector's Paradox
2026-06-03Late Merge
2026-06-02Pooled vs. Separate Queues
2026-06-01Queue Nonlinearity
2026-05-31Sojourn Time
2026-05-30Little's Law
2026-05-30How to Not Be Wrong About AI
2026-05-29Queue Formation
2026-05-28Basic Ideas in Queueing Theory
2026-05-27Building a City, Not a Car
2026-05-20Twelve Ways to Be Wrong About AI-Assisted Coding
2026-05-11A Note on LLMs
2026-04-19asimpy Improvements
2026-04-18asimpy Performance Benchmarking
2026-04-01Current Projects
2026-03-30Project Status
2026-03-28An E-Bike for the Mind
2026-03-27Another Modest Proposal
2026-03-26Penguin Geography
2026-03-24Accessibility Improvements
2026-03-15Distributed Systems Design by Example
2026-01-23Updating Snailz
2026-01-14First-of in asimpy
2026-01-11Trying to Understand asimpy
2026-01-10Introducing asimpy
2026-01-05Next Steps for Simulation
2025-12-30Discrete Events
2025-12-08The Real Hardest Problem
2025-12-07Handling Interruptions
2025-12-04The Effects of Rework
2025-12-03You Have to Cancel
2025-12-03In Search of Sturdiness
2025-11-30Observability
2025-11-27Not Created Equal
2025-11-24Analyzing the Simulation
2025-11-23Simulating Multiple Stages
2025-11-22Refactoring the Simulation
2025-11-21Simulating Rework
2025-11-20Making Sense of Simulation
2025-11-19Simulating a Developer Pool
2025-11-18Starting to Simulate
2025-09-18Time Spent on Hardening
2025-08-13This Week's Posts
2025-05-19Some Testing Answers
2025-05-18Two Thirds of a Language
2025-04-21Lazy Loading a Data Package
2025-04-20A Testing Question
2025-03-29Tooling for Snailz
2025-03-08What We Mean by Software Design
2024-12-30Cross One Off My List
2024-12-27Not Very Scalable
2024-12-14Snailz
2024-11-24Unfinished Projects
2024-09-27First Draft of the Webonomicon
2024-09-06How I Explain Code
2024-06-14Human-Scale Software
2024-05-11Volume Two
2024-05-07Code for Thought Interview
2024-04-27Software Design by Example in Python 27: Conclusion
2024-04-26Software Design by Example in Python 26: A Debugger
2024-04-25Software Design by Example in Python 25: A Virtual Machine
2024-04-24Software Design by Example in Python 24: Undo and Redo
2024-04-23Software Design by Example in Python 23: A File Viewer
2024-04-22Software Design by Example in Python 22: Serving Web Pages
2024-04-21Software Design by Example in Python 21: Transferring Files
2024-04-20Software Design by Example in Python 20: A Package Manager
2024-04-19Software Design by Example in Python 19: A Build Manager
2024-04-18Software Design by Example in Python 18: A Database
2024-04-18A New Stack
2024-04-17Software Design by Example in Python 17: Binary Data
2024-04-16Software Design by Example in Python 16: Object Persistence
2024-04-15Software Design by Example in Python 15: Performance Profiling
2024-04-14Software Design by Example in Python 14: Page Layout
2024-04-13Software Design by Example in Python 13: A Code Linter
2024-04-12Software Design by Example in Python 12: A Template Expander
2024-04-11Software Design by Example in Python 11: An HTML Validator
2024-04-10Software Design by Example in Python 10: A File Archiver
2024-04-09Software Design by Example in Python 9: Protocols
2024-04-08Software Design by Example in Python 8: Functions and Closures
2024-04-07Software Design by Example in Python 7: An Interpreter
2024-04-06Software Design by Example in Python 6: Running Tests
2024-04-05Software Design by Example in Python 5: Parsing Text
2024-04-04Software Design by Example in Python 4: Matching Patterns
2024-04-03Software Design by Example in Python 3: Finding Duplicate Files
2024-04-02Software Design by Example in Python 2: Objects and Classes
2024-04-01Software Design by Example in Python 1: Introduction
2024-03-27Disk Usage
2024-03-03Current Projects
2024-02-26My Adventures with Certificates
2024-02-17Concurrent Examples
2024-02-14A Pair of Interviews
2024-01-05What Features of Python Do I Use?
2024-01-03The Other Examples
2023-12-10Research Software Design by Example
2023-11-25LLMs and Institutional Knowledge
2023-11-21One Damned Thing After Another
2023-11-12Software Design Homework
2023-10-01Software Design by Example (Python edition) Has Shipped
2023-09-28Embedded.fm Podcast Appearance
2023-08-27The Weizenbaum Test
2023-08-13I Don't Know What to Think About AI
2023-08-10Language and Library Features for Teaching
2023-07-21Resurrecting the Tidynomicon
2023-07-20Explaining Code
2023-07-12Software Design by Example (Python edition) Now in Beta
2023-07-06Software Design in Python: Status Update
2023-01-29Software Design by Example Summary
2023-01-27Benchmarking Languages
2023-01-27Software Design by Example: Conclusion
2023-01-26Software Design by Example 20: Debugger
2023-01-25Software Design by Example 19: Virtual Machine
2023-01-24Software Design by Example 18: Package Manager
2023-01-23Software Design by Example 17: Module Bundler
2023-01-20Software Design by Example 16: Documentation Generator
2023-01-19Software Design by Example 15: Code Generator
2023-01-18Software Design by Example 14: Style Checker
2023-01-17Software Design by Example 13: Module Loader
2023-01-16Software Design by Example 12: File Interpolator
2023-01-13Software Design by Example 11: Layout Engine
2023-01-12Software Design by Example 10: Build Manager
2023-01-11Software Design by Example 9: Page Templates
2023-01-10Software Design by Example 8: Parsing Expressions
2023-01-09Software Design by Example 7: Pattern Matching
2023-01-08Somewhere Between Hobbes and Wishful Thinking
2023-01-06Software Design by Example 6: Data Tables
2023-01-05Software Design by Example 5: File Backup
2023-01-04Software Design by Example 4: Unit Testing
2023-01-03Software Design by Example 3: Asynchronous Programming
2023-01-02Software Design by Example 2: Systems Programming
2023-01-01Software Design by Example 1: Introduction
2022-12-28Ways to Explain Code
2022-12-28Reading List
2022-12-28First Copy
2022-12-17The Compassionate Programmer
2022-12-01Software Design in Python Glossary
2022-11-21Software Design by Example Personas
2022-11-13A Combinatoric Geometry Problem
2022-11-09Getting Closer
2022-10-26Software Design Homework
2022-10-24Software Design by Example
2022-08-10Hard Problems
2022-05-14The Wes Mongtomery of Software
2022-05-08A Language for Teaching
2022-04-21Software Design by Example
2022-02-2512 Quick Tips for Software Design
2022-02-01What I Would Change in Lox for Teaching
2021-08-18Software Design Webinar
2021-08-05Software Design Rules
2021-03-27The Ghosts in the Debugging
2020-10-12Circular Imports
2020-07-30Wanted: A Notation for 'Why'
2020-04-06Teaching Code Review
2020-01-05Knitting
2019-12-23Empirical Examples
2019-11-19Cutting Corners
2019-06-16Chunks versus Functions
2019-05-28Checking-Driven Development
2019-04-04Not a Hammer
2019-03-21Twelve Weeks, Twelve Tools
2019-03-10The Tool I Want
2019-02-16Late Binding
2019-02-11Examples Wanted for Code Review
2019-02-05Libraries Tell It Like It Is
2019-01-24The Principle of Least Precision
2018-12-29Data Wrangling with JavaScript
2018-12-27Use Case Maps Revisited
2018-12-12JavaScript versus Data Science
2018-11-28Augmenting Error Messages
2018-11-16Non-Standard Evaluation in R
2018-10-26Formatting Functions
2018-04-01Yaks
2018-01-15Procedural versus Declarative
2017-12-27Explanation-Oriented Programming
2017-11-22Diff and Merge for ProseMirror
2017-11-01I'm Probably Wrong Again
2017-09-30Git, Graphs, and Software Engineering
2017-09-13Long Thoughts
2017-07-21Too Soon and From Unexpected Directions
2017-05-22Numerical JavaScript
2016-10-30Close Cousins
2016-09-27The Markov Test
2016-04-01Zen and the Art of Assignment Operators
2016-03-21Registers
2015-07-20Git as GOTO
2015-06-18Why I Am Not Excited About Julia
2015-06-14Reverse Engineering CSS
2015-01-14Language Wars and Others
2014-11-27How to Manage Confidential Data
2013-10-17You Keep Using That Word
2013-09-27The Future: Today
2013-05-02A Rational Computing Process: How and Why to Fake It
2013-03-17Testing Image Processing
2013-02-09The Larch Environment
2012-12-29What Will Programming Look Like in 2020?
2012-12-14Would You Like Your Programming Language to Have a Million Users?
2012-10-20True in Software, True in Life
2012-09-16Does Your Software Look Like This?
2012-07-21How Robust Is Your Programming Language?
2012-06-26Handling Variant Configuration Files
2012-05-10Fish and Bugs
2012-04-09…Which Is Wrong
2012-04-01Sending Email Back in Time
2012-02-14Stack Underflow?
2011-09-16Extensible Programming: A New Hope
2011-09-05Where is the Puck Going to Be?
2011-09-01Renting Cycles Has Never Been Easier
2011-08-22Code Coverage in Lernanta
2011-08-18Spelling, Fairness, and JavaScript
2011-07-20Wait, Not That Bit!
2011-07-12Grown-Up Languages
2011-06-10Hermes FTW
2011-06-07Blueprints Are Not Architecture
2011-06-03Refactoring Yahoo! Pipes
2011-05-28You Doesn't Exist
2011-05-18Catalog Models Like Views and Controllers
2011-03-16Graph Layout, Models vs. Views, and Computational Thinking
2011-03-07Literate Programming
2011-03-01Tuple Spaces (or, Good Ideas Don't Always Win)
2011-02-24An Easy Place to Start: Systems Programming
2011-01-06Gibson's Law in the Small
2010-12-29Tagging and Debugging
2010-12-27Elimination
2010-12-02Programmer Competency Matrix
2010-10-18They're All Small Devices Now
2010-10-08Yes, We *Can* Design Languages for Human Beings
2010-08-05Python in CS1 is Growing Fast
2010-06-24And the Winner Is…
2010-05-22The Practice of Software Development
2010-04-03Can You Name the Programming Language?
2010-03-22Robin Milner: 1934-2010
2010-03-18Testing With Random Data
2010-03-18What Do You See?
2010-03-17Natural Language Wins (Kind Of)
2010-02-17Rory Tulk on Software Testing
2010-02-09TestDrive
2010-02-03Dumber Is Productiver
2010-02-02Engineering Thinking
2010-01-20Punctuate! Punctuate! Punctuate!
2010-01-10Code vs. Messages
2010-01-07The Design of Fossil
2009-12-23Polymorphism
2009-12-22Fossil + NoSQL ?
2009-12-01Minority Rule
2009-11-29Nothing to See Here, Folks---Move Along, Move Along
2009-11-16Bend It 'Til It Breaks
2009-11-08Green Web Hosting
2009-10-06Pie Charts!
2009-10-04Pure Genius
2009-08-28elmcity and WordPress
2009-08-24EveryBlock and Toronto
2009-07-12Why I Miss Command-Line Programming
2009-06-24At Least It's Not Exponential
2009-06-08Maybe AJAX Can Actually *Solve* a Problem
2009-06-01Leapfrogged Again
2009-05-12Error Handling
2009-05-12Beautiful Testing
2009-05-07A Fresh Crop of Summer Interns
2009-05-06Project Totem Pole
2009-05-06Spot the Code Sprint
2009-05-05Opening Up Toronto's Data
2009-05-05'Practical Programming' Is Available
2009-05-01Congratulations to Zuzel Vera Pacheco
2009-04-23We Don't Import Punch Cards Any More
2009-04-15Getting Ready to Wag the Dog
2009-03-25A Short History of Software Engineering
2009-03-25Umm… Remind Me How We Do This?
2009-03-15Russian Version of Beautiful Code
2009-03-11Barbara Liskov Wins Turing Award
2009-02-22Bugs Everywhere
2009-02-21Code Sprint Wrap-Up
2009-02-19Reading Week Code Sprint
2009-02-18Papers
2009-02-12Jason Cohen Thinks Aloud
2009-02-01Once More Unto the REST
2009-01-26Virtualization vs. Web Services
2009-01-15Update on This Term's Projects
2009-01-14Beautiful Architecture
2008-12-26How Do You Determine the Health of a Software Development Project?
2008-12-24Diagnosing Home Network Misconfigurations Using Shared Knowledge
2008-12-18Entry-Level Code Review Procedures?
2008-12-18Beautiful Testing
2008-12-04Python 3.0 is Out (But We're Not Using It Yet)
2008-11-20Happy 25th Birthday, TurboPascal
2008-11-17Maybe If I Write About Them, They'll Go Away
2008-10-16And Search Returns…?
2008-09-19Another Use for Extensible Programming
2008-09-16Comments in JSON?
2008-09-15REST APIs for Batch Operations
2008-09-15How do I enlarge a fizzbar without overwriting the user's snibbit?
2008-08-02I'd Really Like To Draw A Picture…
2008-08-02Where Design Fits In
2008-07-18A Distributed Single Point of Failure
2008-07-06Traceability in Agile Projects
2008-07-02Current Projects
2008-06-25Another DrProject Design Question
2008-06-23Navigating IRC Logs, Nested Forms, Et Cetera
2008-06-10Deleting Roles
2008-05-29More About Integrating IRC into DrProject
2008-05-27Reminded of the Difference Once Again
2008-05-23For Each, Replace
2008-05-16I Will Buy You Lunch…
2008-05-15Another DrProject Design Question
2008-05-02A Question for the Class
2008-05-02Code Review Coincidences
2008-05-01Joel Is Feeling Grumpy Today
2008-04-29An Interview with Donald Knuth
2008-04-25Design Never Ends
2008-04-25DrProject 3.0 Schema
2008-04-17Introducing Stack Overflow
2008-04-15Integration Irony
2008-04-11Feature List
2008-04-11Alternatives to DrProject
2008-04-03Real World Data Causes Perl
2008-03-28An Unexpected Result
2008-03-08Why Developers Don't Do Code Reviews
2008-02-20Where The Puck Is Going To Be (Part 91)
2008-02-15Rationalizing the Admin Interface
2008-02-15Building Filters
2008-02-04You're Not Allowed To Use What You Learn In This Book
2008-02-02Generating Elegance
2008-01-15Structural Programming and Rational Metaprogramming
2008-01-08Where the Puck Is, Part 5
2007-12-31Grassroots Extensibility
2007-11-29Falling Further Behind
2007-10-26The Burning Man of HPC
2007-10-24Wrong Again
2007-10-17Country Codes of the World
2007-09-25Bugs in DrProject
2007-09-17Tweaking
2007-09-12Jon Udell has the Best Job in the World
2007-09-02Managing, Reviewing, and RESTing
2007-08-29How and Why We Draw Code
2007-08-29Diagram of Relationships Between Programming Paradigms
2007-08-09Help Help—My Soil Is Dry and I Can't Germinate
2007-08-03Michael Feathers on Subtext
2007-08-01JBoss vs. Django and What IronRuby Really Means
2007-07-31How Not to Collaborate
2007-07-30YSlow and the Browser as IDE
2007-07-25Schema Changes
2007-07-12User Interface Jam Session
2007-07-11Bryan Cantrill on Recursion
2007-06-28Quinn's Argument: A Swing and a Miss
2007-06-26The Danger of Danger
2007-06-13Does the Future Belong to Javascript?
2007-06-12If You Need AI, You Need a Simpler System
2007-06-12Go On, Convince Me
2007-06-06Java Ecosystems for Python Programmers
2007-05-19RailsConf: Plus Ca Change…
2007-05-17Arrrgghh whimper (or, PySqlite, Matplotlib, and paths)
2007-05-02Chronicle-Recorder and Debugging
2007-04-29Integrating IM into DrProject
2007-03-20In memoriam: John Backus
2007-03-14Extensible Programming Has Arrived
2007-03-08Strawman Proposal for a New Ticketing System
2007-03-01What I Missed Most by Not Going to PyCon
2007-02-20Database Schema to Support Customizable/Extensible Application
2007-02-19Bitten Again
2007-02-14BitFrost
2007-02-10DrProject Architecture
2007-02-08Yahoo Pipes (or, What Took You So Long?)
2007-02-07What I Learned Today
2007-01-31Why Johnny Can't Calendar
2007-01-21Debugging Trick
2007-01-21Udell on use experience vs. user experience
2007-01-21Many Ways to Break
2007-01-18Creating Tables in DrProject
2007-01-14No Such Thing As One Program
2007-01-13Pervasive Computing, Horror, and the Double Chin Effect
2007-01-12Abstraction, Compression, and Errors
2007-01-09Jon Udell on Future Tailors
2006-12-18Further Thoughts on Filing Bugs
2006-12-16Changes to DrProject's Ticketing System
2006-12-10Simplification
2006-11-30Writing Blackboard Plugins
2006-11-28Presto and Responsibility
2006-11-25DrProject Internals: Email
2006-11-19DrProject Internals: Testing
2006-11-11Requirements as Tickets (or, Hierarchy to the Rescue)
2006-11-11Expressing Temporal 'Type' Information in Programs
2006-11-09Can't Get (Directly) There From Here
2006-11-06DrProject Internals: I Wasn't Quite Done With Tickets
2006-11-05DrProject Internals: Tickets Again
2006-11-05Small Scale Real-World Requirements
2006-11-01DrProject Internals: Tickets
2006-10-30DrProject Internals: Parting Notes on the Wiki
2006-10-30Jim Waldo: 'On System Design'
2006-10-28DrProject Internals: Security Part 2
2006-10-27DrProject Internals: Security Part 1
2006-10-23DrProject Internals: Setting the Stage
2006-10-17The Last of September's Reading
2006-09-19The Stradivarius of Coding
2006-09-18A Social Networking Company with a Believable Business Model
2006-09-07Superficially Plausible Business Plan #31
2006-08-25Why Real-World Programming Is Difficult
2006-08-25The Emperor *Still* Has No Brain
2006-08-24EC2: Commoditized Computing
2006-08-23Udell on Debugging
2006-08-23Python Web Frameworks (Yet Again)
2006-08-22Chris Lenz on Django
2006-08-17Oh My God It's Django!
2006-08-14DrProject 1.1 Screencast
2006-08-07Naive SQL(ite) Question
2006-08-04It Isn't Progress Until You Can Debug It
2006-07-30Update on Extensible Programming
2006-07-24Worms for Fishes
2006-07-15Another Database Design Question
2006-07-15Screenshots of DrProject 1.0
2006-07-03Watching Static and Dynamic Analysis Go Mainstream
2006-06-27Next… Design by Contract? (Please)
2006-06-27Why DrProject Is Slow
2006-06-23Perforce: For beginners only…
2006-06-23The ACM's Top 25
2006-06-20As We Near 1.0…
2006-06-19Agility and Romanticism
2006-06-16The Semi-Colon Wars
2006-05-05Book Review: Code Quality
2006-04-20What the World Needs Now Is Diffs, Diffs, Diffs
2006-04-19Making Money from Better Software
2006-04-14Python 3000: What To Leave Out?
2006-04-13Strong Typing, Unit Testing, and Science
2006-04-11The Ruby Is Always Greener…
2006-04-05Perfection Is Achieved Only on the Point of Collapse
2006-03-31Where Next for DrProject?
2006-03-30The Next Phase New Wave Tool Craze
2006-03-29Showstopper: Hanging Processes
2006-03-262020 Hype
2006-03-14DrProject: Transitioning to Kid
2006-03-05Monad and Greasemonkey
2006-03-05Game Play Notation
2006-03-01Usability of Programming Systems
2006-02-27What It Takes to Get Eclipse Out the Door
2006-02-22Python, JavaScript, and Boost
2006-02-21State of DrProject
2006-02-20DrProject: Switching to Kid
2006-02-15Entry-Level Requirements Engineering Revisited
2006-02-11Of DocFests, Marketing Hype, and DrProject
2006-02-04Project Assets
2006-02-02Please Tell Me Python Logging Isn't Supposed to Work This Way
2006-01-23They're Getting Smarter
2006-01-03DrProject kickoff