@rafial: Random insight of the night: every couple years, someone stands up and bemoans the fact that programming is still primarily done through the medium of text. And surely with all the power of modern graphical systems there must be a better way. But consider:

  • the most powerful tool we have as humans for handling abstract concepts is language
  • our brains have several hundred millennia of optimizations for processing language
  • we have about 5 millennia of experimenting with ways to represent language outside our heads, using media (paper, parchment, clay, cave walls) that don’t prejudice any particular form of representation at least in two dimensions
  • the most wildly successful and enduring scheme we have stuck with over all that time is linear strings of symbols. Which is text.

So it is no great surprise that text is well adapted to our latest adventure in encoding and manipulating abstract concepts.


This explains why complex tools used to solve complex problems are often text based, e.g. software, manuals.

Developing a graphical user interface takes extra time and effort, and the less often something is reused, the less sense it makes to add a graphical user interface.

A textual solution might be easier to adapt to a changing problem. We have some tools that work best in text: how to tell the difference between two solutions, how to merge two solutions, how to efficiently store a history of a solution. Already the simplest baby steps away from text ([[SVG?]] graphics, for example) confound all this.


Actually – that’s the very observation – (“Developing a graphical user interface takes extra time and effort, and the less often something is reused, the less sense it makes to add a graphical user interface.”) – that led me to the insight, that we need a SchematicMedium.

Here --

Programming Language : Medium

  • Perl : Text Files
  • Python : Text Files
  • C : Text Files
  • C++ : Text Files
  • ASM (most) : Text Files
  • LISP : Text Files

…and then by comparison:

  • SmallTalk : custom Smalltalk editing environment
  • Scratch : custom Scratch editing environment
  • (insert visual language) : custom (insert visual language) editing environment

What I realized is that for visual programming languages to really become “a thing,” that what is essential is to develop a visual interactive medium, that is specifically NOT tied to any one programming language.

there used to be a long list of basic requirement for a SchematicMedium. It was moved there

My contention is that if the schematic medium is developed, then there will be a huge plethora of programming languages that are expressed schematically.


I want to answer two objections:

  • OBJECTION 1: “Isn’t language the fundamental element of programming?”

Let’s look at mathematics for a moment. Mathematics is expressed symbolically. Also, people regularly use illustrations to explain mathematical points. In some domains (esp. geometry, but also including topology,) graphical representation is fundamental to the communication and relating of ideas.

But let’s go straight to symbols – such as Sigma:



Or something more mundane:


Would the mathematics really be improved by using words, rather than symbols?

Every day, I see calculations expressed in computer programming code that would be better represented if we could actually have (X+Y+Z)/(A+B) expressed with a horizontal bar across, and X+Y+Z atop it, and A+B below it.

Now we could have a conversation about “short vs long” variable names, and mechanical means for locally rebinding large names to shorter names and how to express that mapping, but I want to side-step that.

The primary thing here is that while language is a fundamental element of mathematics, restricting mathematics to the expressible contents of text files (and 7-bit ASCII!) would severely hamper the development of mathematics. I see no reason to believe that programming isn’t similarly hampered.

I think I’d further argue that programming is more fundamentally schematic than mathematics is – that programming is in many ways more comparable to architecture (and architects blueprints,) than mathematics is, at a fundamental level.

  • OBJECTION 2: “Shouldn’t SVG have solved all of this?”

No. SVG might make it easier to write an editor for working on this stuff, but it doesn’t really solve the problem.

SVG is too focused on presentation details, in my opinion, and thus all those unnecessary details get in the way of using the medium to express and interpret programming ideas.

Point of comparison: Rich Text Files (.RTF)

Reading and interpreting an RTF file is fairly complex. To be sure, interpreting a schematic will be more complex than interpreting an RTF – but hopefully minimally complex. What does that additional complexity in an RTF file get you?

Well, you can use fonts, and text size, to differentiate elements. …ok? But does that really help make a richer programming language, in a desirable way?

I think “no, it doesn’t.” It just makes it far harder to interpret the code.

Now look at SVG – it’s full of all kinds of complexities, subtleties. “Did you mean this color and this alpha, or that subtly different color and alpha?” Is that helping us to express programs? I don’t think so.

As an aside, I’ll say something else – I used Inkscape to write a programming language once. It didn’t work out, for several reasons. One of the reasons is that Inkscape is designed for creating illustrations, not for editing programs. So for example, there’s no “Text search across all files in this folder” type functionality. There’s no persisting cursor. It’s just not fundamentally made for editing code. But that doesn’t mean that a SchematicMedium is a bad idea; It just means that people haven’t had the vision of a schematic medium clearly in their mind, what it would be and mean to a programmer, and just haven’t written anything that corresponds.

Alex Schroeder: A point in support of your point regarding mathematical notation and programming would be APL. An example from the APL Wikipedia: x[⍋x←6?40] – reading from right to left, the code takes six random numbers in the 1–40 range, assigned to x, and sorts them (the sort returns indexes so at the end we need to look up the values in x again). It’s not two dimensional like what a formula would be able to offer, but it seems to work without “text” in the ordinary sense.

TimurIsmagilov: Talking about [[APL?]], don’t forget the famous GameOfLife implementation:

life ← {⊃1 ⍵ ∨.∧ 3 4 = +/ +⌿ ¯1 0 1 ∘.⊖ ¯1 0 1 ⌽¨ ⊂⍵}

See APL wiki.


Define external redirect: APL SVG

EditNearLinks: SmallTalk GameOfLife