POSTS

Feeling Code's Consequences

Blog

One of my favorite videos ever is Brett Victor’s Inventing on Principle 1 wherein he shows a code prototyping/editor that provides live feedback based on changes made in the code editor. On top of that, many of the changes made in the editor are not made by changing a piece of text, but rather by using a knob, a slider, or some other control that operates like an analog knob/switch/slider in the real world.

Most of the time, when writing code, one makes a change, rebuilds the program, and then sees if the change creates the desired output. This is sometimes called the development (when all is going well) or debugging (when something is not quite right) loop. In Victor’s demonstration, the changes in values are instantly reflected in the output (in this case an emulation of beautiful Japanese cherry blossom trees, as seen in the article headline image). In his prototype, the value of the number of blossoms per branch are changed by using an analog “slider” control. It’s a beautiful and human-friendly vision.

Recently, at “Clojure Conj” 2024, Adam Vermeer showed something remarkably similar in terms of feedback, discoverability, and introspectivity, “badspreadsheet.” It allows interlinking of cards on a live canvas and programs in one card can affect the display in other cards.2 This probably sounds like a regular ol’ spreadsheet to you, but it’s one where the cells at the intersections of rows and columns are dynamited loose from a constraining grid and can be spread out like cards in a Tarot reading or Trello work stages. Or if you’re familiar with Lotus’ alternative take on spreadsheets from ~1990, called Improv, you might see some similarities.3

Viewing the source and rendering of Adam Vermeer’s application badspreadsheet

Viewing the source and rendering of Adam Vermeer’s application badspreadsheet

As I was mentally reversing the years 2024, 2014, 1990, I found myself swimming back to the #retrocomputing platform called Medley. Back in 1986, Medley was a platform where (dig this) one could change memory state of the machine using Interlisp (a Lisp developed at Bolt, Beranek, and Newman (BBN)) and have it interact with/update the graphical display on screen. If you look at the image below, the white window in the top left is a Lisp read-evaluate-print-loop. It can evaluate expressions like (+ 2 2) and return 4, but it can also evaluate expressions like (new-window...). Thus “developing a program” is no different than “using a computer.” You continually evolve memory state to a point that it’s “done.” And, if you’re wrong and it isn’t done (because, let’s be real, software is never fixed and/or done), that’s fine, just…evaluate some more expressions.

If that sounds too strange to be true consider e.g. a “computer” like a satellite. You load it with initial functions and capabilities and have disparate subsystems interact with each other to help fulfill the satellite’s mission goal. If something goes wrong, wouldn’t it be nice to have a window that you could access over network that would let you debug, diagnose, and fix the computer? It already happened. Ron Garret debugged and fixed a broken satellite at a distance of 150 million miles away.

Future Directions

More and more, I think this might be a way forward in terms of programming: who wants the hassle of introducing intermediary software like virtual machines, virtual machines, virtual machines, containers, install packs, and libraries when you could just ship a runnable and, theoretically, extensible program/programming environment?

Recently, my Mastodon associate Paolo Amoroso showed promising work in thinking in this paradigm by demonstrating an extension he wrote to Medley’s NoteCard application that added support for browsing the web.4

Paolo Amoroso’s WebCard extension to Medley Interlisp

Paolo Amoroso’s WebCard extension to Medley Interlisp

Conclusion

As early as 1986 there were very interesting developments of accessing memory state programmatically and/or through UI to change UI visualization in realtime that helped software developer productivity and capability. There are such wonderful ideas in our technological rearview mirrors!

Footnotes

  1. I really like “badspreadsheet” because the name hints at alternate models of interaction with spreadsheet outside of the format VisiCalc/Lotus 1-2-3/Excel/Google Sheets brainwashed us to expect. From the video, I believe it could evolve to support the interaction model behind Lotus’ Improv.

  2. Medley was considered abandonware but some of its original developers ported the code to work on the X86 chipset architecture and have brought the glorious, streamlined, black-and-white IDE-as-OS environment of Medley into the public’s hands as open source. Many #retrocomputing fans are working to understand and enrich this novel work environment.