Q:

How do I convince my students that visual programming is real programming?

I have been considering taking a visual programming language, such as Snap!, to my high school students as a way to make some of the concepts we delve into a little more fun.  The kids themselves already have a pretty substantial background in Java, Python, C and 6502 assembly, and many of them are also familiar with the JS/PHP/SQL stack for web dev.  
I have a very strong feeling that they won't consider a block-based language to be a real language, even though it contains typing, parameters, lambdas, etc. How do I get past the initial hump and persuade them that this is worth their time?

A:

Two thoughts:

I'd start with telling them why you think it's worth their time.  Whatever I or anyone else says on here, you're the one who thought it would be fun and worthwhile, and you must have reasons for that.  Your reasons are more authentic and probably more applicable to your students than our reasons will be. Just be straight with the kids about what they are.
You mentioned assembly, C, Java, and Python, which means that the kids not only have experience with "real" languages, but they have experiences with languages with a wide range of abstraction.  You can present DnD/block programming languages as yet another level of abstraction, in which common language structures (blocks and certain bits of syntax) are abstracted visually rather than textually.  This is not so radically different from what Python does when it visually presents code blocks as indented regions rather than as text sandwiched between curly brackets.  You can point out the similarities between the block interpreter and the Python interpreter. You can compare the power, efficiency, learning curve, and programmer time requirements for each language and maybe even make a nice chart on the board.  This will reinforce the idea that when comparing Snap! to Python to C, they really are comparing apples to apples.  

A:

Everyone uses high-level languages these days, and we let compilers do the grunt work.  Block-based programming is just a kind of IDE with a slightly different autocomplete mechanism.  Block-based code can be trivially transpiled to textual form.  After they complete an exercise, you can have them perform that conversion to textual code or pseudocode.
To debunk the "Real programmers don't use _____" fallacy, you could discuss what happens when you take that mentality to its logical extreme.

A:

Here's how I explained it to my students after teaching with App Inventor during a pre-college summer program:
With textual programming languages, your program won't work if you have a semicolon or even a space character (in Python) out of place. This can be frustrating, especially for beginners. They might conclude that programming is about punctuation, when it isn't; it's about logic, design, teamwork, and problem-solving.  The argument for starting with visual programming languages is to expose beginners to the essence of computer science, rather than the superficial issue of placement of curly braces, colons, etc. If they enjoy it, they can go on to learn those things.
To use an analogy, programming with blocks is like writing stories with word magnets. On the positive side, you don't need to worry about spelling or punctuation; on the negative side, your vocabulary is limited.
Programmers disagree about whether using languages like App Inventor (or Scratch or Alice) is really programming/coding. To me, it is, since the logic is there.  I don't see a fundamental difference between using a mouse and using a keyboard. That would be like saying that Jean-Dominique Bauby wasn't a real author because he used blinks instead of a keyboard or pen.  (See also these Dilbert and xkcd cartoons.) To be fair, not everyone agrees with me.
Nonetheless, I can understand the frustration of students who wanted to learn "real coding" and why visual programming languages tend to be used just by beginners. One of the most common questions about App Inventor is: Why can't I see and modify the Java code created by App Inventor? The answer is that App Inventor doesn't create Java code; it creates something called byte code that is not human readable. Learning textual programming languages is incredibly useful and fulfilling; it's like moving from Lite Brite to an unlimited set of paints and brushes. I hope that some of you go on to do so.
Disclaimer: I am one of the creators of App Inventor.

