Subtext 9

Subtext 10 is well underway, but version 9 deserves some mention. I didn’t record a demo video as in the past, because I have concluded that medium fails to communicate in sufficient detail. In the future I am going to try the forms discussed in my last post. Unfortunately Subtext 9 has fallen between the cracks, and all it gets is this lousy blog post.

Continue reading “Subtext 9”

Evaluating programming systems design

I collaborated on this paper at PPIG19. They haven’t published the proceedings yet, so I’ve put the paper up here. Abstract:

Research on programming systems design needs to consider a wide range of aspects in their full complexity. This includes user interaction, implementation, interoperability but also the sustainability of its ecosystem and wider societal impact. Established methods of evaluation, such as formal proofs or user studies, impose a reductionist view that makes it difficult to see programming systems in their full complexity and, consequently, force researchers to adopt simplistic perspectives.

This paper asks whether we can create more amenable methods of evaluation derived from existing informal practices such as multimedia essays, demos, and interactive tutorials. These popular forms incorporate recorded or scaffolded interaction, often embedded in a text that guides the reader. Can we augment such forms with structure and guidelines to obtain methods of evaluation suitable for peer review? We do not answer this question, but merely seek to identify some of the problems and instigate a community discussion. In that spirit we propose to hold a panel session at the conference.

What should I build Subtext 9 on?

This will still be just a research prototype of a programming language and environment, so I don’t care about deployment issues. Want to have:

  1. Discriminated unions and pattern matching
  2. IDE with debugging
  3. Rich GUI framework with functional style (Elm/React)
  4. Healthy ecosystem


  • Elm — nice and simple, but better suited to apps than an entire language environment. I really need mutation. Bit of a walled garden. Needs a real debugger (yes reproducibility improves printf debugging but it’s still just printf).
  • Dart/Flutter — could work. Refreshing simplicity compare to the chaos of web programming. Flutter is very appealing. But I’ve used Dart before. It is an old-fashioned OO language and I’ve gotten tired of that. Wake up and smell the pattern matching! Working in Dart felt like living in a remote province.
  • F#/Fable/React — nice, but a big language, with a lot of .NET baggage. Initial experiments ran into difficulties with the .NET tooling.
  • ReasonML/Bucklescript/OCaml/React — technically powerful, but no one seems to be in charge and it’s a big hot mess. Bucklescript is one guy in China. No source level debugger.
  • Swift/SwiftUI — very enticing: a modern language with a modern UI from people who really know their UI. Stealing the best parts of Flutter. Full tech stack fully documented and supported from one company with unbounded resources. Sadly, SwiftUI looks to be just too new. Still very mobile-centric. There isn’t even a table layout.
  • Rust/? — Rust looks a bit scary, but some people I respect love it. There is no good GUI story yet. In a couple of years I expect there will be a SwiftUI clone, compiling to WASM and native. Could be my future production platform.
  • TypeScript/React — utterly mainstream, and I already know it. Has a weak form of discriminated unions. Good enough.

The User Liberation Front

From the beginning this blog had the subtitle “Dispatches from the Programmer Liberation Front”. I have changed it to the User Liberation Front. Really this change has been building for years now. I started out wanting to fix programming, to help realize its full potential, and to uplift our tribe of nerdy misfits. I slowly realized that the heart of the problem is not our technology but our culture itself. Programming sucks because we like it that way. It entertains us with puzzles; it affirms our differences from the outgroup; it rewards us with power and wealth. Enough. I am now an anti-programmer.

The User Liberation Front works to put the power of computers into the hands of users, freeing them from the domination of technologists and corporations. Spreadsheets do this today. We will spread the freedom of spreadsheets to other domains of software, so that, users no more, all can create the software they need.

I am not alone in this. Are you with us?

Roadmap to the Renaissance

How will we escape the current Dark Age of Programming? What will trigger a Software Renaissance? History tells us that major intellectual shifts usually arise not from lone geniuses but from subcultures that suddenly coalesce in a burst of invention and discovery. I have found an interesting book that looks at the group dynamics of such subcultures:  Collaborative Circles: Friendship Dynamics & Creative Work by Michael P. Farrell (suggested by Patrick Collison). From the blurb:

Many artists, writers, and other creative people do their best work when collaborating within a circle of like-minded friends. In a unique study, Michael P. Farrell looks at the group dynamics in six collaborative circles, and gives vivid narrative accounts of each: the French Impressionists; Sigmund Freud and his friends; C. S. Lewis, J. R. R. Tolkien, and the Inklings; social reformers Elizabeth Cady Stanton and Susan B. Anthony; the Fugitive poets; and the writers Joseph Conrad and Ford Maddox Ford.

Farrell presents a systematic description of how such collaborative circles arise and develop. I’ve been trying for years to organize various sorts of groups to advance progress in programming, following the established topography of academic organizations like workshops and working groups. Farrell’s book presents a roadmap to an entirely different terrain: the informal underground rebellions where breaking changes actually happen. Much to consider…
Continue reading “Roadmap to the Renaissance”