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-29Queue Formation
2026-05-28Basic Ideas in Queueing Theory
2026-05-27Building a City, Not a Car
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-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-10-18One Small Command
2025-09-05Mastodon and Webbly
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
2025-01-26Human Connection
2024-12-30Cross One Off My List
2024-12-27Not Very Scalable
2024-12-14Snailz
2024-11-30Another Static Site Generator for Lessons
2024-10-12Browsercast Revisited
2024-09-06How I Explain Code
2024-06-14Human-Scale Software
2024-04-22Background Knowledge
2024-04-18A New Stack
2024-04-11What I Need in a Static Site Generator
2024-03-27Disk Usage
2024-03-08Our Process
2024-03-03Current Projects
2024-02-26My Adventures with Certificates
2024-02-25Community Norms
2024-02-22Code, Cucumbers, and LLMs
2024-02-17Concurrent Examples
2024-01-20Including Boilerplate Files in Jekyll
2024-01-05What Features of Python Do I Use?
2023-11-25LLMs and Institutional Knowledge
2023-11-13Replacing Make
2023-10-22Building a Ramp
2023-09-09An Approach to Motivating Coding
2023-08-27The Weizenbaum Test
2023-08-10Language and Library Features for Teaching
2023-07-16Tooling a Book
2023-06-13Making a Book
2023-06-12Chapter Dependencies
2023-06-12Book Extensions
2023-03-12Building a Book
2023-03-04The Only Features I Need
2023-01-29Styling Diagrams for Software Design by Example
2023-01-24Commands I Use
2023-01-18Another Standard Model
2023-01-14Do These Tools Exist?
2022-12-29The Fourth Tradition
2022-12-28Ways to Explain Code
2022-12-18Sessioncasting
2022-12-14Teaching in the Third Dimension
2022-12-04I Want a Memory Diagram Generator
2022-11-30What I Want for Code in Textbooks
2022-11-18Debuggable Explanations
2022-11-13A Combinatoric Geometry Problem
2022-11-13The Notebook Not Taken
2022-10-29Throttling
2022-08-10Hard Problems
2022-05-14The Wes Mongtomery of Software
2021-12-26Effort Estimation
2021-09-23More Thoughts on Document Compilers
2021-08-05Software Design Rules
2021-03-27The Ghosts in the Debugging
2021-03-10Building a Book (Part 2)
2021-02-10Building a Book
2021-01-17Punchcards Considered Harmful
2021-01-17The Page Is Not The Lesson
2020-10-21Tools
2020-10-12Circular Imports
2020-09-13Static Lesson Generators
2020-07-30Wanted: A Notation for 'Why'
2020-04-06Teaching Code Review
2020-01-05Knitting
2019-12-17Measuring Software Tools
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-01-24The Principle of Least Precision
2018-12-29Data Wrangling with JavaScript
2018-12-27Use Case Maps Revisited
2018-12-14No Straight Pipeline
2018-11-30Lesson Installation
2018-11-28Augmenting Error Messages
2018-11-16Non-Standard Evaluation in R
2018-07-05Isaac Ezer's Dragnet
2018-04-01Yaks
2018-03-24Grand Unified Editor Theory
2018-03-17I Can't (Quite) Teach JavaScript
2018-03-09Tables
2018-01-26Assessing Competence
2017-12-27Explanation-Oriented Programming
2017-12-06The New Standard Model
2017-11-22Diff and Merge for ProseMirror
2017-11-01I'm Probably Wrong Again
2017-09-30Git, Graphs, and Software Engineering
2017-05-22Numerical JavaScript
2016-12-05Normal
2016-10-23Programming as Theory Building
2016-09-05We Still Can't Have Nice Things Together
2016-06-04Knitting
2016-04-01Zen and the Art of Assignment Operators
2016-03-21Registers
2016-03-19Continuous Installation Checking
2016-03-13In My Better World
2016-03-05Complexity vs. Subtlety
2015-11-15Miscellaneous Projects
2015-07-20Git as GOTO
2015-07-01Pushing Back
2015-06-24Using Jekyll for Lessons
2015-06-18Why I Am Not Excited About Julia
2015-06-14Reverse Engineering CSS
2015-06-11Why We Can't Have Nice Things
2015-04-13The Future Then and Now
2015-01-14Language Wars and Others
2014-11-27How to Manage Confidential Data
2014-10-29Pandoc and Building Pages
2014-07-21Using a Package Manager for Lessons and Papers
2014-03-30Announcing NBDiff
2014-03-14You and Jimi Hendrix
2014-02-09An Online Peer Instruction Tool
2013-08-23Two Cheers for GitHub
2013-06-13Problems with Pandoc
2013-05-24Browsercast
2013-03-24Using the IPython Notebook as a Teaching Tool
2013-02-09The Larch Environment
2013-01-22Record and Playback in the IPython Notebook
2012-12-29What Will Programming Look Like in 2020?
2012-12-14Would You Like Your Programming Language to Have a Million Users?
2012-11-27Alpha Testing Ideas for the IPython Notebook
2012-11-19The Tool (I Think) We Need To Do Peer Instruction Online
2012-11-19Who Wants To Build a Faded Example Tool for the IPython Notebook?
2012-11-16Who Wants To Write a Little Code?
2012-10-28Usability Testing and Instructional Design
2012-10-20True in Software, True in Life
2012-10-04Wanted: An Entry-Level Provenance Library
2012-09-16Does Your Software Look Like This?
2012-08-29A Problem With Badges
2012-07-30Record and Playback
2012-07-22IPython Notebook + Towtruck + Etherpad + Slide Drive = Win
2012-07-21How Robust Is Your Programming Language?
2012-06-26Handling Variant Configuration Files
2012-05-10Fish and Bugs
2012-03-05Programs as Experimental Apparatus
2012-03-01ULP (or, This is tricky and perhaps profound)
2012-02-22Converting PowerPoint to SVG: Help Needed
2012-02-14Stack Underflow?
2012-01-29A Browser-Based Programming Tool That's Better Than Many Desktop Tools
2012-01-07I Have a Cunning Plan (or, Making Money by Doing Good)
2011-12-16PowerPoint + Visio, but in Javascript?
2011-09-19Past and Future
2011-09-17The Simplest Web That Could Possibly Work
2011-09-16Extensible Programming: A New Hope
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-13It Shouldn't Still Hurt This Much
2011-06-03Refactoring Yahoo! Pipes
2011-05-18Catalog Models Like Views and Controllers
2011-04-26Competence
2011-03-07Literate Programming
2011-03-01Tuple Spaces (or, Good Ideas Don't Always Win)
2011-02-11Ground Up, in No Particular Order
2011-01-19Making System Administrators' Lives Easier
2010-12-29Tagging and Debugging
2010-12-29Instead of PowerPoint
2010-12-27Elimination
2010-12-26Local Subversion Repositories
2010-12-02Programmer Competency Matrix
2010-10-18They're All Small Devices Now
2010-10-14Dexy
2010-10-08Yes, We *Can* Design Languages for Human Beings
2010-10-05How Long Is This MP4?
2010-08-05Python in CS1 is Growing Fast
2010-07-20A Note on Tools
2010-06-24And the Winner Is…
2010-05-22The Practice of Software Development
2010-04-16File Sharing for Scientists
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-03-11What Would You Do For Five Dollars?
2010-03-04The Tool I Want
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-11-16Bend It 'Til It Breaks
2009-11-16When I Said 'The Last Twenty Years…'
2009-11-13Packaging
2009-11-01Never Mind the Concurrency, What About the Math?
2009-10-23Pictures in Pages
2009-10-04Pure Genius
2009-09-01My Mac Knows That My Thoughts Are Straying
2009-08-28elmcity and WordPress
2009-08-24EveryBlock and Toronto
2009-08-24Splitting Scheme
2009-08-23The Delight Is In The Details, Too
2009-08-21Tools for Teams
2009-07-26Do Iterations Work by Partitioning Choices?
2009-07-12Why I Miss Command-Line Programming
2009-06-29Four Crowdsourcing Lessons
2009-06-01Leapfrogged Again
2009-05-14OCR for Line Drawings?
2009-05-06Project Totem Pole
2009-04-23We Don't Import Punch Cards Any More
2009-04-15Getting Ready to Wag the Dog
2009-03-25Inference for R
2009-03-11Barbara Liskov Wins Turing Award
2009-02-22Bugs Everywhere
2009-02-12Jason Cohen Thinks Aloud
2009-02-01Once More Unto the REST
2009-01-26Virtualization vs. Web Services
2009-01-21Text Is Still King
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-05Why We're Not Switching to Git
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-12-09Switching to Zep
2007-11-29Falling Further Behind
2007-10-26The Burning Man of HPC
2007-10-24Wrong Again
2007-10-17Country Codes of the World
2007-10-09Amazon Gets an SLA (But I Still Can't Use It)
2007-09-17Tweaking
2007-09-12Jon Udell has the Best Job in the World
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-30YSlow and the Browser as IDE
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-05-19RailsConf: Plus Ca Change…
2007-05-17Arrrgghh whimper (or, PySqlite, Matplotlib, and paths)
2007-05-02Chronicle-Recorder and Debugging
2007-03-20In memoriam: John Backus
2007-03-14Extensible Programming Has Arrived
2007-03-01What I Missed Most by Not Going to PyCon
2007-02-19Bitten Again
2007-02-14BitFrost
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-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-11-28Presto and Responsibility
2006-11-11Expressing Temporal 'Type' Information in Programs
2006-10-30Jim Waldo: 'On System Design'
2006-10-17The Last of September's Reading
2006-09-19The Stradivarius of Coding
2006-09-18Taking Intellisense to the Next Level
2006-09-18A Social Networking Company with a Believable Business Model
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-23Trac Spam
2006-08-22Chris Lenz on Django
2006-08-04It Isn't Progress Until You Can Debug It
2006-07-30Update on Extensible Programming
2006-07-24Worms for Fishes
2006-07-07Bitten by WGA
2006-07-03Watching Static and Dynamic Analysis Go Mainstream
2006-06-27Next… Design by Contract? (Please)
2006-06-23Perforce: For beginners only…
2006-06-23The ACM's Top 25
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-30The Next Phase New Wave Tool Craze
2006-03-262020 Hype
2006-03-05Monad and Greasemonkey
2006-03-05Game Play Notation
2006-02-27What It Takes to Get Eclipse Out the Door
2006-02-22Python, JavaScript, and Boost
2006-02-11Of DocFests, Marketing Hype, and DrProject
2006-02-02Please Tell Me Python Logging Isn't Supposed to Work This Way
2006-01-23They're Getting Smarter
2005-12-29External Programming Interfaces
2005-12-24Review: Why Programs Fail
2005-12-23Procrastination: One of the Few Things in Life Nicer Than Toast
2005-12-22Documents vs. Conversations
2005-12-11Evidence
2005-12-08Ruby Book Sales Surpass Python
2005-12-05Guidance on Running Undergraduate Software Projects
2005-12-02How Do You Want to See Source Code?
2005-11-24A Typical Developer's Typical Day (not humor)
2005-11-24Fogel's Producing Open Source Software
2005-11-04One in Forty Five Isn't Good Enough
2005-10-27You Need a Debugger to Change the World
2005-10-27Why Bad Software Exists
2005-10-25Who Will Clean Out My Inbox After I'm Dead?
2005-10-25Subtext
2005-08-22Slow Imports
2005-08-22Dawson and Kerr in DDJ
2005-06-01Google's Summer of Code
2005-05-15Navigating Source
2005-05-04Misdirection and Javascript
2005-03-13Reading the Fine Print
2005-03-11Code reviews
2005-02-27AJAX: Asynchronous Javascript + XML
2005-02-25Possible vs. Feasible vs. Trivial
2005-02-18On the Size of Programming Teams
2005-02-14Public Health and Future Email
2005-02-08Trusting Your Customers
2005-02-05Blaise Pascal's Shorter Letter
2005-01-17Next-Generation Communication and Software Engineering
2005-01-16Python, Typing, and the Scientific Spirit
2005-01-16Canadian Undergraduate Software Engineering Conference
2005-01-05Why Python?
2005-01-02Knowing Where You're Going
2004-12-10Greg's Best of 2004
2004-12-09Build Your Own Weather Channel
2004-10-12Blogging vs. Venting
2004-10-08Ant + Hibernate: There's More Than One Way to Fix It
2004-10-08Ant + Eclipse = More Pain
2004-10-08Oh, You Mean You Wanted It to *Work*…
2004-10-07Ant + Hibernate = Confusion and Pain
2004-09-20Essential Equipment
2004-09-16The Art of Cutting Corners
2004-09-14Accidental Horizons
2004-09-13Guards! Guards!
2004-09-13Subversion Grief and Usability Testing
2004-09-07Better is Harder than New
2004-09-06They're All Eighth Bolts
2004-09-02Book Review: Joel on Software
2004-08-30Issue Tracking Systems
2004-08-28The Joel Test
2004-08-18Filters, Performance, and Priorities
2004-08-06Real-time Scheduling
2004-08-04Poor Cousins
2004-07-26The Right Tool for the Job
2004-07-23Preparing for the Next Round
2004-07-21Up and to the Right
2004-07-01Command-Line Power Tools
2004-06-26Code Reviews
2004-06-26Bottom Up and Top Down Meet
2004-06-25Getting Balls Rolling in the Real World
2004-06-22The New Standard Model