Harry Brundage
07/06/2020, 6:36 PMIvan Reese
Ivan Reese
Aleks
07/06/2020, 7:03 PMHarry Brundage
07/06/2020, 7:04 PMHarry Brundage
07/06/2020, 7:05 PMibdknox
07/06/2020, 7:06 PMHarry Brundage
07/06/2020, 7:06 PMHarry Brundage
07/06/2020, 7:10 PMogadaki
07/06/2020, 7:15 PMwhy node and link based programming has only found limited success?My guess is that node and link programming expressivity is limited. I mean it is extremely expressive for some programming artifacts (say, audio processing, event flow, etc.) but very poor for some others (math expressions first come to mind, but I need to find mor examples). So I guess a language that is exclusively based on nodes and links won't be able to be general enough for major success.
opeispo
07/06/2020, 7:18 PMogadaki
07/06/2020, 7:18 PMopeispo
07/06/2020, 7:21 PMogadaki
07/06/2020, 7:22 PMAleks
07/06/2020, 7:25 PMfn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str
and you can easily imagine a language wanting to say
public static async fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str
If its not happening already, textual languages will eventually have to turn down features because they just make the function signature too long.ogadaki
07/06/2020, 7:26 PMopeispo
07/06/2020, 7:27 PMChris G
07/06/2020, 7:40 PMogadaki
07/06/2020, 7:52 PMChris G
07/06/2020, 7:53 PMtbabb
07/06/2020, 9:45 PMtbabb
07/06/2020, 9:46 PMDoug Moen
07/06/2020, 11:01 PMStefan
07/07/2020, 8:20 AMGarth Goldwater
07/07/2020, 2:44 PMGarth Goldwater
07/07/2020, 2:49 PMGarth Goldwater
07/07/2020, 2:51 PMwtaysom
07/07/2020, 3:46 PMibdknox
07/07/2020, 3:48 PMIn both blocks and nodes editors, the interaction loop boils down to summoning a node and then connecting, or placing, it into context. This ends up being a very verb-centric model where you get thenode/block and then wire it up. This is like painting off to the side, moving it to the correct location, and then blending it into the rest of the painting. While there are times where that flow is useful, itās much less direct than just painting in place and requires tedious actions inserted in the middle. Going from two steps to three for every action in a system adds up quickly and makes even the most basic operations feel heavy in these editors. Rather than operating in context, youāre always working off to the side and then rewiring things to make them work.+
wtaysom
07/07/2020, 3:54 PMIvan Reese
For this reason, I favor near-automatic layout.
One of my weed-dweller ideas is that automatic layout is useful, but not in the arrangement of nodes and wires themselves, which (I argue) must be laid out by hand with great care ā and tooling needs to be excellent, in order to make this process a joy (like gardening) rather than a chore (like cleaning up). (The cases where automatic layout is useful... that's much deeper in the weeds. At some point, I'll dredge that patch and plop whatever trinkets and bike tires and fish guts come out on my blog)
Stefan
07/07/2020, 4:38 PMDoug Moen
07/07/2020, 4:59 PMMax Krieger
07/07/2020, 5:13 PMMax Krieger
07/07/2020, 5:16 PMIvan Reese
Garth Goldwater
07/07/2020, 5:38 PMDoug Moen
07/07/2020, 7:14 PMGo doesn't force you to use automatically generated variable/function names. . You choose the names, and it's worth spending the effort to choose great names...Inventing names for trivial things is a pain. One of the killer features of node+wire programming is that you aren't forced to choose names for local variables. Choosing names for important high level concepts, or using 2D layout as a way to organize important high level, is beneficial. But don't make me manually lay out the nodes for 'x + y + z'.
Aleks
07/07/2020, 7:44 PMfunction add(a, b)
doesn't necessarily have a canonical spoken representation, but it feels more obvious than if it were three unlabeled boxes.ogadaki
07/07/2020, 8:05 PMGarth Goldwater
07/07/2020, 8:14 PMogadaki
07/07/2020, 9:32 PMIvan Reese
[very good comment that I enjoyed and agreed with, ending with...] But don't make me manually lay out the nodes for 'x + y + z'.Agreed! No good node editor would make you do that. (There is a paucity of good node editors.) That said,
Vec3.add(x, Vec3.add(y, z))
is bad too āĀ and it's common in languages that don't have operator overloading. But operator overloading isn't a total win either, given precedence is typically fixed (good luck using ^
for the geometric wedge product). So in the end, you still often have to manually lay out your equations, just using extra verbosity instead of extra cabling.Ivan Reese
Doug Moen
07/07/2020, 11:00 PMBut don't make me manually lay out the nodes for 'x + y + z'.
> Agreed! No good node editor would make you do that.Show me an example of one that doesn't make me do that. The problem with node+wire is that once you add a node to the canvas, it is stuck in that position until you move it. So what happens after you have written a substantial amount of code, and need to revise it? Suppose I want to insert 'x + y + z' into the middle of a computation, but it won't fit, there is no room on the canvas to put those nodes where I want. So either I manually rearrange all the nodes to make room for the new code, or I put the new code off to one side where there is space, and drag input and output wires from the place where the computation needs to be, off to where I put the nodes, and now the code looks like a plate of spaghetti. So that's why I want automatic layout. If I insert nodes, the code automatically reflows to make room. If I delete nodes, the code automatically reflows to fill in the gap.
Doug Moen
07/07/2020, 11:02 PMtbabb
07/07/2020, 11:07 PMIvan Reese
moving stuff out of the way3d modelling tools have solved this problem without automatic layout. They give you rich tools to manipulate objects in space, and the space itself, by leveraging the properties of the structure of objects and space. Want to insert something in the middle of a dense mesh? Grab a vertex and spread out new vertices along every inbound edge, turning the original vertex into a face āĀ in 1 keypress + click. Or, slice a plane through the mesh, and push both halves of the mesh apart. Or, band-select all the faces pointing toward the camera, and pull them away from all the faces looking away from the camera. At all times, you have full control over exactly where every vertex is, and when editing in bulk, exactly how each vertex is moving āĀ you would absolutely not want to tell the program "just move my vertices out of the way _somehow_". There are, also, automatic tools you can use. But the manual modelling tools are so good, you rarely want to use the automatic tools. (This gets more weedsy when talking about animation, UV mapping, mesh sculpting, etc. ā those areas have manual+automatic hybrids.Ā But they're also less about putting things in places and more about setting relationships, which is relevant to us, but not relevant to this question.)
Are we agreeing that the ideal is not node+wire?A rich symbolic algebra editor could (and should) just be another node. (And, ideally, you should be able to crack it open and play with the nodes inside it.) This thread is broadly about node-and-wire programming, implicitly vs text editing, so that's where I've been focusing my thoughts. But do count me in with team "node-and-wire isn't the best that visual programming has to offer".
Show me an example of one that doesn't make me do that."There is a paucity of good node editors." So, you'll have to use your imagination :( (There are a bunch of node-and-wire tools that let you put JavaScript or C++ or whatever inside a node. I view that as cheating. There are some node editors, though their names escape me, that do have dedicated equation nodes. None of them are especially rich.)
Chris G
07/07/2020, 11:43 PMwtaysom
07/08/2020, 8:25 AMwtaysom
07/08/2020, 8:26 AMDoug Moen
07/08/2020, 1:35 PMDoug Moen
07/08/2020, 1:38 PMIvan Reese
Garth Goldwater
07/08/2020, 4:26 PMGarth Goldwater
07/08/2020, 4:28 PMDon Abrams
07/13/2020, 9:46 AMAleks
07/21/2020, 3:17 PMIvan Reese