Visual programming languages provide graphical representations of many common programming primitives. A user may manipulate and combine these primitives to form a great many useful programs.
I would like to know what the transferability of skills are from more visual programming languages to conventional text based languages. Ideally we want the novice programmer to develop a set of transferable skills. Does this happen with visual programming languages?
I teach visual programming using VB.Net. Looking at it from an industry perspective, students need to have visual programming skills required by industry. The conventional text based languages such as C and C++ are still vital to the development of programming skills and logic. Also these build the foundation in the understanding of data structures and algorithms. In my opinion, visual programming allows students to flex their creative muscles without worrying too much about the underlying technicalities. Once the students have learnt the basic of programming using languages like C and C++, visual programming should be the medium which they use to exhibit their understanding of the concepts in more creative and industry tailored ways.
Is VB.NET really a visual programming language? Visual Studio enables the student to build a UI using a visual editor but the logic is still very much text based or at least it was when I used to teach using Microsoft tools.
Although I agree this takes away a lot of frustrating mind numbing programming to build UIs, I discovered that the resulting code was not particularly efficient or in some cases practical. In fact, even with Java textbooks, I find the default teaching technique for UI development ignores the underlying design principles of the UI environment. The consequence is some fairly appalling UI code that lacks a clean and easily extendible structure but I think we digress from Visual Programming.
Visual programming is about being able to manipulate programming elements graphically such as can be done with Scratch. In the case of scratch, I see it like putting together a jigsaw puzzle. I am trying to select elements that work together to achieve an objective.
I would like to know what research exists that shows that this leads to a better understanding of programming concepts that are transferable to other programming languages. I can see the potential but I am wondering whether some of the issues are hidden by the visual context.
VB.Net is not 100% visual if you consider putting together a program only using visual components (i.e. like a jigsaw puzzle). However, it is much easier to design UIs in VB.Net than in Java. Also the UI code is automatically written by the IDE. So the programmer does minimum manipulation on that. Programming logic remains as a function of how good a programmer is. In my opinion a 100% visual programming language will limit the flexibility a programmer has. I use Arena simulation language to teach Discrete Event Simulation. This is more or less visual. However, there is still flexibility to manipulate the code.
I'm really not sure about the existing research on how visual programming skills are transferred on. However, if you are contemplating on finding out and if VB.Net can be used as a case study, I would be willing to experiment with my class in a collaborative project.
IF I was to conduct research, I would want to look at a hierarchy of languages from purely visual to text based. I see it as a longitudinal study as you want to see how the transfer occurs over time. I was hoping someone may have completed some work. I may need to investigate.
I would like to suggest the link https://www.researchgate.net/publication/4364755_Information_complexity_hypothesis_a_conceptual_framework_for_reasoning_on_pragmatics_issues?ev=prf_pub
The article is mostly on software psychology, but there is a couple of words about the visual vs textual programming languages problem (from psychology point of view: Miller's law, the long-term/short-terms memories, information complexity, metaphors and metaphoric artifacts, etc.).
With best regards, Vladimir
Conference Paper Information Complexity Hypothesis: a Conceptual Framework fo...
I think, the main idea behind visual languages in general is to tie together both textual and graphical components in a visual expression. This gives the flexibility in coding using such languages. this feature doesn't found in textual languages or object oriented languages. from this point of view VL considered to be logical in addition to simplifying designing interfaces.
Often the term "visual language" is now used for frameworks which help define UI using drag and drop, and does not qualify as "visual programming language". Not sure of my memory, but logo, scratchpad, etc are more in this line.
Visual can play different roles -- one the control abstractions (loops, conditionals, nesting, etc) can be captured in a visual way to make it easier to understand/express. Modules can be put together to "assemble" a program as in the case of making machines. There have also been some attempts in this regard -- cant remember the names now. These modules and connectors can be at different levels of abstraction. If properly defined, I think, skills learned here should be transferable to traditional languages.
Here is an excellent vision about how a programming environment should be both for beginners and advanced users and how visualization can help to achieve this vision. I completely agree with the points mentioned in this article.
Blocky looks a lot like Scratch. These languages are good at visualising the structure of procedural code but surely there are other visualisations that are more helpful (i.e. those in Learnable Programming).
We shouldn't rely on a single visualisation to show what is happening. I am thinking specifically of object-oriented programs where visualisations often try show output or flow of control in a procedural sense and maybe class diagrams. However, there are other things such as the current object model and the flow between objects that are also important.
In terms of learning, it is being able to use these in an appropriate sequence to bring the desired understanding.
See Meerbaum-Salant, O., Armoni, M., & Ben-Ari, M. (2011). Proceedings of the 16th annual joint conference on Innovation and technology in computer science education - ITiCSE '11 (p. 168). Presented at the the 16th annual joint conference, New York, New York, USA: ACM Press. doi:10.1145/1999747.1999796
Summary: the authors studied programming habits of students whose first (and only) language was Scratch. There were some encouraging signs and some discouraging signs. Among the latter, the students tended towards trial-and-error programming using exclusively low-level constructs, rather than consciously designing a program through levels of refinement and abstraction.
My comments: Scratch, Alice, and the like are highly discoverable -- you don't need a textbook or a manual, you can just try things from a finite list of available options. This is an advantage in that beginning students are less intimidated, have little or no syntax and vocabulary to memorize, and are more inclined to explore and "learn by doing". It's also a disadvantage if "just try things from a finite list of available options" becomes students' primary mode of operation. And the Scratch-based and Alice-based curricula I've seen seem to heavily emphasize exploratory programming, at the expense of actual conscious design.
At the other extreme, of course, are languages like Java and C++, in which there's so much syntax and vocabulary to memorize that it gets in the way of learning fundamental concepts. And it's so difficult to get something to pass the compiler that students' goal in programming becomes not "all tests passed" but "no syntax errors".
I favor something in between: a language in which you don't have a practically-finite menu of things to try ("thousands" is finite, but not practically finite for this purpose), you have some but not much syntax and vocabulary to learn, and you spend most of your class time discussing how to solve problems. (My textbook, http://picturingprograms.org, uses pedagogical subsets of Scheme, but there are of course other possibilities, of which the most popular at the moment is Python.)
The role of a visual programming language (such as Net Elements and Annotations) in teaching programming should be to teach students how to organize parts of a computer program in terms of the elements of the visual programming language so that the student can systematically implement the computer program based on the language’s elements.
The student should be able to use the visual programming language to organize a computer program from a high-level description to a detailed specification. The high-level description would give the student the ability to capture requirements at various levels of abstraction and the detailed specification would give the student the information for implementing the computer program.
Reference
Chionglo, J. F. (2016). A Reply to “Visual Programming Languages” at Computer Science Stack Exchange. Available at http://www.aespen.ca/AEnswers/1456138811.pdf.
To add to my previos comment Elm is a pure functional language which has very good support for web applications and graphics (i.e. games) since it relies on functional reactive paradigm. Here is a debugger for Elm which implements some of the Learnable Programming goals visually such as letting the user to see how a program's output changes over time (you can also go back, change history etc.):