Blog Posts
-
-
A Perplexing Javascript Parsing Puzzle
-
The Hierarchy of Controls (or how to stop devs from dropping prod)
-
Hiatus
-
Toolbox languages
-
Composing TLA+ Specifications with State Machines
-
Software Friction
-
Don't let Alloy facts make your specs a fiction
-
The Tale of Daniel
-
The Hunt for the Missing Data Type
-
Planner programming blows my mind
-
An RNG that runs in your brain
-
The World and the Machine
-
Notes on Every Strangeloop 2023 Talk I Attended
-
A better explanation of the Liskov Substitution Principle
-
Learn AutoHotKey by stealing my scripts
-
My Problem With the Four-Document Model
-
Somehow AutoHotKey is kinda good now
-
Breaking the limits of TLA+ model checking
-
Ten weird things you can buy online (and why you would)
-
That Time Indiana Almost Made π 3.2
-
A Neovim Task Runner in 30 lines of Lua
-
NP-Complete isn't (always) Hard
-
Sources of Complexity: Constraints
-
Let's Prove Leftpad
-
Notes on Every Strangeloop 2022 Talk I Attended
-
Safety and Liveness Properties
-
Software Mimicry
-
Crimes with Python's Pattern Matching
-
Announcing: Learn TLA+
-
I ❤️ Microscopes
-
Hiatus
-
Using Abstract Data Types in TLA+
-
Alloy 6: it's about Time
-
How to Solve the Sudoku Puzzle with programming
-
Specification Refinement
-
Cross-Branch Testing
-
Clever vs Insightful Code
-
Why Specifications Don't Compose
-
Why Do Interviewers Ask Linked List Questions?
-
TLA+ Action Properties
-
What engineering can teach (and learn from) us
-
We Are Not Special
-
Are We Really Engineers?
-
There's Always More History
-
Two workers are quadratically better than one
-
Software correctness is a lot like flossing
-
Finding Goroutine Bugs with TLA+
-
Decision Table Patterns
-
J Notation as a Tool of Thought
-
A Better Cheatsheet
-
The Frink is Good, the Unit is Evil
-
Weak and Strong Fairness
-
Property Testing with Complex Inputs
-
Constructive vs Predicative Data
-
In Praise of AutoHotKey
-
The Hard Part of Learning a Language
-
Announcing: Alloydocs
-
10 Most(ly dead) Influential Programming Languages
-
This is How Science Happens
-
Feature Interaction Bugs
-
The Business Case for Formal Methods
-
Hypermodeling Hyperproperties
-
How fast do I talk?
-
Formally Modeling Database Migrations
-
Python Negatypes
-
Performance Matters
-
Modeling Missing Requirements
-
Probabilistic Modeling with PRISM
-
At least one Vim trick you might not know
-
Alan Kay Did Not Invent Objects
-
Modeling Adversaries with TLA+
-
Finding Property Tests
-
Metamorphic Testing
-
Using Formal Methods at Work
-
Solving Knights and Knaves with Alloy
-
Why Don't People Use Formal Methods?
-
STAMPing on event-stream
-
A Better Interview
-
Modeling Message Queues in TLA+
-
Practical TLA+ Now Available
-
Optimizing MiniZinc
-
Constraint Solving with Minizinc
-
1/0 = 0
-
Augmenting Agile with Formal Methods
-
Decision Tables
-
Formally Specifying UIs
-
The Great Theorem Prover Showdown
-
Why Does "=" Mean Assignment?
-
Just a Whole Bunch of Different Tests
-
Formally Specifying a Package Manager
-
The Problem With APLs
-
Important Women in CS Who Aren't Grace Hopper
-
Proving Games are Winnable with Alloy
-
Vim Macro Trickz
-
Property Tests + Contracts = Integration Tests
-
What's the Right Tool for the Job?
-
Introduction to Contract Programming
-
Calculating Burn Rates in J
-
Why TDD Isn't Crap
-
Handwriting Programs in J
-
Uncle Bob and Silver Bullets
-
Instructive and Persuasive Examples
-
How Do We Trust Our Science Code?
-
Hypothesis Testing with Oracle Functions
-
Modeling Zero-Downtime Deployments with TLA+
-
Falsehoods Programmers Believe About Dogs