Where Did All the Time Go?


Oct 19 Does Go Have Subtyping?
Aug 04 Representing Heterogeneous Data
Jan 03 Type Checking If Expressions


Feb 13 Stupid Dog


Jul 29 640 Pages in 15 Months


Apr 05 Crafting “Crafting Interpreters”


May 19 40 Songs


Jun 16 Long Names Are Long


Sep 08 The Hardest Program I’ve Ever Written
Sep 07 What the Hero Sees: Field-of-View for Roguelikes
Feb 01 What Color is Your Function?


Dec 21 Rooms and Mazes: A Procedural Dungeon Generator
Nov 20 How My Book Launch Went
Nov 03 Zero to 353 Pages: Bringing My Web Book to Print and E-book
Jul 15 A Turn-Based Game Loop
Jul 05 Dropping Loot
Apr 22 Zero to 95,688: How I wrote Game Programming Patterns
Mar 02 Nostalgia Rathole


Dec 08 Baby’s First Garbage Collector
Aug 26 What is “Open Recursion”?
Jul 18 JavaScript Isn’t Scheme
Apr 23 Playing with Generics in TypeScript 0.9.0
Apr 17 Well Done: A Sentinel Value
Feb 24 Iteration Inside and Out, Part 2
Jan 13 Iteration Inside and Out


Dec 19 The Impoliteness of Overriding Methods
Jun 12 Multimethods, Global Scope, and Monkey-Patching
Jan 24 Higher Order Macros in C++


Oct 29 A Proposal for Null-Safety in Dart
Oct 21 Wrapping My Head Around Optional Typing
Oct 12 Semicolons are a Shibboleth
Sep 17 Time for a New Blog
Jun 06 Magpie Wants You!
Apr 21 Multimethods, Multiple Inheritance, Multiawesome!
Mar 19 Pratt Parsers: Expression Parsing Made Easy
Feb 21 Multiple Inheritance in JavaScript
Feb 13 Extending Syntax from Within a Language
Jan 16 Pattern Matching in a Dynamic OOP Language


Dec 31 Rethinking User-Defined Operators
Dec 14 The Trouble with Constructors
Nov 26 The Biology of Sloppy Code
Nov 08 Refining Exceptions and Error Codes
Oct 29 Bootstrapping a Type System
Oct 21 The Language I Wish Go Was
Oct 01 Solving the Expression Problem
Sep 28 Ruby Blocks, Python’s “with”, and Magpie’s Test Suite
Sep 18 Future-Proofing, Uniform Access, and Masquerades
Sep 01 A Type Checking Conundrum!
Aug 31 Type Checking a Dynamic Language
Aug 23 “void”, “null”, “Maybe” and “nothing”
Aug 01 Class in the Front, Proto in the Back
Jul 24 Killing Primitive Loops and Conditionals
Jul 23 What I Learned at the Emerging Languages Camp
Jul 18 Jasic: A Complete Interpreter in One Java File
Jul 13 Fibers: Coroutines in Finch
Jul 07 Meltwater: A Color Theme for XCode
Jul 02 New Syntax for Binding Methods in Finch
Jun 25 Methods on the Ether: Or Creating Your Own Control Structures for Fun and Profit
Jun 11 Amaranth, an Open Source Roguelike in C#
Feb 17 New Chapter Up: Component
Jan 25 New Game Programming Patterns Chapters Up!


Dec 26 Conditional Binding with “let” in Magpie
Oct 12 The Book
Jul 02 Closures and the Command Pattern
Jun 05 Naming Things in Code
May 15 Loops in Magpie
May 13 ML-Style Pattern Matching in C#
May 05 One and Only One
Apr 26 Stupid Magpie Tricks (Or: Yes, I’m Making a Programming Language Like Everyone Else)
Jan 03 Debunking C# vs C++ Performance


Dec 28 Fixing Ambiguities in Grammars
Nov 28 Outsourced Blog Comments
Nov 23 “Constrained Compound” Design Pattern
Nov 17 Using an Iterator as a Game Loop
May 12 Visualizing the Democratic Primary
Apr 24 Incremental Development for Games (Is Hard)
Apr 10 A C# Feature Request: Extension Classes
Apr 08 What’s the Opposite of “Nullable”?
Mar 05 Checking Flags in C# Enums
Feb 26 Avoiding Overload Hell in C#
Feb 09 C# Extension Methods: Not Just for Breakfast