Înapoi la articole →

Cel mai recent articol

Ultima verificare

Urmăritori 0 urmăritori
Articole: 127
  1. For latency, anyway.

  2. My work brings me though a lot of software correctness techniques, things like type theory, test-driven development (TDD), and formal methods.

  3. Finding Goroutine Bugs with TLA+

    My job these days is teaching TLA+ and formal methods: specifying designs to find bugs in them.

  4. Decision Table Patterns

    Decision tables are easy, simple, and powerful.

  5. J Notation as a Tool of Thought

    Kenneth Iverson’s 1964 language, APL, won him the Turing Award.

  6. A Better Cheatsheet

    Now that teach workshops for a living, I spend a lot of time on making better workshops.

  7. The Frink is Good, the Unit is Evil

    One day Alan Eliasen read a fart joke and got so mad he invented a programming language. 20 years later Frink is one of the best special purpose languages for dealing with units.

  8. Weak and Strong Fairness

    I’m in the process of revising some of my workshops.

  9. Property Testing with Complex Inputs

    This was originally written as a tutorial for Hypothesis and will eventually be reproduced there, but it might still be useful for people using other property-testing libraries.

  10. Constructive vs Predicative Data

    Consider a data type that represents users, which includes “favorite people” and “blocked people”:1 data Person: favorites: set of Person blocked: set of Person We want a validation that says that these two sets are disjoint, a.k.a. no person can belong to

  11. In Praise of AutoHotKey

    People think it’s weird that I do all my development on a Windows machine.

  12. The Hard Part of Learning a Language

    I want to do $THING.

  13. Announcing: Alloydocs

    tl;dr: online Alloy reference here.

  14. The other day I read 20 most significant programming languages in history, a “preposterous table I just made up.”

  15. This is How Science Happens

    I love science.

  16. Feature Interaction Bugs

    In most testing frameworks, you’re expected to write a lot of low-level tests and few high-level tests.

  17. The Business Case for Formal Methods

    This is an “intro packet” you can use to argue for the benefits of formal methods (FM) to your boss.

  18. Hypermodeling Hyperproperties

    When we design programs, we usually look for two kinds of properties: that “bad things” never happen and that “good things” are guaranteed to happen.

  19. How fast do I talk?

    I speak very fast.

  20. Formally Modeling Database Migrations

    Most of my formal methods examples deal with concurrency, because time is evil and I hate it.

  21. Python Negatypes

    Back in 2007 Python added Abstract Base Classes, which were intended to be used as interfaces: fromabc import ABC classAbstractIterable(ABC): @abstractmethod def__iter__(self): while False: yield None defget_iterator(self): return self.

  22. Performance Matters

    Last year I got certified as an EMT.

  23. Modeling Missing Requirements

    Many bugs are implementation errors: there is a mistake in the code that makes it not do what you wanted it to do.

  24. Probabilistic Modeling with PRISM

    In my job I dig up a lot of obscure techniques.

  25. I’ve been using Vim for eight years and am still discovering new things.

  26. Alan Kay Did Not Invent Objects

    People keep claiming that modern OOP languages aren’t “really OOP” because they don’t follow Alan Kay’s definition of “OOP”.

  27. Modeling Adversaries with TLA+

    A common question I get about specs is how to model bad actors.

  28. Finding Property Tests

    A while back I was ranting about APLs and included this python code to get the mode of a list: defmode(l): max = None count = {} for x in l: if x not in count: count[x] = 0 count[x] += 1 if not max or count[x] > count[max]: max = x return max There’s a bug

  29. Metamorphic Testing

    Confession: I read the ACM Magazine.

  30. Using Formal Methods at Work

    A few people have told me that they’ve enjoyed learning formal methods but aren’t sure how to actually use it.

  31. Solving Knights and Knaves with Alloy

    There’s a famous logic puzzle, originally from Raymond Smullyan, called a “Knights and Knaves” puzzle.

  32. Why Don't People Use Formal Methods?

    I saw this question on the Software Engineering Stack Exchange: What are the barriers that prevent widespread adoption of formal methods?

  33. STAMPing on event-stream

    The goal of a STAMP-based analysis is to determine why the events occurred… and to identify the changes that could prevent them and similar events in the future. 1 One of my big heroes is Nancy Leveson, who did a bunch of stuff like the Therac-25 investig…

  34. A Better Interview

    Caveats: I’m not an interviewer, I’ve never done serious research on interviews, and I haven’t tested this.

  35. Modeling Message Queues in TLA+

    I recently did a corporate TLA+ workshop and some people asked what TLA+ specs look like in practice.

  36. Practical TLA+ Now Available

    Update 2024-08-28: I’ve since released a free online book, Learn TLA+, that supersedes Practical TLA+.

  37. Optimizing MiniZinc

    This is part two of a two-part article.

  38. Constraint Solving with Minizinc

    This is part one of a two-part article.

  39. 1/0 = 0

    Disclaimer 2024-12-02 Since this rant is going viral again (again (again)), some disclaimers: I wrote this six years ago to “”“win”“” an ugly Twitter fight.

  40. Augmenting Agile with Formal Methods

    I really like the c2 wiki as a historical artifact: a lot of big names in Agile and Extreme Programming argued with each other there.1 One thing they did was the Extreme Programming Challenge, where people tried to test the limits of these approaches.

  41. Decision Tables

    I really like decision tables but they’ve fallen out of common knowledge.

  42. Formally Specifying UIs

    Good UI is necessary to making correct software.

  43. Raw Materials

    This is an excerpt from Michael Jackson (not the singer)’s book Software Requirements and Specifications, in his discussion of “Raw Materials”.

  44. The Great Theorem Prover Showdown

    Functional programming and immutability are hot right now.

  45. Why Does "=" Mean Assignment?

    Take the following code: a = 1 a = a + 1 print(a) A common FP critique of imperative programming goes like this: “How can a = a + 1?

  46. Just a Whole Bunch of Different Tests

    I’ve been working on a bunch of longform obligation pieces and while they’re a lot of fun, they’re also steadily driving me insane.

  47. Formally Specifying a Package Manager

    This post was commissioned by Graham Christensen as part of the Great Slate fundraiser.

  48. List of TLA+ Examples

    People always tell me that the hardest part of learning TLA+ is finding good examples.

  49. Monad Tutorials for Other Topics

    “Mathematics doesn’t have a sense of time, but often we need to track time.

  50. The Problem With APLs

    Note: I’m coming from this from the perspective of a J programmer.