Posts about code, programming languages, algorithms, software design, debugging, testing, and the craft of writing software.
| 2026-06-05 | Priority Starvation |
| 2026-06-05 | Braess's Paradox |
| 2026-06-05 | Rush Hour Displacement |
| 2026-06-05 | The Convoy Effect |
| 2026-06-05 | Tandem Queue Blocking |
| 2026-06-04 | The Inspector's Paradox |
| 2026-06-03 | Late Merge |
| 2026-06-02 | Pooled vs. Separate Queues |
| 2026-06-01 | Queue Nonlinearity |
| 2026-05-31 | Sojourn Time |
| 2026-05-30 | Little's Law |
| 2026-05-29 | Queue Formation |
| 2026-05-28 | Basic Ideas in Queueing Theory |
| 2026-05-27 | Building a City, Not a Car |
| 2026-04-19 | asimpy Improvements |
| 2026-04-18 | asimpy Performance Benchmarking |
| 2026-04-01 | Current Projects |
| 2026-03-30 | Project Status |
| 2026-03-28 | An E-Bike for the Mind |
| 2026-03-27 | Another Modest Proposal |
| 2026-03-24 | Accessibility Improvements |
| 2026-03-15 | Distributed Systems Design by Example |
| 2026-01-23 | Updating Snailz |
| 2026-01-14 | First-of in asimpy |
| 2026-01-11 | Trying to Understand asimpy |
| 2026-01-10 | Introducing asimpy |
| 2026-01-05 | Next Steps for Simulation |
| 2025-12-30 | Discrete Events |
| 2025-10-18 | One Small Command |
| 2025-09-05 | Mastodon and Webbly |
| 2025-08-13 | This Week's Posts |
| 2025-05-19 | Some Testing Answers |
| 2025-05-18 | Two Thirds of a Language |
| 2025-04-21 | Lazy Loading a Data Package |
| 2025-04-20 | A Testing Question |
| 2025-03-29 | Tooling for Snailz |
| 2025-03-08 | What We Mean by Software Design |
| 2025-01-26 | Human Connection |
| 2024-12-30 | Cross One Off My List |
| 2024-12-27 | Not Very Scalable |
| 2024-12-14 | Snailz |
| 2024-11-30 | Another Static Site Generator for Lessons |
| 2024-10-12 | Browsercast Revisited |
| 2024-09-06 | How I Explain Code |
| 2024-06-14 | Human-Scale Software |
| 2024-04-22 | Background Knowledge |
| 2024-04-18 | A New Stack |
| 2024-04-11 | What I Need in a Static Site Generator |
| 2024-03-27 | Disk Usage |
| 2024-03-08 | Our Process |
| 2024-03-03 | Current Projects |
| 2024-02-26 | My Adventures with Certificates |
| 2024-02-25 | Community Norms |
| 2024-02-22 | Code, Cucumbers, and LLMs |
| 2024-02-17 | Concurrent Examples |
| 2024-01-20 | Including Boilerplate Files in Jekyll |
| 2024-01-05 | What Features of Python Do I Use? |
| 2023-11-25 | LLMs and Institutional Knowledge |
| 2023-11-13 | Replacing Make |
| 2023-10-22 | Building a Ramp |
| 2023-09-09 | An Approach to Motivating Coding |
| 2023-08-27 | The Weizenbaum Test |
| 2023-08-10 | Language and Library Features for Teaching |
| 2023-07-16 | Tooling a Book |
| 2023-06-13 | Making a Book |
| 2023-06-12 | Chapter Dependencies |
| 2023-06-12 | Book Extensions |
| 2023-03-12 | Building a Book |
| 2023-03-04 | The Only Features I Need |
| 2023-01-29 | Styling Diagrams for Software Design by Example |
| 2023-01-24 | Commands I Use |
| 2023-01-18 | Another Standard Model |
| 2023-01-14 | Do These Tools Exist? |
| 2022-12-29 | The Fourth Tradition |
| 2022-12-28 | Ways to Explain Code |
| 2022-12-18 | Sessioncasting |
| 2022-12-14 | Teaching in the Third Dimension |
| 2022-12-04 | I Want a Memory Diagram Generator |
| 2022-11-30 | What I Want for Code in Textbooks |
| 2022-11-18 | Debuggable Explanations |
| 2022-11-13 | A Combinatoric Geometry Problem |
| 2022-11-13 | The Notebook Not Taken |
| 2022-10-29 | Throttling |
| 2022-08-10 | Hard Problems |
| 2022-05-14 | The Wes Mongtomery of Software |
| 2021-12-26 | Effort Estimation |
| 2021-09-23 | More Thoughts on Document Compilers |
| 2021-08-05 | Software Design Rules |
| 2021-03-27 | The Ghosts in the Debugging |
| 2021-03-10 | Building a Book (Part 2) |
| 2021-02-10 | Building a Book |
| 2021-01-17 | Punchcards Considered Harmful |
| 2021-01-17 | The Page Is Not The Lesson |
| 2020-10-21 | Tools |
| 2020-10-12 | Circular Imports |
| 2020-09-13 | Static Lesson Generators |
| 2020-07-30 | Wanted: A Notation for 'Why' |
| 2020-04-06 | Teaching Code Review |
| 2020-01-05 | Knitting |
| 2019-12-17 | Measuring Software Tools |
| 2019-06-16 | Chunks versus Functions |
| 2019-05-28 | Checking-Driven Development |
| 2019-04-04 | Not a Hammer |
| 2019-03-21 | Twelve Weeks, Twelve Tools |
| 2019-03-10 | The Tool I Want |
| 2019-02-16 | Late Binding |
| 2019-02-11 | Examples Wanted for Code Review |
| 2019-01-24 | The Principle of Least Precision |
| 2018-12-29 | Data Wrangling with JavaScript |
| 2018-12-27 | Use Case Maps Revisited |
| 2018-12-14 | No Straight Pipeline |
| 2018-11-30 | Lesson Installation |
| 2018-11-28 | Augmenting Error Messages |
| 2018-11-16 | Non-Standard Evaluation in R |
| 2018-07-05 | Isaac Ezer's Dragnet |
| 2018-04-01 | Yaks |
| 2018-03-24 | Grand Unified Editor Theory |
| 2018-03-17 | I Can't (Quite) Teach JavaScript |
| 2018-03-09 | Tables |
| 2018-01-26 | Assessing Competence |
| 2017-12-27 | Explanation-Oriented Programming |
| 2017-12-06 | The New Standard Model |
| 2017-11-22 | Diff and Merge for ProseMirror |
| 2017-11-01 | I'm Probably Wrong Again |
| 2017-09-30 | Git, Graphs, and Software Engineering |
| 2017-05-22 | Numerical JavaScript |
| 2016-12-05 | Normal |
| 2016-10-23 | Programming as Theory Building |
| 2016-09-05 | We Still Can't Have Nice Things Together |
| 2016-06-04 | Knitting |
| 2016-04-01 | Zen and the Art of Assignment Operators |
| 2016-03-21 | Registers |
| 2016-03-19 | Continuous Installation Checking |
| 2016-03-13 | In My Better World |
| 2016-03-05 | Complexity vs. Subtlety |
| 2015-11-15 | Miscellaneous Projects |
| 2015-07-20 | Git as GOTO |
| 2015-07-01 | Pushing Back |
| 2015-06-24 | Using Jekyll for Lessons |
| 2015-06-18 | Why I Am Not Excited About Julia |
| 2015-06-14 | Reverse Engineering CSS |
| 2015-06-11 | Why We Can't Have Nice Things |
| 2015-04-13 | The Future Then and Now |
| 2015-01-14 | Language Wars and Others |
| 2014-11-27 | How to Manage Confidential Data |
| 2014-10-29 | Pandoc and Building Pages |
| 2014-07-21 | Using a Package Manager for Lessons and Papers |
| 2014-03-30 | Announcing NBDiff |
| 2014-03-14 | You and Jimi Hendrix |
| 2014-02-09 | An Online Peer Instruction Tool |
| 2013-08-23 | Two Cheers for GitHub |
| 2013-06-13 | Problems with Pandoc |
| 2013-05-24 | Browsercast |
| 2013-03-24 | Using the IPython Notebook as a Teaching Tool |
| 2013-02-09 | The Larch Environment |
| 2013-01-22 | Record and Playback in the IPython Notebook |
| 2012-12-29 | What Will Programming Look Like in 2020? |
| 2012-12-14 | Would You Like Your Programming Language to Have a Million Users? |
| 2012-11-27 | Alpha Testing Ideas for the IPython Notebook |
| 2012-11-19 | The Tool (I Think) We Need To Do Peer Instruction Online |
| 2012-11-19 | Who Wants To Build a Faded Example Tool for the IPython Notebook? |
| 2012-11-16 | Who Wants To Write a Little Code? |
| 2012-10-28 | Usability Testing and Instructional Design |
| 2012-10-20 | True in Software, True in Life |
| 2012-10-04 | Wanted: An Entry-Level Provenance Library |
| 2012-09-16 | Does Your Software Look Like This? |
| 2012-08-29 | A Problem With Badges |
| 2012-07-30 | Record and Playback |
| 2012-07-22 | IPython Notebook + Towtruck + Etherpad + Slide Drive = Win |
| 2012-07-21 | How Robust Is Your Programming Language? |
| 2012-06-26 | Handling Variant Configuration Files |
| 2012-05-10 | Fish and Bugs |
| 2012-03-05 | Programs as Experimental Apparatus |
| 2012-03-01 | ULP (or, This is tricky and perhaps profound) |
| 2012-02-22 | Converting PowerPoint to SVG: Help Needed |
| 2012-02-14 | Stack Underflow? |
| 2012-01-29 | A Browser-Based Programming Tool That's Better Than Many Desktop Tools |
| 2012-01-07 | I Have a Cunning Plan (or, Making Money by Doing Good) |
| 2011-12-16 | PowerPoint + Visio, but in Javascript? |
| 2011-09-19 | Past and Future |
| 2011-09-17 | The Simplest Web That Could Possibly Work |
| 2011-09-16 | Extensible Programming: A New Hope |
| 2011-09-01 | Renting Cycles Has Never Been Easier |
| 2011-08-22 | Code Coverage in Lernanta |
| 2011-08-18 | Spelling, Fairness, and JavaScript |
| 2011-07-20 | Wait, Not That Bit! |
| 2011-07-12 | Grown-Up Languages |
| 2011-06-13 | It Shouldn't Still Hurt This Much |
| 2011-06-03 | Refactoring Yahoo! Pipes |
| 2011-05-18 | Catalog Models Like Views and Controllers |
| 2011-04-26 | Competence |
| 2011-03-07 | Literate Programming |
| 2011-03-01 | Tuple Spaces (or, Good Ideas Don't Always Win) |
| 2011-02-11 | Ground Up, in No Particular Order |
| 2011-01-19 | Making System Administrators' Lives Easier |
| 2010-12-29 | Tagging and Debugging |
| 2010-12-29 | Instead of PowerPoint |
| 2010-12-27 | Elimination |
| 2010-12-26 | Local Subversion Repositories |
| 2010-12-02 | Programmer Competency Matrix |
| 2010-10-18 | They're All Small Devices Now |
| 2010-10-14 | Dexy |
| 2010-10-08 | Yes, We *Can* Design Languages for Human Beings |
| 2010-10-05 | How Long Is This MP4? |
| 2010-08-05 | Python in CS1 is Growing Fast |
| 2010-07-20 | A Note on Tools |
| 2010-06-24 | And the Winner Is… |
| 2010-05-22 | The Practice of Software Development |
| 2010-04-16 | File Sharing for Scientists |
| 2010-04-03 | Can You Name the Programming Language? |
| 2010-03-22 | Robin Milner: 1934-2010 |
| 2010-03-18 | Testing With Random Data |
| 2010-03-18 | What Do You See? |
| 2010-03-17 | Natural Language Wins (Kind Of) |
| 2010-03-11 | What Would You Do For Five Dollars? |
| 2010-03-04 | The Tool I Want |
| 2010-02-17 | Rory Tulk on Software Testing |
| 2010-02-09 | TestDrive |
| 2010-02-03 | Dumber Is Productiver |
| 2010-02-02 | Engineering Thinking |
| 2010-01-20 | Punctuate! Punctuate! Punctuate! |
| 2010-01-10 | Code vs. Messages |
| 2010-01-07 | The Design of Fossil |
| 2009-12-23 | Polymorphism |
| 2009-12-22 | Fossil + NoSQL ? |
| 2009-11-16 | Bend It 'Til It Breaks |
| 2009-11-16 | When I Said 'The Last Twenty Years…' |
| 2009-11-13 | Packaging |
| 2009-11-01 | Never Mind the Concurrency, What About the Math? |
| 2009-10-23 | Pictures in Pages |
| 2009-10-04 | Pure Genius |
| 2009-09-01 | My Mac Knows That My Thoughts Are Straying |
| 2009-08-28 | elmcity and WordPress |
| 2009-08-24 | EveryBlock and Toronto |
| 2009-08-24 | Splitting Scheme |
| 2009-08-23 | The Delight Is In The Details, Too |
| 2009-08-21 | Tools for Teams |
| 2009-07-26 | Do Iterations Work by Partitioning Choices? |
| 2009-07-12 | Why I Miss Command-Line Programming |
| 2009-06-29 | Four Crowdsourcing Lessons |
| 2009-06-01 | Leapfrogged Again |
| 2009-05-14 | OCR for Line Drawings? |
| 2009-05-06 | Project Totem Pole |
| 2009-04-23 | We Don't Import Punch Cards Any More |
| 2009-04-15 | Getting Ready to Wag the Dog |
| 2009-03-25 | Inference for R |
| 2009-03-11 | Barbara Liskov Wins Turing Award |
| 2009-02-22 | Bugs Everywhere |
| 2009-02-12 | Jason Cohen Thinks Aloud |
| 2009-02-01 | Once More Unto the REST |
| 2009-01-26 | Virtualization vs. Web Services |
| 2009-01-21 | Text Is Still King |
| 2008-12-18 | Entry-Level Code Review Procedures? |
| 2008-12-18 | Beautiful Testing |
| 2008-12-04 | Python 3.0 is Out (But We're Not Using It Yet) |
| 2008-11-20 | Happy 25th Birthday, TurboPascal |
| 2008-11-17 | Maybe If I Write About Them, They'll Go Away |
| 2008-10-16 | And Search Returns…? |
| 2008-09-19 | Another Use for Extensible Programming |
| 2008-09-16 | Comments in JSON? |
| 2008-09-15 | REST APIs for Batch Operations |
| 2008-09-15 | How do I enlarge a fizzbar without overwriting the user's snibbit? |
| 2008-08-02 | I'd Really Like To Draw A Picture… |
| 2008-08-02 | Where Design Fits In |
| 2008-07-18 | A Distributed Single Point of Failure |
| 2008-07-06 | Traceability in Agile Projects |
| 2008-07-05 | Why We're Not Switching to Git |
| 2008-07-02 | Current Projects |
| 2008-06-25 | Another DrProject Design Question |
| 2008-06-23 | Navigating IRC Logs, Nested Forms, Et Cetera |
| 2008-06-10 | Deleting Roles |
| 2008-05-29 | More About Integrating IRC into DrProject |
| 2008-05-27 | Reminded of the Difference Once Again |
| 2008-05-23 | For Each, Replace |
| 2008-05-16 | I Will Buy You Lunch… |
| 2008-05-15 | Another DrProject Design Question |
| 2008-05-02 | A Question for the Class |
| 2008-05-02 | Code Review Coincidences |
| 2008-05-01 | Joel Is Feeling Grumpy Today |
| 2008-04-29 | An Interview with Donald Knuth |
| 2008-04-25 | Design Never Ends |
| 2008-04-25 | DrProject 3.0 Schema |
| 2008-04-17 | Introducing Stack Overflow |
| 2008-04-15 | Integration Irony |
| 2008-04-11 | Feature List |
| 2008-04-11 | Alternatives to DrProject |
| 2008-04-03 | Real World Data Causes Perl |
| 2008-03-28 | An Unexpected Result |
| 2008-03-08 | Why Developers Don't Do Code Reviews |
| 2008-02-20 | Where The Puck Is Going To Be (Part 91) |
| 2008-02-15 | Rationalizing the Admin Interface |
| 2008-02-15 | Building Filters |
| 2008-02-04 | You're Not Allowed To Use What You Learn In This Book |
| 2008-02-02 | Generating Elegance |
| 2008-01-15 | Structural Programming and Rational Metaprogramming |
| 2008-01-08 | Where the Puck Is, Part 5 |
| 2007-12-31 | Grassroots Extensibility |
| 2007-12-09 | Switching to Zep |
| 2007-11-29 | Falling Further Behind |
| 2007-10-26 | The Burning Man of HPC |
| 2007-10-24 | Wrong Again |
| 2007-10-17 | Country Codes of the World |
| 2007-10-09 | Amazon Gets an SLA (But I Still Can't Use It) |
| 2007-09-17 | Tweaking |
| 2007-09-12 | Jon Udell has the Best Job in the World |
| 2007-08-29 | Diagram of Relationships Between Programming Paradigms |
| 2007-08-09 | Help Help—My Soil Is Dry and I Can't Germinate |
| 2007-08-03 | Michael Feathers on Subtext |
| 2007-08-01 | JBoss vs. Django and What IronRuby Really Means |
| 2007-07-30 | YSlow and the Browser as IDE |
| 2007-07-12 | User Interface Jam Session |
| 2007-07-11 | Bryan Cantrill on Recursion |
| 2007-06-28 | Quinn's Argument: A Swing and a Miss |
| 2007-06-26 | The Danger of Danger |
| 2007-06-13 | Does the Future Belong to Javascript? |
| 2007-06-12 | If You Need AI, You Need a Simpler System |
| 2007-05-19 | RailsConf: Plus Ca Change… |
| 2007-05-17 | Arrrgghh whimper (or, PySqlite, Matplotlib, and paths) |
| 2007-05-02 | Chronicle-Recorder and Debugging |
| 2007-03-20 | In memoriam: John Backus |
| 2007-03-14 | Extensible Programming Has Arrived |
| 2007-03-01 | What I Missed Most by Not Going to PyCon |
| 2007-02-19 | Bitten Again |
| 2007-02-14 | BitFrost |
| 2007-02-08 | Yahoo Pipes (or, What Took You So Long?) |
| 2007-02-07 | What I Learned Today |
| 2007-01-31 | Why Johnny Can't Calendar |
| 2007-01-21 | Debugging Trick |
| 2007-01-21 | Udell on use experience vs. user experience |
| 2007-01-14 | No Such Thing As One Program |
| 2007-01-13 | Pervasive Computing, Horror, and the Double Chin Effect |
| 2007-01-12 | Abstraction, Compression, and Errors |
| 2007-01-09 | Jon Udell on Future Tailors |
| 2006-11-28 | Presto and Responsibility |
| 2006-11-11 | Expressing Temporal 'Type' Information in Programs |
| 2006-10-30 | Jim Waldo: 'On System Design' |
| 2006-10-17 | The Last of September's Reading |
| 2006-09-19 | The Stradivarius of Coding |
| 2006-09-18 | Taking Intellisense to the Next Level |
| 2006-09-18 | A Social Networking Company with a Believable Business Model |
| 2006-08-25 | Why Real-World Programming Is Difficult |
| 2006-08-25 | The Emperor *Still* Has No Brain |
| 2006-08-24 | EC2: Commoditized Computing |
| 2006-08-23 | Udell on Debugging |
| 2006-08-23 | Python Web Frameworks (Yet Again) |
| 2006-08-23 | Trac Spam |
| 2006-08-22 | Chris Lenz on Django |
| 2006-08-04 | It Isn't Progress Until You Can Debug It |
| 2006-07-30 | Update on Extensible Programming |
| 2006-07-24 | Worms for Fishes |
| 2006-07-07 | Bitten by WGA |
| 2006-07-03 | Watching Static and Dynamic Analysis Go Mainstream |
| 2006-06-27 | Next… Design by Contract? (Please) |
| 2006-06-23 | Perforce: For beginners only… |
| 2006-06-23 | The ACM's Top 25 |
| 2006-06-19 | Agility and Romanticism |
| 2006-06-16 | The Semi-Colon Wars |
| 2006-05-05 | Book Review: Code Quality |
| 2006-04-20 | What the World Needs Now Is Diffs, Diffs, Diffs |
| 2006-04-19 | Making Money from Better Software |
| 2006-04-14 | Python 3000: What To Leave Out? |
| 2006-04-13 | Strong Typing, Unit Testing, and Science |
| 2006-04-11 | The Ruby Is Always Greener… |
| 2006-04-05 | Perfection Is Achieved Only on the Point of Collapse |
| 2006-03-30 | The Next Phase New Wave Tool Craze |
| 2006-03-26 | 2020 Hype |
| 2006-03-05 | Monad and Greasemonkey |
| 2006-03-05 | Game Play Notation |
| 2006-02-27 | What It Takes to Get Eclipse Out the Door |
| 2006-02-22 | Python, JavaScript, and Boost |
| 2006-02-11 | Of DocFests, Marketing Hype, and DrProject |
| 2006-02-02 | Please Tell Me Python Logging Isn't Supposed to Work This Way |
| 2006-01-23 | They're Getting Smarter |
| 2005-12-29 | External Programming Interfaces |
| 2005-12-24 | Review: Why Programs Fail |
| 2005-12-23 | Procrastination: One of the Few Things in Life Nicer Than Toast |
| 2005-12-22 | Documents vs. Conversations |
| 2005-12-11 | Evidence |
| 2005-12-08 | Ruby Book Sales Surpass Python |
| 2005-12-05 | Guidance on Running Undergraduate Software Projects |
| 2005-12-02 | How Do You Want to See Source Code? |
| 2005-11-24 | A Typical Developer's Typical Day (not humor) |
| 2005-11-24 | Fogel's Producing Open Source Software |
| 2005-11-04 | One in Forty Five Isn't Good Enough |
| 2005-10-27 | You Need a Debugger to Change the World |
| 2005-10-27 | Why Bad Software Exists |
| 2005-10-25 | Who Will Clean Out My Inbox After I'm Dead? |
| 2005-10-25 | Subtext |
| 2005-08-22 | Slow Imports |
| 2005-08-22 | Dawson and Kerr in DDJ |
| 2005-06-01 | Google's Summer of Code |
| 2005-05-15 | Navigating Source |
| 2005-05-04 | Misdirection and Javascript |
| 2005-03-13 | Reading the Fine Print |
| 2005-03-11 | Code reviews |
| 2005-02-27 | AJAX: Asynchronous Javascript + XML |
| 2005-02-25 | Possible vs. Feasible vs. Trivial |
| 2005-02-18 | On the Size of Programming Teams |
| 2005-02-14 | Public Health and Future Email |
| 2005-02-08 | Trusting Your Customers |
| 2005-02-05 | Blaise Pascal's Shorter Letter |
| 2005-01-17 | Next-Generation Communication and Software Engineering |
| 2005-01-16 | Python, Typing, and the Scientific Spirit |
| 2005-01-16 | Canadian Undergraduate Software Engineering Conference |
| 2005-01-05 | Why Python? |
| 2005-01-02 | Knowing Where You're Going |
| 2004-12-10 | Greg's Best of 2004 |
| 2004-12-09 | Build Your Own Weather Channel |
| 2004-10-12 | Blogging vs. Venting |
| 2004-10-08 | Ant + Hibernate: There's More Than One Way to Fix It |
| 2004-10-08 | Ant + Eclipse = More Pain |
| 2004-10-08 | Oh, You Mean You Wanted It to *Work*… |
| 2004-10-07 | Ant + Hibernate = Confusion and Pain |
| 2004-09-20 | Essential Equipment |
| 2004-09-16 | The Art of Cutting Corners |
| 2004-09-14 | Accidental Horizons |
| 2004-09-13 | Guards! Guards! |
| 2004-09-13 | Subversion Grief and Usability Testing |
| 2004-09-07 | Better is Harder than New |
| 2004-09-06 | They're All Eighth Bolts |
| 2004-09-02 | Book Review: Joel on Software |
| 2004-08-30 | Issue Tracking Systems |
| 2004-08-28 | The Joel Test |
| 2004-08-18 | Filters, Performance, and Priorities |
| 2004-08-06 | Real-time Scheduling |
| 2004-08-04 | Poor Cousins |
| 2004-07-26 | The Right Tool for the Job |
| 2004-07-23 | Preparing for the Next Round |
| 2004-07-21 | Up and to the Right |
| 2004-07-01 | Command-Line Power Tools |
| 2004-06-26 | Code Reviews |
| 2004-06-26 | Bottom Up and Top Down Meet |
| 2004-06-25 | Getting Balls Rolling in the Real World |
| 2004-06-22 | The New Standard Model |