Most of us learned programming using textual programming languages like Basic, C/C++, and Java. I believe it is more natural and efficient for humans to think visually. Visual programming allows developers to write programs by manipulating graphical elements. I guess using visual programming should improve the quality of code and reduce programming bugs. I'm aware of a few visual languages such as App Inventor, Scratch, and LabView. Why are there no mainstream, general-purpose visual languages for developers? What are the advantages and disadvantages of visual programming?
Visual Programming languages
programming languages
In general, there is a trade-off in programming language design between ease of use and expressiveness (power).  Writing a simple Hello, world program in a beginner language, such as Scratch or App Inventor, is generally easier than writing it in a general-purpose programming language such as Java or C++, where you might have a choice of several streams to output to, different character sets, the opportunity to change the syntax, dynamic types, etc.During the creation of App Inventor (which I was part of), our design philosophy was to make programming simple for the beginner.  A trivial example was basing our array indices at 1, rather than 0, even though that makes calculations likely to be performed by advanced programmers slightly more complex.The main way, however, that visual programming languages tend to be designed for beginners is by eliminating the possibility of syntax errors by making it impossible to create syntactically invalid programs.  For example, the block languages don't let you make an rvalue the destination of an assignment statement.  This philosophy tends to yield simpler grammars and languages.When users start building more complex programs in a blocks language, they find that dragging and dropping blocks is slower than typing would be.  Would you rather type a*x^2+b*x+c or create it with blocks?Justice can't be given to this topic (at least by me) in a few paragraphs, but some of the main reasons are:Block languages tend to be designed for beginners so are not as powerful by design.There is no nice visual way of expressing some complex concepts, such as type systems, that you find in general-purpose programming languages.Using blocks is unwieldy for complex programs.