I'm finding it a bit daunting to catch up on this ...
# thinking-together
s
I'm finding it a bit daunting to catch up on this channel's history. Is there a good web page that summarizes the current ideas on interesting directions in "programming" UIs?
i
Snarky answer — http://worrydream.com
👍 3
😂 3
Beyond that, my best advice would be to just hang out on this Slack for a while. A lot of the big, useful ideas come up again and again as we explore them in different ways and with different perspectives (and as new people come in and ask about "the same old things" in slightly different ways, sparking a new round of debate).
The hard thing about doing a high-level summary (on, say, some web page) is that for most of the promising directions, the devil is in the details. What I've found is that knowing the current thinking around a certain topic isn't helpful (though it is interesting) unless I also know what foundational ideas those current thoughts are resting upon. You need to know the giant to stand on its shoulders.
👍 2
This github collection by @Daniel Garcia might be helpful: https://github.com/pel-daniel/mind-bicycles
If there's a specific topic or idea or broad category you're interested in, I'd recommend making a new post on #C5T9GPWFL saying "People interested in ______, please tell me what current ideas you find exciting"
Examples to fill in that blank: projectional editing / structural editing, node-and-wire visual programming languages, visual programming languages (that aren't node-and-wire), spreadsheet-inspired UIs, literate editors, program visualization, direct manipulation abstractions, text / code editors, Smalltalk-inspired languages, VR programming environments (etc)
👍 4
To flip it around: what about the UI side of programming do you find interesting?
s
I'm not sure there's a name for it, but it's probably closest to live projectional/structural editing.
g
ivan is being overly humble here as he’s also made https://github.com/ivanreese/visual-programming-codex
i’m trying to work out (very slowly) a way of structuring/designing a kind of federated social wiki for this topic as i feel like its a major blocker for people entering the community
🍰 1
s
@Garth Goldwater That sounds great. I think I’d find a wiki very helpful.
Ivan, thanks for visual-programming-codex. This is a great resource.
🍰 1
@Ivan Reese Is there a reason there’s no entry for HyperCard?
i
@Steve Dekorte Holy shit! I guess the reason is that I have a total blindness to things right under my nose. (HyperCard was my first multimedia/programming experience as a kid.) Thanks for shaking me out of that stupor, hah. Edit: No proper entry for SmallTalk, either. I guess I'm just too focussed on things that are new to me.
s
@Ivan Reese Also, would the Smalltalk system & class browser, NeXT InterfaceBuilder, and Self environment be worth mentioning?
i
Ha — nice timing. Yeah, SmallTalk and Self totally. Not sure about IB — I'm trying to draw the line somewhere beyond the bound of "general purpose programming language", but not so broad as to include things like 3D modelling, modular synthesizers, Powerpoint, and other tools that are totally definitionally "programming" but so domain specific that they don't offer much in the way of directly applicable metaphors. I'm aiming to be inclusive, but not to an all-encompassing extent.
I don't really have a sharp line on that stuff, so if you feel IB really fits in with this collection, I'll gladly take your word on it. (I haven't used IB so I'm only categorizing it based on what I've seen of it)
s
I think IB is interesting in how it got some things right that Smalltalk and Self got wrong.
Yeah, I think this question of classification actually gets to the heart of the problem with VP
What is programming? What does it mean for it to be visual? Certainly, IB is replacing the typical fragile and ugly boilerplate UI code with something that is simple and visual.
👍 1
But it wasn’t really a live environment. It didn’t remove the edit/compile/run cycle, but I’d guess many of these examples also aren’t live.
i
This is why I added the (woefully short) Inspirations page: https://github.com/ivanreese/visual-programming-codex/blob/master/inspirations.md There are all sorts of things that qualify as programming, that are worth studying as inspiration for future programming tools, but that are somewhere outside the line I want to draw around the main Implementations page.
s
Is the idea that visual programming implementations are either structured method editors or node-and-line editors?
i
My incomplete working definition is probably closer to... creating a bespoke computer-executable system where the primary authoring activity isn't writing a sequence of characters in a text file.
I throw "bespoke" in there because I'm looking for things that could have some generality to them. Again, trying to avoid including things like 3d modelling, and VST synthesizers with patcher interfaces.
(They're worth studying, don't get me wrong. But they generally aren't created by someone with the goal of being a general purpose programming tool.)
Tools like Apparatus aren't general purpose, either, and I'll probably eventually pull them out into a separate category — tools created to explore interface ideas that could be made into a general purpose programming interface, but haven't been yet.
So that might be a better definition — visual programming tools are tools for which the author specifically claimed that they were making a programming tool (rather than just a music tool or just an art tool, even though music tools and art tools are absolutely programming tools, too)
s
Yeah, general purpose seems like a reasonable constraint but I wouldn’t agree on the text part. For me, the goal is optimizing productivity and there are places where text is more optimal.
So the NeXT Interface Builder is interesting not because it’s visual per se, but because of how much more productive it is. It happens to make the UI building part more productive through directness - visually manipulating the visual UI. But there are other things where doing something “visually” would be less direct and less productive than a text (structured or otherwise) interface.
i
For me, the goal is optimizing productivity and there are places where text is more optimal.
I have a different goal. I'm trying to make programming feel different than it currently does. I don't like the emotional arc of writing code. I like how I feel when I'm doing 3D modelling or music better, so I'm trying to make programming feel more like that. It has nothing to do with productivity — I'm more productive writing code than I am recording music. But the moment-to-moment experience is wildly different.
❤️ 2
DM is part of it, but I think chasing DM itself is actually a distraction. DM will emerge naturally as the result of satisfying other goals.
Text is more optimal for a wide range of things, absolutely. I see a lot of value, though, in defining "visual programming" as oppositional to text, since it pushes you further away from well-explored territory. Yeah, it does mean you miss out on a lot of interesting hybrids, or environments where you have visual extensions to traditional text code (eg: notebook interfaces with inline graphs and widgets). But after exploring a lot of that stuff, I've found it doesn't change how it feels to write code. You're still working in an environment where the mechanical thing you do with your body is type characters into a document, and the thing you do with your mind is imagine what that text does as it executes, and there's no knob that you can turn to control the passage of time (other than undo/redo, but that doesn't touch the execution model in most environments).
A great visual programming tool will have lots of text in it, of course, because text is a great medium. But (I believe) that text will sit inside an environment and execution model that were designed to afford things that simply make no sense if text is the primary medium, or if text is the outer bound / conceptual foundation.
s
(responding to your last paragraph) Well said, I agree. It just seems to me that tools like Smalltalk/Self are much closer to that than many of the other projects in the list.
i
Totally! I simply forgot to add them. Self, in particular, is a big inspiration for me. They didn't succeed at offering the "different feeling" I'm looking for, but they certainly were instrumental in broadening the field in that direction.
👍 1
o
Very interesting discussion on visual and text programming articulation. Thank you!
My experience on that is: I used to play with Max/MSP some time ago. If I recall correctly, on of my project was for some kind of midi/OSC conversion or processing. The box and arrow visual programming was very practical for some points (say for the events routing part) but I felt frustrated when I wanted to do some basic data manipulation where box and arrow would lead to awfull spaghetti code and I felt that I can be very more productive with a text language. Fortunately, Max/MSP has a way to use JavaScript! And I coded some stuff with it. The bad part is that I had to open a code external code editor to modify the code...
So, from the productivity point of view, both visual and text programming were usefull in that case. And the limitation of the visually metaphor of the visual language at hand (Max/MSP) can be bypassed with the help of a text language that is more expressive.
So, I think that until some very mature visual representations can be found (and maybe after that too), it is a good point to have a mix of visual and text programming in a same environnement.
And several years ago I have done some small experiments on this visual/text combination with the PureData/MaxMSP kind of visual metaphor.
Here are some examples:
The point was really to experiment on how to mix both visual and text. I didn't focus to much on the visual metaphor (wich is directly inspired by PureDat/MaxMSP).