I've been used to working in C++ for some years now, and scriped in Ruby, Python and a little C#. Even as a programmer with some background, I prefer visual scripting where applicable every day. Its not just for non-programmers - the main points I like about Unreals blueprints that quickly come to mind are:
- Being able to select assets by drop down (with textual search so it is pretty much like having auto-completion for assets)
- Default-parameters for all command nodes (every attribute will have an initial value). This is a pretty huge point - in almost all textual programming languages if I have a function with 10 parameters, I have to fill out all of them with some value (unless there is like 20 overloads). In visual scripting, you create the node, and only need to alter those values you really make use of
- Better "autocompletion". Usually in C++ etc.. we have tools like intellisense which are helping us to figure out which functions/classe could make sense at the current point in code. With visual scripts, this is taken to another level, where I can drag a line from a boolean-return value and have it just show me possible functions that take a bool variable. Also its much easier to "search" for a function to call since when you are placing commands there is not 10000s global defines/enums/classes that you are being shown, but just the functions. When dealing with child types, it will show you a full dropdown list of all possible childs to select from, etc... this is all really awesome stuff that makes people like me who have a memory span of a worm and heavily rely on auto-completion happy.
Of course, there are downsides.
- Scripts can get very large and hard to view if you don't organize them properly (though this holds true to textual programming too).
- Everything math (especially vectors) gets complicated very quickly. Where you would normally write a "-" in front of variable, you now have to place a full-fledged node. This I belive is the main reason of people arguing about the complexity of visual scripts. I do think there are solutions - I'm currently in the planning process of developing a quick math expression language which would allow me to write complex mathematical expressions in text inside a special node. So yeah, this is a point where I currently don't see any solution in purely node-based systems, but we can always tie in text where necessary (like unreals material system also allowing you to write HLSL-code in a special type of node).
- You have to take care of positioning the nodes. Though you also have to format the text, I'd say that this is still a quite significant nuisance. I quess this could be solved by making the language order the nodes by themselves in a few years.
I think there is a lot of potential to be explored, after all visual programming in such a scale is not that new. For now, I'd say that visual scripting is really nothing for developing a full game/engine with, though I'd really prefer it over regular scripting languages every day. Who knows, with better tools and people getting used to them (even and especially programmers) one day they will be used for lower-level stuff.
On the flipside, the only way I can even view Blueprints (let alone edit them) is in the Unreal editor, which is a pretty heavy application. And if I wanted to write some quick tools or batch scripts to process some blueprints - how do I do that? I'm going to have to go figure out Unreal's format, parse it, make my changes, and then write it back. Not impossible, but I won't really have the libraries or tools without bringing in at least a subset of the Unreal engine into my codebase.
Thats more an issue of how Unreal handles its assets. It has binary format for everything including stuff like textures, etc... unlike Unity which I belive stores textures in a separate file (this makes working with unreal partially really annoying once you want to modify a texture in an external application). Visual scripting on the core is not very different than regular scripts. I have my own visual scripts represented as XML, other might do JSON, or you could even potentially have the script as just a plain-text script file, depending on how you load and compile your visual scripts. Only difference is that you have to store the position of the nodes (and possibly some side-attributes like count of output-nodes for a sequence-command), but other than that there is nothing that hinders you from storing a visual script in a text file and processing it with external tools (which also gives you merging abilities back).