The Three Levels of Software: Why code that never goes wrong can still be wrong
Update 3/20/2019: Previous versions of this post used the terminology Level 1/Level 2/Level 3 and "Level 3 bug" a lot. I'm diminishing this in favor of "Runtime/Concrete Implementation/Logic level" and...
View ArticleThe Design of Software is A Thing Apart
Big up-front planning phases are out. Rapid iteration is in. With all this movement towards agile, it’s increasingly tempting to throw out the idea of having a separate design doc for software in favor...
View ArticleThe Benjamin Franklin Method of Reading Programming Books
Let’s face it, programming books suck. Those general books on distributed systems or data science or whatever can be tomes for a lifetime, but, with few exceptions, there’s something about the books on...
View ArticleMy favorite principle for code quality
Programming seems to become more about memorization every day, with advocates pushing for memorizing lists of design patterns and refactorings and the difference between “parameter coupling” and...
View ArticleThe Practice is not the Performance: Why project-based learning fails
Last night, I encountered an old post by Zach Holman where he pushes the idea that traditional school-based CS is useless; project-based learning is the way to go. I’ve heard this idea repeatedly over...
View ArticleWhen your data model means something else
One of my coaching clients was designing a program, and came to me with a data-modeling question. The program was for making interactive stories like those Choose Your Own Adventure books. A story...
View ArticleMy Interview with Future of Coding: On the Maintenance of Large Software
A few weeks ago, I sat down with Steve Krouse of Future of Coding. Steve is a thinker who left full-time work many moons ago to pursue his dream of making programming better. His podcast is full of...
View ArticleBook Review: A Philosophy of Software Design
I’m trying to read all the good writing about software design. This is very easy because not very much has been written: it turns out that it’s much easier to write an article about how to write a...
View ArticleMy Strange Loop talk: You are a Program Synthesizer (video + transcript)
In my day job, I work with programs that write, analyze, and transform other programs. You can't do this unless you have some special insight into how programs work. Much of my night job is finding...
View ArticleBook Review: Practical TLA+
I want to make something clear: I am not, and have never been, an advocate for formal verification of production systems. Sometimes people think I am because I talk about ideas from that space, but my...
View ArticleThe Best Refactoring You've Never Heard Of
Update 12/31/2019: I have also written a guest post on this topic for PL Perspectives, with fewer details but more applications.Update 7/23/2023: This title is now a snowclone! See The best...
View ArticleMy Interview on CoRecursive: Advanced Software Design with Jimmy Koppel
A few months ago, I sat down with Adam Gordon-Bell of CoRecursive to share my thoughts on software design and self-improvement. It's actually a bit funny how I found him. "Corecursion" is an advanced...
View ArticleBook Review: Elements of Programming
The C++ STL may be the most impressive achievement in language standard libraries. Where most programmers are stuck complaining that their language’s default strings aren’t performant enough, about...
View ArticleWhy Programmers Should(n't) Learn Theory
I’m currently taking my 5-person advanced coaching group on a month-long study of objects. It turns out that, even though things called “objects” are ubiquitous in modern programming languages, true...
View ArticleDeveloper tools can be magic. Instead, they collect dust.
Update 6/14/21: Now available in Chinese.I started working on advanced developer tools 9 years ago. Back when I started, “programming tools” meant file format viewers, editors, and maybe variants of...
View ArticleAbstraction: Not What You Think It Is
“Interfaces are abstractions” — Olaf Thielke, the "Code Coach"“Interfaces are not abstractions” — Mark Seeman, author of Code that Fits in Your Head and Dependency Injection“Abstraction in programming...
View ArticleSolving the Dog-Bunny Puzzle with Program Verification Technology
As a high schooler in the 70’s, my father enjoyed playing the Star Trek game written for the Sigma 7 mainframe. You play as the Enterprise surrounded by Klingon ships, and to shoot them down you have...
View ArticleHow an Ancient Philosophy Problem Explains Software Dependence
Update Oct 30, 2022: Professor Daniel Jackson wrote a response to some of the criticism this post experienced on Hacker News.This post is based on a research paper at Onward! 2020 and loosely follows...
View ArticleBook Review: The Senior Mindset
Software engineers are continuously improving in ways deep and shallow. The easiest things — surface knowledge like how to use git bisect or how to file an expense report — can be taught by...
View Article'Modules Matter Most' for the Masses
The title of this post should be in double quotes, but it seems parts of Google have not learned about abstracting sanitization. Screenshots of bug here.As systems grow, they become more complex,...
View ArticleThe 11 Aspects of Good Code
Lessons on code quality start in the first few weeks of learning to program, when a newcomer to the field is taught the basics of variable naming and told why programming languages have comments. They...
View ArticleThis one weird trick^H^H^H^H^H deep technique for writing an actually good...
Resume-writing is a game.There are two players.There's you, trying to condense your whole life into one page in a way that presents you as the most impressive candidate possible.And then there's the...
View ArticleIt's time for the 'Sell painkillers, not vitamins' metaphor to die
There’s a ubiquitous piece of startup advice: “Sell painkillers, not vitamins.” With painkillers, the story goes, you fix something that’s been bothering the customer immediately. With vitamins, all...
View ArticleShould you split that file?
You’re a line programmer for EvilCorp, and it’s just an average day working on some code to collapse the economy. Then you realize you need some code for disrupting supply chains.Should you split it...
View ArticleBook Review: Tidy First?
As you’re working day-to-day, every so often it’s nice to take a step back and improve things.Some changes require having a strong understanding of how things are done and why, but can lead to huge...
View Article