People have tried this. Over and over and over. I love the idea, and I too have tried (and scrapped my effort), but it is an immensely difficult problem to tackle for a number of reasons:<p>- The moment you force a user to pick up the mouse, you have lost.<p>- It seems very compelling to augment the display with more information, but a lot of it is simply distracting, or reduce the density of relevant information that will fit on the page. There's a reason that even in most IDE's very little additional information beyond syntax highlighting have "stuck".<p>- Some weirdos (like me) won't touch tools that won't let me work over a dumb ssh connection and terminal when I need to, which is one of many reasons why...<p>- ... everything needs to have a sane textual format. Another reason is that it is essential to communicating about the code.<p>If you want to think about this, at least thoroughly review the long history of visual languages, as there are plenty of mistakes to repeat.
I've spent the past year "working" within graphical programming, and I have to say it is a slow form of torture.<p>I have been "writing" IVR applications for a call center. The interface is far from intuitive, and it is jsut too easy to miss what is actually going on. The loops and if statements are all there, but you have to click through on the item to actually see what is going on.<p>Forget trying to find an easy way to locate where something is. at least in my case (VXML) I was forced to use grep to at least give me an idea of where to look, then spend 10x the amount of time it would take in plain ol code to find where to make the change.<p>ugh.<p>give me ASCII code any day
[Terms of Service: Let me start by saying that I admire the author's passion and effort to create something wonderful, and that this is not a crap on their project, but rather a reaction to their essay. And the fact that their essay raised a reaction to the point where I wrote something about it is, in this case, a testament to its quality.]<p>Lisp programs can be represented as trees because they are trees. They can also be represented as lists, and this is because they are also lists.<p>The important difference between these representations is that trees the primary representation by which computers unravel the intent of a Lisp program and lists are the primary representation by which programmers express intent in their programs.<p>Sure some people sometimes picture their lisp program as a tree, but usually when a programmer pictures something as a tree, it is when viewing it as a data structure. Picturing a Lisp program as a tree is easier than picturing the tree represented by code in most other languages because of Lisps simple parsing process, but the way in which a programming language is parsed is an arbitrary feature of the language [though one worth design consideration].<p>Although it is easy to draw a tree. Often in Lisp and other languages, the verbal diagram "a list of lists of ..." is adequate to represent a tree along with a description of its interesting properties. Again, while the interesting properties can be represented graphically, what makes them interesting are the maths underpinning their structure not the aesthetics of their spatial representation.<p><i>"The purpose of this project is to assist the coder in developing more complex code faster and easier"</i><p>This is orthogonal to Rich Hickey's goal of making it easier and faster to produce simple code.<p><a href="http://www.infoq.com/presentations/Simple-Made-Easy" rel="nofollow">http://www.infoq.com/presentations/Simple-Made-Easy</a><p>We already have a great tool which allows graphic methods to be used easily to create complex code. It is called Excel.
Again I look at how our industry completely ignores every other industry out there. Some things do lend themselves to graphical viewing. Some things do not. Many things lend themselves to a series of graphical representations. The vast majority of things benefit from both graphical representations <i>and</i> textual elaborations.<p>One of the things I wish programming tools offered, was a way to "zoom in" details wise on a solution. More than just offering an outline, I want there to be some sort of representation of how things went from conception to realization. Consider, the story boards for movies/games. Those story boards are lost in the final product. Worse, when you are looking at a piece of code, you don't really see the "why" of what it was made for.<p>Sure, you get some of this with descriptive names, but that really doesn't help with what I'm wanting to say here. An example, that I really want to explore some more is graphviz. It can go from text to graphics. This process is fairly static, though. If it doesn't turn out how you want it, you have to edit the text and fire it again. I want something that can possibly go from text, to initial graphics where I manipulate it some more, to final representation all in a repeatable way. (I think this is possible, but I am not familiar with the toolchain.)<p>More, there is no reason I shouldn't be able to start from graphics, go to a textual details portion, at varying levels of detail, make edits, and view what effect they have in the viewer.<p>Imagine, something similar to developer tools in chrome/firefox, where in addition to being able to look over at the boxmodel for details, you can physically move elements around.<p>Of course, I'm a bit of a heretic. I would kind of like to be able to export absolute positioned style sheets for forms designed this way. :) Still not sure on all of the reasons that would be terrible.
This is what you get when you lock yourself in the *nix Vim-niverse. Try Visual Studio 2012 Ultimate:<p><a href="http://msdn.microsoft.com/en-us/library/vstudio/jj739835.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/vstudio/jj739835.asp...</a><p><a href="http://msdn.microsoft.com/en-us/library/vstudio/dd409365.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/vstudio/dd409365.asp...</a><p>PS: pricing is the sad bit :(, but there is no competition in this area. I hope JetBrains will work harder.
I can postulate that there is absolutely no way a purely graphical representation of code will be the future. The same way we do not talk using pictures.<p>A graphical language would be best used to display structure. Bonus points if it allowed changing. The rest, modules if you will, can be better described by text.
Personally, I would prefer an IDE/debugger that allowed me to visualize my data really well. This ought to be a lot easier also - I've done some simple scripting with GnuPlot which has given me a lot of mileage. But imagine being able to put a breakpoint anywhere in your program and interactively browse your trees, dictionaries and arrays using OpenGL-accelerated real-time graphics. I don't understand why xCode and VS aren't putting more efforts into things like this.
I've always thought that a visual interface for programming would help with my procrastination problems.<p>It's so painless for me to open up a webpage and solve daily chess puzzles... on the other hand it seems more painful to open up an IDE and start solving code "puzzles." I wish I could visualize all the pieces of my software similar to chess.
What's the difference between this effort and the countless Graphical Programming efforts that have come before (many with large teams as well as many other single-author efforts)?
Users will use Excel.
That is the closest thing we have to graphical programming that works. They don't need to understand data structures, just columns and rows. Anything more than that, and you need to understand new concepts. By the time you understand these, drag and drop doesn't gain you much over typing.
Did some LabView programming as a student, didn't enjoy the experience.<p>Graphical programs are similar to circuits without memory, and thus are less powerful then Turing machines. As a result, graphical programs quickly grow in size, and growth happens in 2 dimensions, which makes it very hard to read them.
I don't see graphics as a silver bullet, but I do think they're underused or misused. Graphics provide a wider variety of feedback; they let you see graph structures and summaries of data, and allow connections to be spatially represented.<p>All of which means that they excel at connecting the big chunks of the system that build on top of some model of service provision and protocol definition, but poor at engaging in the "direct dialogue" of imperative or applicative computation.<p>The part that makes people say "it never works" is that we're almost always thinking from an inverted model, where we know how things scale up and down with text, and apply that learned experience to graphical systems. Subsequently, our engineering instinct leads us to put a similar degree of granular agency into graphical coding and allow the standard constructs (looping, branching, subroutines) to appear in it, which massively increases the complexity of the system and brings us away from problem domain thinking.<p>My recommendation now is - figure out a data structure that could be interesting to visually edit. Make a good editor for that. Allow imperative code a runtime model for accessing it. Allow imperative code to be called from it. Then it stands at least some chance of not being a bad wheel reinvention.
In the '80s I was working on a (never released) system I called FlowPro, but EGA adapters and 8088 processors weren't really capable of the kind of DnD I wanted. The idea was that flow-charts would be turned into code, with some meta data added if you wanted specific variable names etc. (instead of the words used in the diagram's box).<p>Then in the early-to-mid '90s, I came across a product called Prograph that ran on both Windows (I did a lot of programming for WFW with it) and Mac (OS 8 I believe). I loved that system, and realized it solved some of the syntax issues I had using flow-charts, but it still never really took off. The concept lives on with the Marten IDE though I'm not sure how many people are actively using it.<p><a href="https://en.wikipedia.org/wiki/Prograph" rel="nofollow">https://en.wikipedia.org/wiki/Prograph</a><p><a href="http://andescotia.com/products/marten/" rel="nofollow">http://andescotia.com/products/marten/</a>
I worked with numerous tools for graphical programming, mostly for academic work.<p>Such as graph-transformation based tools for software verification, in which your programs are graphs.
<a href="http://wwwhome.ewi.utwente.nl/~rensink/papers/spin2006.pdf" rel="nofollow">http://wwwhome.ewi.utwente.nl/~rensink/papers/spin2006.pdf</a><p>Which is useful for software verification, but writing your actual program in it is cumbersome.<p>Software is a lot about abstractions, and there is no reason that graphical programs are better at representing abstraction that text (or maybe im wrong here?).<p>In theory, that what you can represent in graphical-form you can also represent in textual form.<p>However the information density with an 2D graphical form is much higher than textual form. And the more information you put into the same space, the more difficult it is to reason about it. Thats why textual programming is still very much popular.
I find myself looking for graphical interfaces to things I already know fairly well but don't really care to drop into shell every time I need to use it. I have an SSH tunnel manager and an rsync manager. I use Sequel Pro instead of the mysql command line.<p>In fact, I really only find myself using the command line for, you know, running commands. If I find myself there a lot, I'll check myself and start to think, "can I start putting all these things I'm typing into a Rake task or shell script? After all, the more I'm there, the more chance for user error.<p>I think the only major task I still use a terminal for is looking at log files. I intend to eliminate that soon enough when I can 12-factorify the app I'm responsible for and find a decent graphical log viewer.
The idea of graphical programming seems in a lot of way like graphical mathematics.<p>Works in some cases, but not in all.<p>I used graphics to represent databases, and their relationships, because it's more easily understood than several hundred lines of code. It fails to tell the whole story though, and thus only serves as a thousand foot view of what is going on.
Everything's solvable and everyone else is wrong, but he has none of his own work to show. Very funny post. Maybe he's just a student? These constant failures at trying to implement visual programming often seem to come from academia where the goal is to write papers rather than actually accomplish anything.
I have been thinking about this too recently and I'm thinking about writing a simple IDE to demostrate these ideas. If anyone would like to discuss this over mail (or here of course), let me know.
I doubt this is <i>THE</i> future, and I also hope it is not: still too limited. As far as I can predict, the future is a proper direct brain-machine interface. Controversial yes, avoidable: I seriously doubt it. (would I use it: maybe if it could be implemented using one way communication, ie similar to how it's done now by analyzing EEG). I guess it would also be by far the fastest way. At least I can think code (both concepts and actual implementation) way faster than I can output it in any way.
There are some general problems with the way people think about graphical programming. First, they should stop thinking about it as executable flowcharts and take a step back: There must be a better way than typing characters and pseudo-words to create programs. But that way isn't necessarily any of the graphical programming systems anyone has yet come up with.<p>This article is a good example of thinking that's not even near the walls of the box, much less outside. And what's that crazy digression about wysiwyg editors? And then the author drops this one: "Thus, this isn’t really about graphical programming." Derrrrrr.<p>We are barely at a point where we admit that evaluating a language syntax in a vacuum is silly, so people are still surprised that "verbose" Java is popular, despite the advantages static types and an intermediate language confer on the editor, compiler, static analyzer, debugger, etc. A less than holistic approach to graphical languages is probably doomed.