RSSAmplifier

Blog

Hillel Wayne

Recent content on Hillel Wayne

hillelwayne.comRSS feed ↗17 posts

Latest posts

Logic for Programmers is Now Available

I am delighted to announce that my book, Logic for Programmers , is now available! You can check out the release site here or go directly to buy the ebook or print versions . If you bought any of the early access versions, you can get the 1.0 for free from leanpub . This has been a long time in the making. Formal logic is an incredibly powerful tool to understand software. Everything from…

Chicago vs New York Pizza is the Wrong Argument

It’s April Cools ! It’s like April Fools, except instead of cringe comedy you make genuine content that’s different from what you usually do. For example, last year I talked about The best introductory video games for non-gamers . This year I’m picking a fight. This is “New York” Pizza (NYP): (source) Flat pizza, soft bottom, hard crust, foldable wedges.…

Some Silly Z3 Scripts I Wrote

As part of writing Logic for Programmers I produced a lot of “chaff”, code samples and sections I wrote up and then threw away. Sometimes I found a better example for the same topic, sometimes I threw the topic away entirely. It felt bad to let everything all rot on my hard drive, so I’m sharing a bunch of chaff for a tool called “Z3”, which has all sorts of uses in…

A Very Early History of Algebraic Data Types

Been quiet around here! I’ve been putting almost all of my writing time into Logic for Programmers and my whole brain is book-shaped. Trust me, you do not want to read my 2000-word rant on Sphinx post-build LaTeX customization. But I spent the past week in a historical rabbit hole and had to share what I found. It started with Algebraic [Data] Types are not Scary, Actually . The post covers…

Gamer Games for Non-Gamers

It’s April Cools ! It’s like April Fools, except instead of cringe comedy you make genuine content that’s different from what you usually do. For example, last year I talked about the 3400-year history of the name “Daniel” . This year I wrote about one of my hobbies in hopes it would take less time. It didn’t. The video game industry is the biggest entertainment…

A Perplexing Javascript Parsing Puzzle

What does this print? x = 1 x --> 0 Think it through, then try it in a browser console! Answer and explanation in the dropdown. Show answer It prints 1 . wait wtf At the beginning of a line (and only at the beginning of a line), --> starts a comment. The JavaScript is parsed as x = 1 ; x ; // 0 The browser then displays the value of the last expression, which of course is 1. but why It’s a…

The Hierarchy of Controls (or how to stop devs from dropping prod)

The other day a mechanical engineer introduced me to the Hierarchy of Controls (HoC), an important concept in workplace safety . 1 (source) To protect people from hazards, system designers should seek to use the most effective controls available. This means elimination over substitution, substitution over engineering controls, etc. Can we use the Hierarchy of Controls in software engineering?…

Hiatus

All of my budgeted blogwriting time is going to Logic for Programmers . Should be back early 2025. (I’m still writing the weekly newsletter .)

Toolbox languages

A toolbox language is a programming language that’s good at solving problems without requiring third party packages. My default toolbox languages are Python and shell scripts, which you probably already know about. Here are some of my more obscure ones. AutoHotKey Had to show up! Autohotkey is basically “shell scripting for GUIs”. Just a fantastic tool to smooth over using…

Composing TLA+ Specifications with State Machines

Last year a client asked me to solve a problem: they wanted to be able to compose two large TLA+ specs as part of a larger system. Normally you’re not supposed to do this and instead write one large spec with both systems hardcoded in, but these specs were enormous and had many internal invariants of their own. They needed a way to develop the two specs independently and then integrate them…

What We Know We Don't Know: Empirical Software Engineering

This version of the talk was given at DDD Europe, 2024 . Technology is a multitrillion dollar industry, but we know almost nothing about how it’s best practiced. Empirical Software Engineering, or ESE, is the study of what works in software and why. Instead of trusting our instincts we collect data, run studies, and peer-review our results. This talk is all about how we empirically find the…

Comment Section: Software Friction

These are some of the responses to Software Friction . Blogs on a similar topic Laurie Tratt wrote What Factors Explain the Nature of Software? which touches on the topic of friction, too. Emails and Comments I’m an Infantry Officer in the US Marine Corps, we talk quite a bit about friction. One book you may be interested in if you’re reading Clausewitz is Marine Corps Doctrinal…

Software Friction

In his book On War , Clausewitz defines friction as the difference between military theory and reality: Thus, then, in strategy everything is very simple, but not on that account very easy. Everything is very simple in war, but the simplest thing is difficult. These difficulties accumulate and produce a friction, which no man can imagine exactly who has not seen war. As an instance of [friction],…

Don't let Alloy facts make your specs a fiction

I’ve recently done a lot of work in Alloy and it’s got me thinking about a common specification pitfall. Everything in the main post applies to all formal specifications, everything in dropdowns is for experienced Alloy users. Consider a simple model of a dependency tree. We have a set of top-level dependencies for our program, which have their own dependencies, etc. We can model it…

How old is the name 'Daniel'?

It’s April Cools ! It’s like April Fools, except instead of cringe comedy you make genuine content that’s different what you usually do. For example, last year I talked about the strangest markets on the internet . This year I went down a different rabbit hole. Daniel has been a top 5 baby name twice since 2000 . There are over 1.5 million Daniels in the United States (and almost…

Comment Section: The Hunt For The Missing Data Type

I got a lot of responses to The Hunt For the Missing Data Type . I’ve included some of the most interesting ones below. Response Blogs The “missing” graph datatype already exists. It was invented in the ‘70s , about datalog. Emails and Comments Everything in quotes is verbatim. GraphBLAS My name is Michel Pelletier, I’m one of the contributors to the GraphBLAS API…

The Hunt for the Missing Data Type

A (directed) graph is a set of nodes, connected by arrows ( edges ). The nodes and edges may contain data. Here are some graphs: All graphs made with graphviz (source) Graphs are ubiquitous in software engineering: Package dependencies form directed graphs, as do module imports. The internet is a graph of links between webpages. Model checkers analyze software by exploring the “state…