Hacker News new | ask | show | jobs
by dvdhsu 1190 days ago
It was surprising to us (here at Retool) that visual programming has never taken off, despite countless attempts over the past few decades. (That's why we started Retool, after all.) But Visual Basic is probably the product that came closest, and that's why we wrote this homage to it. It, along with Filemaker, Hypercard, are products that we loved. And we always wished that they had flourished, since then we wouldn't have had to start Retool, hah! As Linus says (in the article):

> “For example, I personally believe that Visual Basic did more for programming than Object-Oriented Languages did,” Torvalds wrote, “yet people laugh at VB and say it's a bad language, and they've been talking about OO languages for decades. And no, Visual Basic wasn't a great language, but I think the easy DB interfaces in VB were fundamentally more important than object orientation is, for example.”

8 comments

> visual programming has never taken off, despite countless attempts over the past few decades.

It has, in some niches like Unreal Blueprints.

I think one of the reasons it doesn't become more popular is because most visual programming is just a more cumbersome and slow way of programming. It's stringing the same concepts together in the same way, but slowly and tediously with a mouse.

Non-tech users wouldn't know what to do with it. Power users would rather program directly.

I find dragging-dropping and re-arranging far more expressive for 3D modeling using BlockSCAD than I do the equivalent OpenSCAD code:

https://www.blockscad3d.com/editor/

I'm trying to achieve a similar fluency using OpenSCAD Graph Editor:

https://github.com/derkork/openscad-graph-editor

hopefully a future version will be even more useful than BlockSCAD/Blockly.

Originally Ruby had a Blueprints-like UI to connect an event fired by one gizmo to a property of another gizmo. You would right-click a gizmo, select an event, drag a line over to the target gizmo and select a property.

In fact when Ryan first contacted me about the article, he was looking for a screenshot of this UI. Alas, I didn't have anything.

When Microsoft turned Ruby into VB, they abandoned this UI and just kept the form designer with Basic as a scripting language.

> You would right-click a gizmo, select an event, drag a line over to the target gizmo and select a property.

This idea lives on in Qt Creator - https://doc.qt.io/qt-6/designer-connection-mode.html although I think most larger apps write their `connect()` calls in code instead.

Was it kind-of like this?

> It has, in some niches like Unreal Blueprints. [...] I think one of the reasons it doesn't become more popular is because most visual programming is just a more cumbersome and slow way of programming. It's stringing the same concepts together in the same way, but slowly and tediously with a mouse.

The latter bit basically perfectly describes Unreal Blueprints :-P.

It was hyped when it first came out and for some time (years) it was well received - until people had to deal with the spaghetti mess others made in blueprints.

Visual languages are fine as long as they are limited to high level concepts, but UB not only is not that (there is even a type cast node!) but instead of being there in addition to Unreal Script, it actually replaced it, forcing many people who didn't want to bother with C++ (especially Unreal's flavor of C++) to use blueprints.

Epic supposedly learned from this and UE5 at some point will have a new scripting language, but AFAIK so far it has been vaporware. Meanwhile i (i am into gamedev and have worked with UE) increasingly see people get disillusioned by Blueprints.

I'm the last to defend visual programming, it's mostly spaghetti nonsense and you'd be better of with an actual programming language for most complexity levels -- but I think there's a viable niche for stuff that satisfies both of the following:

(a) it's simple and it strings together off-the-shelf components;

(b) it has an intuitive, well-defined computational model

examples: defining compositions of matrix transformations for camera angles, defining data pipelines (read from this source, do these operations, write to that sink), very simple automation Apple Shortcuts-style (whenever I receive a message from this number, make a note on this file, etc.)

As soon as you venture into general-purpose territory, visual programming is just a disaster. Which is a problem because you have no way to convert your mini-idea into something usable, and you always find yourself wishing you had started with a normal script.

I tend to stay very far away, but it does have its moments admittedly.

The thing is, using modules it should be possible to create even higher-level concepts, so things should become more expressive --- that's how I work in BlockSCAD.

The problem always becomes such expressions become just a list of names of modules and their inputs, so one is back to the wall-of-text problem which a visual tool is supposed to solve --- the fundamental issue is, "What does an algorithm look like"?

and the solution we need is, "What is the most expressive way to create algorithms"?

BP is the only reason I don't want to play with UE. It's too painful IMHO. I wish we had Unrealscript.
I wouldn't say it didn't take off, it just has 'landed' again somewhere over the last 10-20 years. VB, Xcode Interface Builder, Hypercard, Filemaker & Lotus Notes all had pretty good runs, we just never got something similarly successful for the web & even smartphones, probably due to compatibility issues with varying screen sizes.

Once the screen can be wildly resized, it just becomes too murky. Maybe have the programmer do it manually for 2-3 sizes and then let some AI model interpolate the sizes in between?

People still use VB and Filemaker to make applications along with very complex Excel spreadsheets. It’s way more common than the general sentiment here implies.

In fact, I get handed stuff made with tools like these somewhat regularly in order to develop a web app. At some point they become unwieldy and limiting.

I think it’s wonderful that anyone with some technical curiosity can make useful applications with these.

Of course they have a lot of limitations. But that’s fine. They can call a software developer when they actually need one.

yup its like two different worlds that don't know each other exist

the excel tribe and the open source programming world tribe

There is overlap! I've spent the last 8 years working on Grist, which tries very hard to improve on Excel while keep its best aspects, and is open source.
The problem isn't responsive design, GUI builders were able to do that just fine. The problem with making it work on the web was that the dominant design paradigm for web apps was (and to some extent still is) templating, in which there's no clean split between UI layout code and UI controller code and no proper notion of encapsulated components. PHP, JSP, ASP and the <script> tag all mix UI layout with code that works with the database or controls the UI itself. Yet all VB-like platforms require this to be split, because the GUI designer has to be able to edit the GUI code without breaking your app logic too badly, and they really need a strong component model.

How they do this does vary, I don't remember how VB did it but Delphi had a binary file format for describing forms, Java Swing used IDEs with code generation inside magic comments that you weren't supposed to touch, JavaFX and WPF have the cleanest approach with an XML dialect for describing the UI and then the event handlers and controller logic are implemented as classes that are bound to the UI using reflection, Android has something similar, macOS uses NIB files and so on. And they all have a notion of a component being something you can install and treat as if it were one of the built-in widgets. On the web there's no equivalent to this. React sort-of brings components but they don't provide sufficient metadata to be used in a visual designer, and it still mixes code and data together in such a way that visual editors would struggle to not corrupt the user's code.

Ultimately the web came to dominate not because it's a good way to do GUIs. It mostly tossed out what was learned about making GUIs easy to use and develop, because it was never designed to do that in the first place. It came to dominate because it made distribution easy at a time when desktop OS vendors were totally dropping the ball on everything internet related. That's why classical VB-style development app development paradigms dominate on mobile: mobile OS vendors put way more thought into distribution, and that took away the web's primary competitive advantage.

On the desktop distribution can still be quite hard, which is why I put a lot of work into making a tool that makes it drop-dead easy and which gives you the option of web-style forced "immediate mode" updates (we call it "aggressive mode" but that's kind of a dumb name). See my profile for a link. It brings desktop way closer to the web in both UX and DX, which opens up the possibility of VB style development again. Not only for professional devs but also for people who benefit from a lower barrier to entry.

VB did it via VBScript and COM, later with Web Forms in .NET.

Outsystems picked up on this and created a visual programming language for the Web, still going strong 20 years later.

Visual programming is useful in some niches, but for general purpose you either have to have less power than a text based programming language (and users will beg you to add that power) or it will become exactly as complicated as a text based programming language, but more cumbersome because whatever you're doing is slower than typing.

I feel like the whole idea of visual programming comes from some fundamental idea that the hard part of programming is learning the syntax, which I just don't agree with at all.

These are the original low-code tools. Easy to pick up and your average citizen developer could figure it out with some trial and error. So much lost productivity due to whatever happened in the next several decades.
The biggest problem is that it's just impossible to use modern coding tools with them. If we could fix that, so much would work better. Even the best efforts at it haven't really worked out, since there are some truly sprawling VBA codebases out there (tried Rubberduck with a big MS Access app for a business - reliably crashed it).
In science and engineering I would say LabVIEW has taken off. I doubt there’s a university in the world that doesn’t have it running in some capacity. Without learning LV I doubt I would have learnt to code.
VBA, a visual language, runs the entire planet, it's just that nobody knows it or talks about it.
Xojo is another one worth looking at. Desktop and Web apps can be written pretty quick.
Besides all sibling comments, OutSystems is doing quite well for the last 20 years.

Just like most low code, CDP and data analytics tooling.