MSG NOT FOUND
Robbie Gleichman thanks for sharing these graphics! I know how much work it can be to put diagrams like that together. I have similar feelings as Edward de Jong, in that I would worry the examples are too low level. The majority of "business people" (for example) who need to program are not doing complex math with reducers or functional programming. So, I would really conceptualize the kinds of problems you want your language users to be able to solve. At my company, we are building a textual language which operates at a far higher level like
once daily (at: 9am):
(@Postmates) (send) (item description: "Any kind of flowers") (to address: 📍324 Madison)
Parens would not be necessary in our editor and our language is a bit richer allowing you to use things like links to reference variables.
Robbie Gleichman I cannot think of an example in any of the 20 sample programs i have written so far, where currying could be applied. Ambiguity is the enemy of comprehension, and in any language where you can't tell if something is a simple function call or instead a function that returns a function without checking the tail end of the parameter list, creates a difficulty in reading that is just not worth it. It means you have to know when reading the exact parameter list of every function call you see. Given that larger programs are mostly function calls, this imposes a significant memory burden on the reader. The idea of long sequences of positional parameters is an archaic notion dating back to FORTRAN, and is also not readable. I adopted the Smalltalk practice of using optional named parameters, which was also used in Objective-C. It is much more readable. Always a tradeoff between full named parameters and positional; i have adopted a mixed approach because they can get annoying.
A few comments on this thread. 1. This presentation ignores a lot of research on visual programming languages. Specifically there is a large focus in current computing education research on transitioning from a visual language to a text based one gradually (some with real quant and qual behind them) 2. Haskell’s currying exists because all functions take a single argument. But if you wanted to address the issue you mention, you could color each “type” in the signature and show the result under the type variable (with parens as boxes) so you can keep track (like rainbow paren for LISPs). I believe Haskell treats modeling the problem (and determining sig) as the hard part and it usually means implementations are “simple and obvious” (to those that really know the stdlib). Typed holes in purescript did wonders for me when I was learning (though it didn’t help with heavy aliasing)
Robbie Gleichman also a heads up, on the visual programming side, Ivan Reese has a pretty nice collection of visual programming tools that might spark more inspiration for your work! https://github.com/ivanreese/visual-programming-codex
I've been working on a deep learning project that feels relevant to this community, and would love to hear some of your thoughts. I'm training a neural network to translate abstract syntax trees into images (and then back into ASTs since the whole system is an autoencoder.) Right now this is limited to simple arithmetic statements like c / (a+b)
, but the goal is to try it out on larger expressions with a greater vocabulary, so that you can turn larger ASTs into images. In addition to being really fun and interesting, it feels like it could offer ideas for visual programming?
Visualized here is an interpolation between different expression trees. Still kind of rough around the edges.
Mike Cann it's a generative model, end goal is code -> picture that represents that code
As somebody familiar with the transformation taking place, what do you see when you look at that interpolation? I have a hard time parsing meaning out of it.
Jared Windover it's actually unfamiliar to me as well! I basically set up the constraints and it generates a solution without any guidance. I haven't dug into this one yet to try finding any patterns. If I were to guess on this one, it looks like the region on the left describes different operations while the patterns on the right are staying mostly constant. I'm interpolating between a ?? b
where ?? is different operands like + - * /
Jared Windover constraints essentially being the loss function and design of the neural network. the big constraint I'm designing for is isomorphism, so a+b and b+a are represented in the same way, which I'm doing with a graph neural network
noahtren I love this! I'm so excited to see how you adjust how you nudge the model and plan to incorporate more dimensions like color , shape, momentum, velocity, etc. How is the project going?
Steve Peak this is a pretty wild idea you might be interested in also Felix Kohlgrüber Dennis Dang
noahtren — Beautiful! Would love to explore your work more. I’m passionate about reimagining the human-computer interaction (HCI). I feel like placing this product in the scope of NeuralLink and https://www.kernel.co/
Fundamentally, this is the future of coding, I must say. “Code” is but a tool to create something. Code, on it’s own, is useless; much like a hammer without something to nail. Projects like this are absolutely necessary to drive the “future of coding” forward because it’s more people than it is about “code”, the future of coding is about people not code.
Creating anything in the digital space is a two way street: Human to computer and computer to human. This work clearly falls under the human to computer, as does NeuralLink and Kernel. They solve the bandwidth interface issue as well as some complexities in translation (i.e. the act of physically programming or diagramming). These products satisfy one aspect of the future of coding as other products satisfy the other: how do humans understand/read/organize/explore what they created?
noahtren my recommendation is to not focus on math and algebra, which require a level of complexity which is greater than giving simple directions like: “turn left”, “jump up”, “change color to red”. I would push for going for Alexa-like commands: “Turn on the TV” or “Remind me to call my mother.” because they have real world value.
Cole Lawrence thanks! I experimented a bit with introducing color today, here's a little snapshot (ignore the bottom row, that's image augmentation.) progress is going a lot faster since I'm using cloud hardware for training now
Steve Peak thanks so much 😄 it sounds like you're suggesting this would improve the the human-to-computer interface rather than computer-to-human, how are you imagining it? programmers composing glyphs like this rather than coding? that would be really cool. my plan right now is to try building this as a visual parallel to text code, maybe as a helpful way to visualize the complexity of functions
noahtren exactly. I see the relationship, this interaction, being more natural and human. It's not programming, code, graphs... It's not one but any that fit the relationship best. We see this in movies like Iron Man and Star Trek; where the computer is more an AI assistant to assist and augment work.
I don't see programming in the future for most people. I see a digital assistant that performs work for you.