Computer Things
Subscribe
Archives
Unusual basis types in programming languages
January 17, 2024
All languages have numbers, booleans, strings, and lists. What else is out there?
Why all([]) is true, prod([]) is 1, etc
January 9, 2024
It's all monoids! Monoids for everyone!
Advice for new software devs who've read all those other advice essays
December 19, 2023
From a person who really shouldn't be giving others advice.
I formally modeled Dreidel for no good reason
December 12, 2023
I can mathematically prove the game's not fun.
When would you ever want bubblesort?
December 4, 2023
There are very few universal rules in software engineering, but there are are a lot of near-universal principles. Things like "prefer composition to...
How do you take the average of two timestamps?
November 9, 2023
A jaunt through affine measures and math loopholes
Some thoughts on software expertise
November 7, 2023
(Note, there's some important administrative stuff after the newsletter.) I think a lot about the nature of expertise. While I write about all sorts of...
I shouldn't be so harsh on teaching TLA+ with puzzles
November 2, 2023
I know I'm getting the newsletter out very late this week (this kind of lackadaisical nonprofessionalism is why I don't offer paid subscriptions) so I'll...
Raku is surprisingly good for CLIs
October 26, 2023
A while back I wrote Raku: a Language for Gremlins about my first experiences with the language. After three more months of using it I've found that it's...
I wish people would do historical arguments better
October 24, 2023
Just because the historical context for a practice was different doesn't mean it's useless in the current context
Some thoughts on good spec properties
October 10, 2023
Lots of updates this week! First of all, my talk Is Software Engineering Real Engineering is now available online! It's the video version of the crossover...
Picat is my favorite new toolbox language
October 3, 2023
I'm teaching a TLA+ workshop in two weeks! Register here, use the code C0MPUT3RTHINGS for 15% off. I always like to find new "toolbox languages". These are...
Was Javascript really made in 10 days?
September 28, 2023
I once heard that Javascript has so many warts because the first version was made in just ten days. I was curious 1) if this is true, and 2) if it explains...
Formal Methods can't fix everything and that's okay
September 26, 2023
Finally done with conferences and glad to be back in Chicago. Next big event is the TLA+ workshop on October 16, which still has slots available! The faster...
The best model checker is your head
September 19, 2023
Perceptual learning through model checking helps build intuition to find bugs in software designs.
If you work on a big language, I'd like to talk
September 12, 2023
The October TLA+ workshop still has some slots left! Register here, use the code C0MPUT3RTHINGS for 15% off. I wanted to write some stuff on TLA+ modeling...
Time zones are hard because people are hard
September 4, 2023
Greetings from Australia!1 It's the morning of September 5th for me and the night of September 4th in the US. In two weeks when I fly back, I will leave...
My painful, futile quest for programmable slideshow animations
August 29, 2023
I wanted a slideshow software with programmable animations. I got suffering instead.
Educational Codebases
August 21, 2023
We get better at coding by reading code, but code isn't designed to be studied. So let's make projects that *can* be studied.
Turing kicked us out of Heaven
August 14, 2023
The halting problem is why we can't have nice things.
Symmetric Properties
August 10, 2023
If you take a square and rotate it 90 degrees, you get back an identical square. We say the square is rotationally symmetric. Similarly, if you reflect it...
Raku: A Language for Gremlins
August 7, 2023
By Gremlins, For Gremlins™
GitHub has too many hidden features
July 31, 2023
Discover undocumented features of GitHub: open repos in online VSCode, add experimental features, regex code search, and more!
Queryability and the Sublime Mediocrity of SQL
July 21, 2023
I'm going to a small academic workshop on design next week. This got me thinking of the various meanings of "design", which got me thinking about the various...
More Software Projects need Defenses of Design
July 18, 2023
Explain your choices to your users!
In Defense of Slow Feedback Loops
July 11, 2023
Goodhart's Law is a cruel master.
What chocolatiering taught me about programming
July 7, 2023
And also a new blog post (and also a Patreon announcement)
Programming Language Perversity
June 30, 2023
Harold Abelson once said that code should be written for humans to read and only incidentally for computers to write. It follows that, like any form of...
Maybe Software Engineers could learn something from Linguistics
June 26, 2023
Stealing ideas from other fields to make our own field slightly better off
Agile is people, the rest is commentary.
June 21, 2023
Agile is "just" four principles. Simple, right?
Some tests are stronger than others
June 14, 2023
"Stronger" tests are better for determining correctness, while "weaker" tests are useful for localizing errors.
What's between a set and a sequence?
June 9, 2023
Sets -> {???, ???} -> Sequences
The sneering of the wilderness
June 6, 2023
Why I am so excited about the Vision Pro, and why so many other people aren't.
Collecting and curating material is good and we should do it more
May 31, 2023
Chronicling, plugin systems, and six other disjointed ideas combine in an argument of how to "engineerize" software more
Mostly announcements and plans but also some fun floating point trivia
May 16, 2023
This is a really busy week for me, so light newsletter this time. Let's start with obligatory stuff and then get into fun newsletter stuff. Announcements So...
Problems harder than NP-Complete
May 11, 2023
People always talk about "P vs NP" like P problems are easy and NP problems are hard. This is a useful day-to-day model but also an oversimplification....
The seven specification ur-languages
May 9, 2023
A brief overview of the formal specification landscape
When to prefer inheritance to composition
May 5, 2023
Hint: it involves the typechecker
Some of my workshop teaching tricks
May 2, 2023
And some thoughts on the role in software in solving problems
GPT4 should be part of your toolkit
April 25, 2023
On March 24 I wrote GPT is revolutionary. On March 27 I got access to GPT4.1 Now that I've used it for a month, I'm firmly in the "this is the greatest thing...
In Defense of No-code('s potential)
April 21, 2023
Don't think about businesses, think about *people*
What TLA+ Can't Check
April 17, 2023
Hi everyone, I wrote a new blog post, Breaking the Limits of TLA+ Model Checking. It's the first (non-learntla) TLA+-related content I've put out in what,...
I really like powershell
April 11, 2023
When I went on Windows full time in 2019 I decided to avoid WSL as much as I could, which meant learning the Windows-native ways of doing things, which meant...
The Capability-Tractability Tradeoff
April 4, 2023
The more you can say, the less you can say about what you can say.
Repurposing Hotel Keycards
April 1, 2023
April Cools!
Everything's an API
March 28, 2023
Hi Everybody, April Cools is this weekend! A bunch of people who normally write tech stuff will be writing about a bunch of other topics. If you've got a...
GPT is revolutionary
March 24, 2023
Even a stochastic parrot can sing.
Ergonomic APIs, channel invariants, and data views
March 22, 2023
Musings on a tempting antipattern
Making Memes
March 16, 2023
Fnord.
What can you code up in an hour?
March 13, 2023
Fast programming is a powerful skill.
Newer archives
Older archives