5 ms·
PWCT2: Programming Without Coding Technology
- JaDogg 2y agoGood stuff, I like how individual tokens have colours in the tree view. it seems like a visual syntax tree.
- MahmoudFayed 2y agoThanks for your kind words
- WillAdams 2y agoHow are syntax/structure enforced? Scratch/Blockly uses shapes to ensure things work, while node editors will disallow invalid connections.
- MahmoudFayed 2y agoIn PWCT1 we provide two modes 1. (Free Editor + VPL Compiler) which allows syntax errors and can detect them 2. (Syntax Directed Editor) which prevent errors. In PWCT2 at the current stage we provide (Free Editor), The (VPL Compiler) will be added to detect errors and the SDE will be added to prevent them as we did in PWCT1.
- MahmoudFayed 2y agoAs of January 12, 2025, PWCT2 will check rules (defined by each component) to determine the allowed parents and children. This functionality was previously applied in PWCT1 and is now implemented in PWCT2 as well. This prevents composition errors; for example, (Else) or (Elseif) components can't be added outside the (If) component.
- jasonjmcghee 2y agoMaybe I'm missing something obvious, but this reminds me of scratch (+ visual basic ish), which I would consider "coding". Whether you type i-f or drag in "if" - it's still coding, right?
- WillAdams 2y agoYes, but this eliminates syntax errors, and since it works well for folks who have difficulties w/ keyboards/are using styluses is something a bit different from the traditional view of programming as textual instructions. It would be interesting if it were more graphical/symbolic, and unlike Scratch (or its derivative Blockly) there aren't any visual cues as regards enforced syntax/structure. Interesting that they have a link for "Rich Comments (Adding Images)": https://www.youtube.com/watch?v=3yd72YrXxF0 https://www.youtube.com/watch?v=3yd72YrXxF0 Is it possible to install for Windows w/o using Steam?!? For those who are curious there is a list of GUI elements which are supported: https://doublesvsoop.sourceforge.net/pwct2/visualcomponents.html#gui-add-components https://doublesvsoop.sourceforge.net/pwct2/visualcomponents....
- MahmoudFayed 2y agoThanks for your kind words To run the software without steam, install Ring language (Windows/Linux/macOS) then run it directly from the source code: https://github.com/PWCT/pwct2?tab=readme-ov-file#running-pwct-20-from-source-code-windowslinuxmacos https://github.com/PWCT/pwct2?tab=readme-ov-file#running-pwc... In terms of adding more graphical/symbolic elements, we will address this in PWCT3. Additionally, publishing the PWCT2 source code will enable developers to extend the software in various directions based on their vision.
- ANewFormation 2y agoThe ironic thing is that as visual programming languages become sufficiently robust, the necessity of typing quickly returns. Blueprint in Unreal is the best example where you can try to dig through a tree of thousands of nodes (where hierarchies inherently start to become counter intuitive in at least some cases) or you can just start typing the node names. And then once you start also specifying the parameters you end up, more or less, typing out the calls anyhow - but with the downside that visual programming rapidly becomes inscrutible at scale with size + flow control/branching.
- smaudet 2y ago> who have difficulties w/ keyboards/are using styluses is something a bit different from the traditional view This part would be interesting, I perennially wish I could code on my tablet, but the IDEs there are just too awkward. The big issue is, I still want a touch-type interface (like a keyboard) so that I can rapidly access many different concepts, but the Android UI is just too constrained by me having to peck slowly one key at a time. I.e. the problem (there) is not the code, it is the input method. What I really need is the ability to access my idioms with multiple fingers, but without smudging my feedback loop (the mobile screen). Perhaps some method of inputting code as symbols with a stylus could work better? Although it might still be very awkward...
- daft_pink 2y ago[flagged]
- MahmoudFayed 2y agoPWCT2 supports the importation of textual code written in Ring. This allows us to leverage large language models to write the code and then import it. Here is a video demonstration: https://www.youtube.com/watch?v=Fx--dNZvncc https://www.youtube.com/watch?v=Fx--dNZvncc
- daft_pink 2y agoSorry, it was just a joke.
- anonzzzies 2y agoStill a good answer from OP.
- rad_gruchalski 2y agoUse DALL-E.
- deleted 2y ago[deleted]
- szvsw 2y agoJust going to highlight some of my favorite graph/flow based programming environments: - Max/MSP - originally for audio/visual synthesis, but widely used for generative art (in the meaning of generative that existed before the AI boom of the 2020s) - Grasshopper & Dynamo : structural/geometry/architectural generative design - Modelica/Dymola/OpenModelica etc: symbolic equation modeling and diffeq solving, widely used in HVAC/systems modeling, automotive, aeronautical design - Modular synthesizers - analog audio synthesis (and these days, digital as well!) It’s interesting to see that almost all of the examples mentioned above leverage the fact that they are abstractions on top of lower level programming frameworks which are tailored to specific tasks in order to make fantastic, intuitive interfaces that are easy to learn and quick to iterate incredibly complex designs within their domains, while the example linked here is not really domain-specific and is much closer to traditional programming (or something like Scratch)
- deleted 2y ago[deleted]
- WillAdams 2y agoThree of my favourites: https://www.blockscad3d.com/editor/ https://www.blockscad3d.com/editor/ https://github.com/derkork/openscad-graph-editor https://github.com/derkork/openscad-graph-editor http://nodezator.com/ http://nodezator.com/ Also worth noting is: https://ryven.org/ https://ryven.org/
- jitl 2y agoThis Youtube channel "Ussa Design" has some really neat process videos of using Rhino3D + Grasshopper parametric design approach to build a whole bunch of different stuff. But, not much in the way of explanation or tutorial, mostly just a watch-along and chill out kind of vibe. I really like the idea of parametric CAD design via flow programming - you can go back and change any parameter later. Versus typical 3D modeling or CAD workflows where you basically are working with digital versions of typical shop tools like lathes, routers, extruders, etc where a fillet or cut you made 10 hours ago can't be changed without "rebuilding by hand". https://www.youtube.com/watch?v=bP-eWFpm-IY https://www.youtube.com/watch?v=bP-eWFpm-IY https://www.youtube.com/watch?v=wdaCA8CUoF8 https://www.youtube.com/watch?v=wdaCA8CUoF8 https://www.ussadesign.com/ https://www.ussadesign.com/
- kazinator 2y agoConnecting a graph isn't coding? How about sticking wires into a breadboard socket to create ones and zeros: that must also not be coding since it's just hooking up a graph.
- nativeit 2y agoI think in this context, it’s attempting to draw a distinction between “programming” and “coding”. Reasonable minds can disagree with whether or not this is successful (or even all that meaningful).
- kazinator 2y agoThe idea that a programmer can work on an executable form of the solution, but not be coding, disappeared decades and decades ago and is probably not worth resurrecting. The term "coding" in computing originally referred to encoding a program in the language of the machine: "machine code". Machine code was probably called that because it is cryptic, not allowing calculations to be specified in ordinary notation and in a machine-independent way. Programming was the overall activity of designing a program, which could have involved planning it on paper; coding was the manual translation of the design into machine code. Early programs that translated higher level statements into machine coders were called "automatic coders" and not "compilers", because they helped with the step that was already called "coding". The idea was that when you prepare input for the "automatic coder", in the higher level language like Fortran or whatever, you are programming, but not yet coding: the automatic coder is the thing that is coding for you; i.e. making machine code. (The term "compiling" also existed, but it had a meaning similar to the dictionary meaning: something like accumulating multiple library functions into a single image. I think, something similar to producing a .a archive from .o files. The way we use "compiling" and "compiler" today doesn't make sense in regard to the ordinary meaning of the word.) Eventually, writing in a high level language became "coding". The idea is that as soon as you begin steps which communicate your solution to the computer, which the computer will take as-is and execute, you're coding: you're encoding the abstract idea into a form which the machine understands, whether that be assembly language or Prolog. Those aspects of programming that are not coding have to do with clarifying requirements and planning the solution (and, later, testing and debugging). Once you have clarified the requirements and planned the solution, and have started using a GUI to hook up functional blocks to make it happen, you are coding the solution. There is no need to go back to the old terminology whereby you are programming the solution, and the "automatic coder" then takes your graph and turns it into computer code. Not even if we think that the terminology was good. It was good for "compiling" to just refer to sticking things into a bundle, rather than translating in a complex way, but we are not going back to that, either. We will just have to see how the language develops. Maybe developers will prefer not to call any graphical manipulation of functional blocks "coding". Especially if it's in a paradigm where the graph is translated into code that they often look at and perhaps edit, because you then might want the word "code" to unambiguously refer to that code.
- hnlmorg 2y agoI really want to like this because you can tell a lot of love has gone into it and visual programming environments is an area that needs a lot of love. But sadly this feels like it’s missed the mark by some margin. Watching the videos and looking at the IDE, I’d say it’s exactly like coding compared to a lot of the other Visual Programming languages I’ve seen and used. If I had to describe this, I’d say it’s a mouse-driven IDE with a YAML-like code. But in its current guise, I can see people itching to use the keyboard for speed once they know what text pieces they want. Whereas some of the other visual programming languages, and their accompanying IDEs, aim to represent program logic in a way that is graphical rather than textual. Which is I think you would normally make the “no code” distinction.
- techwiz137 2y agoI think given the advent of AI, there is less of a need of such a language. All I need is to type out a piece of concise text to AI of choice and I can have a general GUI up and running without having specifically much knowledge of a programming language.
- MahmoudFayed 2y agoWe think differently. In PWCT2, we believe visual programming is more attractive in the age of AI and large language models (LLMs). This video demonstrates how to use LLMs to generate code that can be directly used in PWCT2: https://www.youtube.com/watch?v=Fx--dNZvncc https://www.youtube.com/watch?v=Fx--dNZvncc
- szvsw 2y agoWhile I agree with 99% of what you said… > I’d say it’s a mouse-driven IDE with a YAML-like code. But in its current guise, I can see people itching to use the keyboard for speed once they know what text pieces they want. It’s useful to keep in mind that a “mouse-driven” IDE could have some real benefits from an accessibility perspective. I agree that this generally might miss the mark from a variety of goals, especially compared to graph based dataflow programming languages (see my other comment in this thread), and to really maximize accessibility as a goal you would need to actually design it for that from the ground up, but it’s still good to see experiments with other modalities and raise the question. At the end of the day the fraction of programmers who have difficulty typing is low… but that doesn’t mean it should be ignored, especially considering that one day almost all of us on here will have trouble typing, but likely still have the urge to code!
- jitl 2y agoI don't understand the use-case for an programming environment where the program looks like a text file, but I need to click on a while loop and then click on the "condition" field in the details column to edit the condition code with my keyboard, rather than just select the condition code in the main view and type there. I guess the program in the main view is always syntactically correct? But I can still have a syntax error in my condition, so on what dimensions is this a net improvement vs just... typing the code? I am a big fan of flow-based visual programming for signal processing domains (like GNU Radio), music and generative art (like Max/MSP). In those domains where there's a lot of data flowing through confusing but pure transformations, and having a GUI and being able to effortless inspect intermediary products and creatively try different pipelines of patches can be much more convenient than text programming. But if you're just putting a lot of extra steps around a typical looking procedural scripting language, what's the win?
- PittleyDunkin 2y ago> But I can still have a syntax error in my condition, so on what dimensions is this a net improvement vs just... typing the code? To me this is a massive win. Structural editing solves so many problems we face as coders. Imagine not being able to save a file with invalid syntax! Imagine if changes were defined in structural or semantic terms rather than through text! The man-hours saved are mind-boggling to even consider. Anyway intellij + java is already pretty close to this and java syntax is certainly not LESS ugly of an interface. I really just want my editor to not allow persisting anything but a coherent program....
- andylynch 2y agoSpecifically for Java (though earlier versions were LISP) - I had the pleasure or using SeeBeyond‘ eGate , which did almost exactly this. It was a horrible, slow ordeal. IntelliJ’s structural search / editing is very powerful, but also arcane enough that few people I know actually use it.
- PittleyDunkin 2y ago
- WillAdams 2y agoThere is a bit more context in the announcement on Reddit: https://old.reddit.com/r/programming/comments/1hslkbk/after_8_years_of_development_and_delivering_it_to/ https://old.reddit.com/r/programming/comments/1hslkbk/after_... >After 8 years of development and delivering it to thousands of users, today I am open sourcing my visual programming language. The discussion there is worth reviewing as well.
- cess11 2y agoIf you think this looks kind of nice but want to type in the code yourself, here's a couple of alternatives that might fit. https://pharo.org/ https://pharo.org/ https://factorcode.org/ https://factorcode.org/
- MahmoudFayed 2y agoThese are GREAT PRODUCTS Thanks for sharing :D
- nimish 2y agoAlice did this 20 years ago? Smalltalk did this 50 years ago? What's new and cool about this one? I'm jaded and cynical. I want to be proven wrong.
- MahmoudFayed 2y agoPWCT (Programming Without Coding Technology) is designed as a general-purpose visual programming language and is used for developing the Ring programming language Compiler/VM. (Research paper: https://www.mdpi.com/2079-9292/13/23/4627 https://www.mdpi.com/2079-9292/13/23/4627) With respect to Visual Programming Languages, the main contributions of PWCT are: 1- Introducing the Graphical Code Replacement (GCR) method as an alternative to Drag-and-Drop. (Research paper: https://link.springer.com/article/10.1007/s42486-020-00038-y https://link.springer.com/article/10.1007/s42486-020-00038-y) 2- Using the Time dimension at the program design level, which allows running programs in the past and playing programs as a movie. 3- The first VPL to be used in the development of a Compiler and Virtual Machine for a TPL. PWCT is influenced by Lava, Forms/3, and Limnor. PWCT2 incorporates more features from other VPLs like Scratch and Envision. PWCT2 improves upon PWCT by providing a faster, cross-platform environment that supports importing and exporting Ring code. Additionally, the implementation of the environment has been switched from Visual FoxPro to the Ring language. Since PWCT2 supports importing Ring code and is written in Ring, it is a self-hosting VPL. Also, PWCT2 adds the auto-run feature to the Time dimension.