<p>Just because you are using abstraction does not mean it is no longer programming.</p>

<p>Anything above actually flipping the bits by hand is us just being lazy.</p>

<p>My only objection to using an obscure language just for fun is. Why learn it if I would not use it in real life later?</p>

<p>Essentially I’d say. As long as the problem to be solved is fun. I.e. Not how to implement a solution using a recurs7function, I’d say you are grand. Especially if there is text or graphics output involved. </p>

<p>Blinkenlights are fun.</p>

CC BY-SA 3.0
2017-06-21T14:30:03.053Z
That's a fair point. Though we also teach 6502 assembly at my workplace, and I learned ML, BASIC, and Pascal - they all served a pedagogic purpose at the time.  If it helps to get at an important concept, then that can be reason enough.  (And keeping student engagement high enough to actually learn and explore is part of communicating the concept)
Ben I.
CC BY-SA 3.0
2017-06-21T14:15:41.110Z
2017-06-21T18:07:46.390Z
2017-06-21T18:07:46.390Z
DisplayName
<p>Here's how I explained it to my students after teaching with App Inventor during a pre-college summer program:</p>

<p>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, <a href="https://www.google.com/url?hl=en&amp;q=http://dilbert.com/strip/1994-06-08&amp;source=gmail&amp;ust=1498065010889000&amp;usg=AFQjCNExkzCVGvBc2cd4Wr435FJl6toMwA" rel="nofollow noreferrer">colons</a>, etc. If they enjoy it, they can go on to learn those things.</p>

<p>To use an analogy, programming with blocks is like writing stories with <a href="http://magneticpoetry.com/" rel="nofollow noreferrer">word magnets</a>. On the positive side, you don't need to worry about spelling or punctuation; on the negative side, your vocabulary is limited.</p>

<p>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 <a href="https://en.wikipedia.org/wiki/Jean-Dominique_Bauby" rel="nofollow noreferrer">Jean-Dominique Bauby</a> wasn't a real author because he used blinks instead of a keyboard or pen.  (See also these <a href="http://dilbert.com/strip/1992-09-08" rel="nofollow noreferrer">Dilbert</a> and <a href="http://www.explainxkcd.com/wiki/index.php/378:_Real_Programmers" rel="nofollow noreferrer">xkcd</a> cartoons.) To be fair, not everyone agrees with me.</p>

<p>Nonetheless, I can understand the frustration of students who wanted to learn "real coding" and <a href="https://cs.stackexchange.com/questions/539/visual-programming-languages/545#545">why visual programming languages tend to be used just by beginners</a>. 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 <a href="http://www.hasbro.com/litebrite/en_US/" rel="nofollow noreferrer">Lite Brite</a> to an unlimited set of paints and brushes. I hope that some of you go on to do so.</p>

<p>Disclaimer: I am one of the creators of App Inventor.</p>

CC BY-SA 3.0
2017-06-21T06:43:45.447Z
My personal definition (or test) of a "real" programming language is if you can use it to directly call the host system's platform API or not - so C and C++ are, as is C# and Java (through P/Invoke and JNI respectively) but not Flash ActionScript or LOGO. Would you agree with my definition?
Dai
CC BY-SA 3.0
2017-06-21T17:53:14.167Z
@Dai That should be a separate question, not a discussion within comments.
Ellen Spertus
CC BY-SA 3.0
2017-06-20T17:15:49.057Z
2018-02-04T17:04:46.563Z
2018-02-04T17:04:46.563Z
Ellen Spertus
<p>You could use some environment that lets you switch between blocks and text and work in both. That way, students can see firsthand that the code in the blocks converts to textual "real" code. This can help them understand the leap.</p>

<p>Here's one example of blocks switching with text on a Karel program on CodeHS (Note: I'm one of the founders of CodeHS)</p>

<p><a href="https://i.sstatic.net/Kgj2k.gif" rel="noreferrer"><img src="https://i.sstatic.net/Kgj2k.gif" alt="enter image description here"></a></p>

CC BY-SA 3.0
2017-06-20T17:33:55.560Z
2017-06-29T15:30:24.033Z
2017-06-29T15:30:24.033Z
Zach Galant
<p>I was at this camp one summer, and it was a programming camp for building models of different systems. I was super excited - I'd already been programming on Khan Academy and Codecademy. So I walk in, and they say that we'll be using this language called StarLogo Nova. We open our chromebooks, go to the site - and I begin questioning things, because I figure out pretty quickly that it's a drag and drop language.</p>

<p>I had (have?) a dislike for drag and drop languages - I had tried Scratch after doing what I considered "real" programming, and I didn't like it. However, that class changed my mind. We created a model of an epidemic, a model of an ecosystem - and I was hooked. I literally still occasionally take a look at those programs when I'm in the mood and add new features. </p>

<p>The about-face was because, I think, it felt useful. I felt more able to create something cool in StarLogo Nova than Scratch. So I guess, I'd say to first, pick a good, fun DnD language, and second, build something cool in it and show it to them. </p>

<p>You might also go into the idea of higher vs lower level programming languages, with DnD languages just another step higher than something like Python. Assembly is no more "real" a coding language than Python is. (If anything, it's the other way round =P)</p>

<p>All this being said, <a href="https://en.wikipedia.org/wiki/Wikipedia:Don%27t_stuff_beans_up_your_nose" rel="noreferrer">don't stuff beans up your nose</a> - your students may not even be thinking any less of DnD languages and may have quite a bit of fun without you saying anything at all.</p>

CC BY-SA 3.0
2017-06-20T23:43:20.497Z
I haven't used StarLogo Nova but have extensively used NetLogo (and years ago StarLogo).

The things you liked - were they because they were drag and drop or were they due to the modelling environment which NetLogo provides with a text based language.

Just curious.
Mike Zamansky
CC BY-SA 3.0
2017-06-20T23:47:26.470Z
@MikeZamansky StarLogo Nova does provide a nice modelling environment with a wide array of things you can do with it, which I enjoyed - I didn't like it for being drag and drop, I liked it for its usefulness. That it was drag and drop didn't seem like such a bad thing because of how much I liked everything else.
auden
CC BY-SA 3.0
2017-09-21T11:48:57.800Z
Yes, build something useful. Something fun if you can. That would probably work with Scratch as well.
Buffy
CC BY-SA 3.0
2017-06-20T23:37:10.293Z
2017-06-20T23:37:10.293Z
auden
<p>Two thoughts:</p>

<ol>
<li><p>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.</p></li>
<li><p>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.  </p></li>
</ol>

CC BY-SA 3.0
2017-06-21T05:06:41.467Z
so after comparison it turns out that visual blocks are worse in all aspects. then the students won't really understand why the teacher did bring it up at all.
Display Name
CC BY-SA 3.0
2017-06-21T05:26:53.863Z
"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." Actually, yes, it is quite different. Python is enforcing an arrangement of text; it isn't abandoning text. The rest of your answer might still fly.
jpmc26
CC BY-SA 3.0
2017-06-21T17:40:17.707Z
@jpmc26 Python is still text, but you don't get to pick the keyword you want to use, e.g., for a `while` loop. Snap! effectively just replaces the fixed scaffolding you would type with a graphical element. Python still gives you more flexibility in what you can do within the fixed elements, but the similarity is still there. (Full disclosure: I've only used Scratch, and that years ago, but Snap! looks fundamentally the same.)
chepner
CC BY-SA 3.0
2017-06-21T18:13:38.943Z
@chepner What I see as "radically" different is the departure from typing simple words using standard characters to using custom non-text, graphical/binary items that are more difficult manage because we don't have dedicated tooling for them (like keyboards and find/replace). I do understand that there might be similarities in terms of *structure*, especially after the text is parsed, but I see abandoning text as quite different. I understand that, in some ways, this analysis supports the rest of the answer.
jpmc26
CC BY-SA 3.0
2017-06-21T20:54:17.377Z
@jpmc26 considering that assembly is a "radical" departure from the underlying machine code ("you can read it now!"), and C is a "radical" departure from the ~1:1 of assembly to machine code, and Haskell is a "radical" departure... etc. I would say this supports Neal's arguments *more* not less. "...are more difficult to manage because we don't have dedicated tooling for them..." is generally what managers say to resist switching to new paradigms. The real question to potentially bring up is "Is this abstraction of programming particularly useful? If so, for what classes of tasks?"
Blackhawk
CC BY-SA 3.0
2017-06-21T21:22:53.417Z
@Blackhawk I hope it is clear that I am not objecting to the answer as a whole, merely to the notion that controlling indentation is not merely a small step away from what block programming languages do.
jpmc26
CC BY-SA 3.0
2017-06-20T12:01:57.867Z
2017-06-20T12:06:19.487Z
2017-06-20T12:06:19.487Z
Neal Zupancic
<p>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.</p>

<p>To debunk the "Real programmers don't use _____" fallacy, you could discuss what happens when you take that mentality to its logical extreme.</p>

<p><a href="https://xkcd.com/378/" rel="noreferrer"><img src="https://imgs.xkcd.com/comics/real_programmers.png" alt="XKCD 378: Real Programmers"></a></p>

CC BY-SA 3.0
2017-06-21T17:44:07.340Z
Some of the commenters at the top should make note of this answer.
Ben I.
CC BY-SA 3.0
2017-07-10T17:41:58.633Z
Don't believe it, it is not true. We use `sed`.
ctrl-alt-delor
CC BY-SA 3.0
2017-07-10T17:43:08.120Z
Snap has a facility to allow you to write a translator, to convert snap code to any other language. And another to make snap look like another language.
ctrl-alt-delor
CC BY-SA 3.0
2017-06-21T17:39:03.057Z
2017-06-21T17:39:03.057Z
200_success
<p>Here I would go to Microsoft's <a href="https://en.wikipedia.org/wiki/Project_Spark" rel="nofollow noreferrer">Project Spark</a> (even though it is discontinued, I think it is still downloadable. I have a local copy, so I'm not sure. But it's worth a shot)</p>

<p>Project spark is Microsoft's "experiment" as a game for making games. It is visual. And you can say block based. It's not like Scratch or Snap!, but it is visual. </p>

<p>It makes game creation quite easy, (there are limitations on the game models that can be used and other stuff, but that's not too relevant for this answer) and is very good to teach programming. Types, Objects, Methods and many other things can be taught with it. </p>

<p>I have used it for a while, and it is a <em>real language</em>. I suggest you try it, and maybe search videos in youtube that show aspects of Project Spark. </p>

<p>A sneak peak to the block programming (or "<em>Kode</em>") of Project spark:</p>

<p><a href="https://i.sstatic.net/tOnlX.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/tOnlX.png" alt="Kode"></a></p>

<p>The kode (not a typo) is fairly straight forward and self-explanatory.</p>

<p>EDIT: It is discontinued, but can still be used. It is free, and a very good way to learn programming concepts (as well as a good way to have fun)</p>

CC BY-SA 3.0
2017-06-20T10:38:11.507Z
2017-06-21T09:56:55.990Z
2017-06-21T09:56:55.990Z
ItamarG3
<p>It isn't very "fun", but there are visual languages widely used in the industry. For example the <a href="https://en.wikipedia.org/wiki/Function_block_diagram" rel="nofollow noreferrer">FBD</a> language.</p>

<p>From Wikipedia:</p>

<blockquote>
  <p>The Function Block Diagram (FBD) is a graphical language for programmable logic controller design, that can describe the function between input variables and output variables. A function is described as a set of elementary blocks. Input and output variables are connected to blocks by connection lines.</p>
</blockquote>

<p>EDIT: here my try at a real example:</p>

<p>Here in Germany Siemens-hardware and -software is widely used in a wide variety of factories, power plants and most other aspects of automation. The programming languages the PLCs of Siemens are programmed with are based on the <a href="https://en.wikipedia.org/wiki/IEC_61131" rel="nofollow noreferrer">IEC 61131</a> and the <a href="https://de.wikipedia.org/wiki/EN_61131#Teil_3:_Programmiersprachen_.28EN_61131-3:2014-06.29" rel="nofollow noreferrer">EN 61131</a> (German). They are called <strong>FUP</strong> (function plan, looks like Flipflops, I had those in my electrical engineering studies), <strong>KOP</strong> (contact-plan, looks like a circuit diagram), <strong>GRAPH</strong> (flowchart-style), AWL (really basic Statements) and SCL (a high language based on another language... i think pascal).</p>

<p>The first three of those are all graphical and most people simply use whatever fits them the most. You can translate those languages into each other with a simple click, within some borders.</p>

<p>There are several IDEs used, but the most common is TIA-Portal (that's kinda new for newer PLCs of the S7-series), Simatic Manager (older S7-series) and an even older one I don't know the exact Name of for the S5-series. The naming process of Siemens is extremely weird and a world of itself.</p>

<p>Siemens is used in other countries too, but of course I don't exactly know how much in detail.</p>

CC BY-SA 3.0
2017-06-20T13:52:09.090Z
Welcome! Could you please add details on why FBD would be a good idea?
ItamarG3
CC BY-SA 3.0
2017-06-20T14:26:15.053Z
That's a good example - I'm also entirely unfamiliar with FBD. Can you flesh this answer out a little bit (so that I can use your answer better in the classroom)?
Ben I.
CC BY-SA 3.0
2017-06-20T19:11:04.690Z
@BenI. he's not saying to consider it for use in the classroom, but rather consider it as an example of real world usage of a visual programming language. That is, visual programming need not be necessarily "for kids".
David Liu
CC BY-SA 3.0
2017-06-20T19:20:15.380Z
@DavidLiu I understood that. But if I will even use it as a passing example in class, I would need to give at least *some* more detail about the language, which could totally fit into the answer here to make it more useful.
Ben I.
CC BY-SA 3.0
2017-06-20T20:08:34.907Z
In real industry, there's a reality that not everyone who uses our software can be versed in C++ and have 4 years of practice with the software.  They need a powerful language to interact with our software which doesn't pack such a training price tag.  FBDs are really popular for solving that problem.  They show that there are many levels with which one can interact with a piece of software.  The C++/Java code at the bottom is only one of those ways.
Cort Ammon
CC BY-SA 3.0
2017-06-21T09:01:18.797Z
There's also Labview used for lab instrument automation, but licences are expensive and the learnign curve is surprisingly steep.
Chris H
CC BY-SA 3.0
2017-06-22T08:46:53.703Z
@BenI. i tried to flesh it out some more
KWGB
CC BY-SA 3.0
2017-06-20T13:46:03.200Z
2017-11-29T18:07:01.887Z
2017-11-29T18:07:01.887Z
KWGB
<p>Full disclosure: I'm generally not a fan of DnD programming languages in high school (maybe even late middle school) and I think DnD languages are frequently used by stem oil salesmen and used incorrectly so I'm frequently down on them.</p>

<p>More disclosure: DnD languages can be real languages and can be properly and soundly used in educational settings.</p>

<p>Ok, now to answer the question.</p>

<p>I think the easiest way is to head over to code.org and show them their DnD language which has a convenient "show code" button which will show the Javascript (a real language!!! <code>:-)</code>) equivalent to the blocks. You now have a platform to talk about how the block based language visually described the same code but visually (as opposed to textually with indentation).</p>

<p><a href="https://www.codesters.com/coding-platform/" rel="nofollow noreferrer">codesters.com</a> also has a pseudo DnD environment and while I like codesters very much, their DnD doesn't really feel like block based programming since it's really text chunk based - I'm a fan but I don't know if it would help in your situation.</p>

CC BY-SA 3.0
2017-06-20T11:40:46.750Z
2017-06-21T01:43:58.687Z
2017-06-21T01:43:58.687Z
Mike Zamansky
<p>You used two key words here: "persuade" and "convince." Let's approach this issue from the perspective of the three Aristotelian rhetorical appeals: logos, ethos, and pathos.</p>

<ul>
<li><p><strong>Logos</strong>: Appeal to their reason as programmers. Have them create a program in Scratch or Snap!, and as they add each block, have them write the corresponding line(s) of code in a language of their choice. DnD is merely an interface for "real code" that is in fact being executed underneath the hood. Have them use their proficiency to attempt to reconstruct what might actually be happening. For example, how does one of these programs handle event-listening? How can something that looks so simple on the surface actually be running a number of more complex processes that are abstracted away? You could even start by having them focus on just the logic of their program without the implementation of the graphical implementation of the language (i.e. treating a graphic as part of a pre-constructed whose logic they don't need to worry about). Then, have them consider the sprites themselves. If they're still not convinced, give them the assignment of designing their own DnD language/interface/block and color system based on Java, Python, or C (or even assembly (!)).</p></li>
<li><p><strong>Ethos</strong>: Appeal to two big names in computer science: Harvard and UC Berkeley. Harvard begins their famed and incredibly well-designed <a href="https://cs50.harvard.edu" rel="nofollow noreferrer">CS50</a> course with Scratch. They introduce computer science at the university (viz. Ivy League) level with a couple weeks of DnD programming. It clearly plays an important pedagogical role in the course. Similarly, Berkeley's <a href="http://cs10.org/su17/" rel="nofollow noreferrer">CS10</a> utilizes Snap!. They build almost an entire course around this environment because it is important to emphasize the thinking behind and the logic of programming languages, not the interface or the syntax. (This is a nice time to remind students that "computer science != coding".)</p></li>
<li><p><strong>Pathos</strong>: Appeal to the incredible complexity of some DnD programs, and let them simply feel amazed. Here is one program I just found called <a href="https://scratch.mit.edu/projects/164324717/#editor" rel="nofollow noreferrer">"Landscape Generation"</a> in Scratch. Here's quite a bit going on here that is far beyond dragging some simple blocks around. If something like that doesn't impress them, send them to the <a href="https://scratch.mit.edu/explore/projects/games/" rel="nofollow noreferrer">Games</a> tab and have them explore those and encourage them to "See inside" to examine what went into designing the game. Snap! doesn't have as easy a database of sample programs to explore (at least none that I can find). However, the same logic should apply to Scratch and Snap!. There is incredibly impressive work being done in both environments, work that clearly demands a level of skill that goes far beyond what beginners are capable of. If you really want to blow the away, show them <a href="https://scratch.mit.edu/projects/116739847/" rel="nofollow noreferrer">Pokemon Go</a> in Scratch (Harvard used this in Week 0 last fall).</p></li>
</ul>

CC BY-SA 3.0
2017-07-26T18:02:33.143Z
Landscape Generation => `define (Create Perspective Hack)` Yep, it's real programming when it's all built on a hack :P
CAD97
CC BY-SA 3.0
2017-06-20T15:20:52.000Z
2017-06-20T15:58:55.843Z
2017-06-20T15:58:55.843Z
Peter
<p>A lot of people are talking about how visual scripting is a higher abstraction, and that's all the difference, and the debate has moved more to a question of "is visual scripting 'real' programming?" The general consensus appears to be that yes, DnD languages are still real languages, and sure, it's a higher abstraction, but what does that mean?</p>

<p>There's a value to higher abstraction that no one seems to be mentioning, and that's the speed of it. When you remove details, you can write more, in the same amount of time. It's why we compare Python to C as 1 line for every 6. The value of visual scripting for people who are experienced programmers is the speed at which you can develop. This is an incredibly important factor in development, especially when smaller teams try to produce large, complex software.</p>

<p>A good example of a visual scripting system is the Playmaker extension for the Unity game engine. Every Unity developer and their grandmother uses it, and for good reason. It allows them to rapidly prototype ideas and build complex systems in hours instead of weeks. And once the prototyping phase is done? The system they built is production-ready in most cases. Time is a very expensive resource in the software industry. If the cost of time needed to perfectly optimize your game in C is more expensive than the slight loss in efficiency you'll have for a fraction of the development time, it's a foolish business decision to ignore the option which enables you to make more money.</p>

CC BY-SA 3.0
2017-06-21T22:43:48.273Z
Welcome to CSE? This is an excellent answer, and I hope we hear more from you in the future.
Ben I.
CC BY-SA 3.0
2017-06-21T22:28:04.260Z
2017-06-21T22:28:04.260Z
Jake Uskoski
<p>First and foremost, don't let <em>your feeling</em> about <em>their feelings</em> affect your judgement.  It seems to me that most kids want to learn new things, they want to be 'beta testers' and on the cutting edge.  Visual programming is something relatively new, let them be an early adopter as this new form of programming matures.</p>

<p>More importantly though, programming isn't about the <em>process</em> of programming.  Programming is about <strong>accomplishing a goal</strong>. We can use different programming 'tools' to accomplish our goals.</p>

<p>Different languages make the process easier just like having a screw driver gets a screw in the wood easier than using an awl. And planing is easier with a planer than with a claw hammer.</p>

<p>Perhaps instead of convincing them what is better, have them do various exercises and let them choose their own tool set.  Of course the exercises should do something interesting and in some or most cases allow the visual tool to save time. The grade should be given on the finished product - not which tool was used to accomplish the goal.  If you have short exercises, have them do them in class and when the visual tool is faster, those students will be done sooner. Let them decide how they want to spend their time.</p>

<p>Remember the goal - it isn't just to learn a language, it is to teach students how to make good decisions and (hopefully) those lessons carry over into everyday life.</p>

CC BY-SA 3.0
2017-06-22T20:31:52.097Z
Very nice answer. Welcome to CSE!
Ben I.
CC BY-SA 3.0
2017-06-22T19:33:30.740Z
2017-06-22T19:33:30.740Z
CramerTV
<h1>Have your students write a visual programming editor.</h1>
<p>It sounds like your students are pretty savvy, so what better way to show them how awesome a visual editor can be than to have them build their own!  There are many benefits to this approach.</p>
<h2>Relevancy</h2>
<p>They're creating software to make them more efficient at what they already do and love.</p>
<h2>Flexibility</h2>
<p>The students can choose their preferred language.<br />
This could also be a solo or a group project.</p>
<h2>Pay-Off</h2>
<p>This is an assignment with some legs.  It's not something that will go into a folder and be forgotten.  They can use it on their next assignment or in their own personal projects!</p>

CC BY-SA 3.0
2017-06-20T21:16:35.720Z
2017-06-20T21:16:35.720Z
2020-06-18T08:36:57.023Z
Eric
<h1>Real-world motivation</h1>

<p>I have a neutral opinion on visual programming. I have dabbled in it and decided that I am not interested. <em>But</em>. It is simply a tool. </p>

<p>Tools are complicated to motivate. Just enter any room of programmers and give them the exercise to, once and for all, decide on whether vi or Emacs is better. You might as well ask them to choose the new Pope...</p>

<p>On the other hand, in my opinion, an intelligent person (which your pupils certainly are!) does not need to actually be fond of or deeply knowledgeable of a tool to appreciate its merits. In the same vein as being able to learn about war and famine (which are decidedly not fun), they should be able to learn about Visual Programming even if you do not find a "fun" exercise for it.</p>

<p>So, you can easily teach them that there is a place for almost every tool. Visual Programming has its place in certain niches (depending on viewpoint, obviously) where you just do not need the expressive power of a general programming language. For example, if you are into Business Process Management, you can achieve a <em>lot</em> with visual programming. If you are using one of the game engines which focus on higher level creation, the same is true. A program like Blender can go far with a very domain-specific visual "programming" for what it does (physics simulation and so on). CAD/CAM systems are largely "programmed" with very, very domain specific visual tools. </p>

<p>Pick a few nice examples, and maybe you find some open source / free visual programming environments where they just play around, as a bonus. Even if they never touch them again, they will at least know that such things exist, and they may appreciate that <em>somebody</em> out there (who, likely, would never "program" anything at all, if they couldn't do it visually) puts them to good use.</p>

<h1>"Convince"?</h1>

<p>Try not to convince them. Show them what is <em>real</em>, what <em>exists</em>, and that in itself should be convincing enough.</p>

<p>This might sound like nitpicking, but in the business world, if people start to try to "convince" someone of something, then it's usually a red flag. I prefer if they show me that something so I can understand and appreciate (or deny) it myself.</p>

CC BY-SA 3.0
2017-06-21T20:44:20.263Z
2017-06-22T05:40:42.983Z
2017-06-22T05:40:42.983Z
AnoE
<p>I have been considering taking a visual programming language, such as <strong>Snap!</strong>, to my high school students as a way to make some of the concepts we delve into a little more <em>fun</em>.  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.  </p>

<p>I have a very strong feeling that they won't consider a block-based language to be a <em>real language</em>, 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?</p>

CC BY-SA 3.0
2018-01-30T18:15:23.913Z
What HighSchool is this? Robot academy on Mars?
Gorchestopher H
CC BY-SA 3.0
2018-01-30T19:02:39.893Z
@GorchestopherH LOL, essentially. :) My students take part in a pretty unique program.
Ben I.
CC BY-SA 3.0
2018-01-30T20:13:07.363Z
@BenI. Can you possibly edit/expand your question a little bit to give some more information? For example: What are the other requirements of the course (curriculum)? Is this a course at all in fundamentals? What concepts are you trying to illustrate? Snap! is a very good syntax enforcer, but it seems that your students are likely very familiar with adhering to syntax.
Gorchestopher H
CC BY-SA 3.0
2018-01-30T20:47:21.640Z
@GorchestopherH I didn't ultimately take this path, though I am more convinced than ever that visual programming is real, and is only going to become more prominent for the foreseeable future.  There may come a day that I revisit this idea, but for now, any new answers should probably be more about general applicability than about my specific circumstances.
Ben I.
CC BY-SA 3.0
2018-01-30T21:30:19.643Z
This should be an edit or a new question.
Gorchestopher H
CC BY-SA 3.0
2018-01-30T23:16:48.703Z
@GorchestopherH ... a new question?
Ben I.
CC BY-SA 3.0
2017-06-20T12:12:58.863Z
I'm curious why you think it'll make things more fun or what you plan to do to make things more fun. One of the downsides of DnD languages is that to do something substantial you need some serious screen real estate and in my experience, experienced students have found repeated dragging and dropping tedious over using text editor functionality.

This is not to say that DnD won't be great in your case but I'm looking for more info on how you want to use them
Mike Zamansky
CC BY-SA 3.0
2017-06-20T12:42:03.403Z
Well, to make clear: I have not done any of this, so your experience is very relevant information. This is all still very preliminary exploration. My thought is that, for some of my lower students, the graphical environment will make the concepts seem more immediately concrete. And, as goofy as the pre-fabbed graphics are, they are also fun.
Ben I.
CC BY-SA 3.0
2017-06-20T17:17:46.950Z
If these kids already have that extensive a programming background, what you're proposing isn't likely to be fun.
user2357112
CC BY-SA 3.0
2017-06-20T18:27:09.893Z
Put your money where your mouth is. Build something useful/cool in the language and demo it for them while introducing it.
Jeutnarg
CC BY-SA 3.0
2017-06-20T19:43:39.817Z
I've worked professionally with a heavy point & click programming tool and many younger coworkers complained "this isn't programming."  My explanation was that programming was just about giving the computer instructions for what to do "later".  And that tool was one way of instructing the computer.
Kevin Rubin
CC BY-SA 3.0
2017-06-20T20:06:38.103Z
From the sound of it, your students use programming languages to **do** things.  Snap! is going to have to earn its keep in the minds of students like that.  I'm a developer, not a teacher, but my first thought when I looked at the examples on the Snap! page was "this is actually just a text based programming language given goofy colors."  Contrast that with something like LabView which is a serious language used in serious contexts (and with a serious price tag, of course).  You're going to have to convince them that it's not different for the sake of being different.
Cort Ammon
CC BY-SA 3.0
2017-06-20T23:25:43.240Z
What kind of high school students are you lucky enough to work with?! I don't know many high school students with that substantial a background in programming.
Sam Weaver
CC BY-SA 3.0
2017-06-20T23:33:55.733Z
I am, indeed, lucky! There is a 4-year CS major at this highly selective HS in northern NJ. (Nothing official, but there are rumors that there may be a (3rd!) new CS opening at said school in a few weeks, too!)
Ben I.
CC BY-SA 3.0
2017-06-21T01:37:53.600Z
Aren't flow charts "visual programming"? If you use flow charting as a tool, it shouldn't be too hard to segue into another visual paradigm of your choice.
Gypsy Spellweaver
CC BY-SA 3.0
2017-06-21T09:08:12.920Z
@CortAmmon I was sure someone would mention LabView.  That's worth taking seriously in the right context. But unless the students go on to study physics/engineering/chemistry at uni (and not every course by a long shot) they're not likely to come across it.  Even educational licenses are expensive. The graphical approach is highly polarising and doesn't lend itself to printable documented code -- we're moving more and more towards PyVisa to access an overlapping set of drivers.
Chris H
CC BY-SA 3.0
2017-06-21T10:24:15.567Z
It might be easy, but methods might need to be different under various circumstances. So... How many students are involved? And how much student-class time can you invest in this?
user2338816
CC BY-SA 3.0
2017-06-21T13:26:01.653Z
Are you sure that you *are* correct here? Are you sure such learning tools are appropriate for high school kids with substantial programming knowledge? At that age, I know that I would have considered it demeaning and patronising, basically telling me I'm too stupid to use "real" languages, so I should play with blocks.
Davor
CC BY-SA 3.0
2017-06-21T13:29:37.743Z
@Davor considering the number of comments and answers here that point to visual languages used in specialized professional areas, I'm pretty sure, yeah :) I'm not convinced that I'm going to make this move, however. If I did, I would enjoy some initial benefit of the doubt from my students, since I taught them many of those languages that they know :)
Ben I.
CC BY-SA 3.0
2017-06-21T13:31:40.123Z
@BenI. - I fail to see how such languages being used professionally in extreme niches makes them suitable teaching tool at that age. I fail to see ANY relation between those two statements, to be honest.
Davor
CC BY-SA 3.0
2017-06-21T16:17:27.270Z
Wanna make programming more Fun™? [Here are the programming games you never asked for!](https://blog.codinghorror.com/heres-the-programming-game-you-never-asked-for/) _(Your definition of fun may vary. I am not liable for any damage to the concepts of "fun" or "game" you may suffer due the content of this article. I just think [some of these](http://tomorrowcorporation.com/humanresourcemachine) are pretty fun and accessible)_
xDaizu
CC BY-SA 3.0
2017-06-21T17:24:29.697Z
For a practical, real-world example of visual programming, have a look at the [Unreal Game Engine's Blueprint Designer.](https://docs.unrealengine.com/latest/INT/Engine/Blueprints/)
Robert Harvey
CC BY-SA 3.0
2017-06-21T18:03:20.950Z
Since the students already have a programming language, I don't really see the point of using visual languages to excite them about programming. If you want them to have fun programming, why not do a short lesson on esoteric languages? This one is based on Arnold Schwarzenegger's one liners, for instance: https://github.com/lhartikk/ArnoldC
alexgbelov
CC BY-SA 3.0
2017-06-21T23:48:03.093Z
*Why* do you want to teach it?  If we knew, we could help you explain that to the kids.  But it seems like you’re looking for justification yourself.  After taking a quick look, my quextion is, “why can't I just type that?”  you need a good answer as that’s what the kids will wonder too.
JDługosz
CC BY-SA 3.0
2017-06-22T00:36:13.540Z
Why even argue the point? Call your exercises 'puzzles' or 'logic puzzles'. Allow your students to go off-script and use that tool to do things that you didn't ask them to (or that they didn't imagine they could even do themselves with it). If by the end of the course, your students tell you that Snap is not a puzzle-building environment as much as it is a programming language you can actually build stuff with, then I suppose you will have completed at least one of your teaching objectives.
Stephan Branczyk
CC BY-SA 3.0
2017-06-23T05:09:21.473Z
Other real world examples of DnD are SQL Server Integration Services (SISS) and BizTalk. MS Visual Studio includes DnD to create the user interface.
Dave Russell
CC BY-SA 3.0
2017-06-24T16:39:53.553Z
_Since the students already have a programming language, I don't really see the point of using visual languages to excite them about programming_

Agree with this, I think I'd have found it a bit patronising if these sorts of languages were used for anything other than an introductory course.
Adam Williams
CC BY-SA 3.0
2017-09-08T16:46:43.957Z
IMHO the main advantage of visual languages is that beginners fear they have to remember the syntax of soooo maaany constructs and basic actions : they choose among the things they see. Convenient at first sight, a waste of time later as they know the syntax.  The idea falls flat if they already wrote programs, and anyway programming with blocks is not identified, in the popular culture, to "serious programming" (like web development, doh).
Michel Billaud
<block-based-programming>
How do I convince my students that visual programming is real programming?
# How do I convince my students that visual programming is real programming?

(Asked by: username_0 on 2017-06-20)

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?

**Tags:** block-based-programming

> **Comments:**
> **username_2**: I'm curious why you think it'll make things more fun or what you plan to do to make things more fun. One of the downsides of DnD languages is that to do something substantial you need some serious screen real estate and in my experience, experienced students have found repeated dragging and dropping tedious over using text editor functionality.  This is not to say that DnD won't be great in your case but I'm looking for more info on how you want to use them  
> **username_0**: Well, to make clear: I have not done any of this, so your experience is very relevant information. This is all still very preliminary exploration. My thought is that, for some of my lower students, the graphical environment will make the concepts seem more immediately concrete. And, as goofy as the pre-fabbed graphics are, they are also fun.  
> **username_3**: If these kids already have that extensive a programming background, what you're proposing isn't likely to be fun.  
> **username_4**: Put your money where your mouth is. Build something useful/cool in the language and demo it for them while introducing it.  
> **username_5**: I've worked professionally with a heavy point & click programming tool and many younger coworkers complained "this isn't programming."  My explanation was that programming was just about giving the computer instructions for what to do "later".  And that tool was one way of instructing the computer.  
> **username_6**: From the sound of it, your students use programming languages to **do** things.  Snap! is going to have to earn its keep in the minds of students like that.  I'm a developer, not a teacher, but my first thought when I looked at the examples on the Snap! page was "this is actually just a text based programming language given goofy colors."  Contrast that with something like LabView which is a serious language used in serious contexts (and with a serious price tag, of course).  You're going to have to convince them that it's not different for the sake of being different.  
> **username_7**: What kind of high school students are you lucky enough to work with?! I don't know many high school students with that substantial a background in programming.  
> **username_0**: I am, indeed, lucky! There is a 4-year CS major at this highly selective HS in northern NJ. (Nothing official, but there are rumors that there may be a (3rd!) new CS opening at said school in a few weeks, too!)  
> **username_8**: Aren't flow charts "visual programming"? If you use flow charting as a tool, it shouldn't be too hard to segue into another visual paradigm of your choice.  
> **username_9**: @CortAmmon I was sure someone would mention LabView.  That's worth taking seriously in the right context. But unless the students go on to study physics/engineering/chemistry at uni (and not every course by a long shot) they're not likely to come across it.  Even educational licenses are expensive. The graphical approach is highly polarising and doesn't lend itself to printable documented code -- we're moving more and more towards PyVisa to access an overlapping set of drivers.  
> **username_10**: It might be easy, but methods might need to be different under various circumstances. So... How many students are involved? And how much student-class time can you invest in this?  
> **username_11**: Are you sure that you *are* correct here? Are you sure such learning tools are appropriate for high school kids with substantial programming knowledge? At that age, I know that I would have considered it demeaning and patronising, basically telling me I'm too stupid to use "real" languages, so I should play with blocks.  
> **username_0**: @username_11 considering the number of comments and answers here that point to visual languages used in specialized professional areas, I'm pretty sure, yeah :) I'm not convinced that I'm going to make this move, however. If I did, I would enjoy some initial benefit of the doubt from my students, since I taught them many of those languages that they know :)  
> **username_11**: @BenI. - I fail to see how such languages being used professionally in extreme niches makes them suitable teaching tool at that age. I fail to see ANY relation between those two statements, to be honest.  
> **username_12**: Wanna make programming more Fun™? [Here are the programming games you never asked for!](https://blog.codinghorror.com/heres-the-programming-game-you-never-asked-for/) _(Your definition of fun may vary. I am not liable for any damage to the concepts of "fun" or "game" you may suffer due the content of this article. I just think [some of these](http://tomorrowcorporation.com/humanresourcemachine) are pretty fun and accessible)_  
> **username_13**: For a practical, real-world example of visual programming, have a look at the [Unreal Game Engine's Blueprint Designer.](https://docs.unrealengine.com/latest/INT/Engine/Blueprints/)  
> **username_14**: Since the students already have a programming language, I don't really see the point of using visual languages to excite them about programming. If you want them to have fun programming, why not do a short lesson on esoteric languages? This one is based on Arnold Schwarzenegger's one liners, for instance: https://github.com/lhartikk/ArnoldC  
> **username_15**: *Why* do you want to teach it?  If we knew, we could help you explain that to the kids.  But it seems like you’re looking for justification yourself.  After taking a quick look, my quextion is, “why can't I just type that?”  you need a good answer as that’s what the kids will wonder too.  
> **username_16**: Why even argue the point? Call your exercises 'puzzles' or 'logic puzzles'. Allow your students to go off-script and use that tool to do things that you didn't ask them to (or that they didn't imagine they could even do themselves with it). If by the end of the course, your students tell you that Snap is not a puzzle-building environment as much as it is a programming language you can actually build stuff with, then I suppose you will have completed at least one of your teaching objectives.  
> **username_17**: Other real world examples of DnD are SQL Server Integration Services (SISS) and BizTalk. MS Visual Studio includes DnD to create the user interface.  
> **username_18**: _Since the students already have a programming language, I don't really see the point of using visual languages to excite them about programming_  Agree with this, I think I'd have found it a bit patronising if these sorts of languages were used for anything other than an introductory course.  
> **username_19**: IMHO the main advantage of visual languages is that beginners fear they have to remember the syntax of soooo maaany constructs and basic actions : they choose among the things they see. Convenient at first sight, a waste of time later as they know the syntax.  The idea falls flat if they already wrote programs, and anyway programming with blocks is not identified, in the popular culture, to "serious programming" (like web development, doh).  
> **username_1**: What HighSchool is this? Robot academy on Mars?  
> **username_0**: @GorchestopherH LOL, essentially. :) My students take part in a pretty unique program.  
> **username_1**: @BenI. Can you possibly edit/expand your question a little bit to give some more information? For example: What are the other requirements of the course (curriculum)? Is this a course at all in fundamentals? What concepts are you trying to illustrate? Snap! is a very good syntax enforcer, but it seems that your students are likely very familiar with adhering to syntax.  
> **username_0**: @GorchestopherH I didn't ultimately take this path, though I am more convinced than ever that visual programming is real, and is only going to become more prominent for the foreseeable future.  There may come a day that I revisit this idea, but for now, any new answers should probably be more about general applicability than about my specific circumstances.  
> **username_1**: This should be an edit or a new question.  
> **username_0**: @GorchestopherH ... a new question?  

---

## 14 answers

### Answer by username_26 on 2017-06-20. Score: 24

Two thoughts:

1. 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.
2. 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.

> **Comments:**
> **username_27**: so after comparison it turns out that visual blocks are worse in all aspects. then the students won't really understand why the teacher did bring it up at all.  
> **username_28**: "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." Actually, yes, it is quite different. Python is enforcing an arrangement of text; it isn't abandoning text. The rest of your answer might still fly.  
> **username_29**: @username_28 Python is still text, but you don't get to pick the keyword you want to use, e.g., for a `while` loop. Snap! effectively just replaces the fixed scaffolding you would type with a graphical element. Python still gives you more flexibility in what you can do within the fixed elements, but the similarity is still there. (Full disclosure: I've only used Scratch, and that years ago, but Snap! looks fundamentally the same.)  
> **username_28**: @username_29 What I see as "radically" different is the departure from typing simple words using standard characters to using custom non-text, graphical/binary items that are more difficult manage because we don't have dedicated tooling for them (like keyboards and find/replace). I do understand that there might be similarities in terms of *structure*, especially after the text is parsed, but I see abandoning text as quite different. I understand that, in some ways, this analysis supports the rest of the answer.  
> **username_30**: @username_28 considering that assembly is a "radical" departure from the underlying machine code ("you can read it now!"), and C is a "radical" departure from the ~1:1 of assembly to machine code, and Haskell is a "radical" departure... etc. I would say this supports Neal's arguments *more* not less. "...are more difficult to manage because we don't have dedicated tooling for them..." is generally what managers say to resist switching to new paradigms. The real question to potentially bring up is "Is this abstraction of programming particularly useful? If so, for what classes of tasks?"  
> **username_28**: @username_30 I hope it is clear that I am not objecting to the answer as a whole, merely to the notion that controlling indentation is not merely a small step away from what block programming languages do.  

---

### Answer by username_31 on 2017-06-21. Score: 13

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.

[![XKCD 378: Real Programmers](https://imgs.xkcd.com/comics/real_programmers.png)](https://xkcd.com/378/)

> **Comments:**
> **username_0**: Some of the commenters at the top should make note of this answer.  
> **username_32**: Don't believe it, it is not true. We use `sed`.  
> **username_32**: Snap has a facility to allow you to write a translator, to convert snap code to any other language. And another to make snap look like another language.  

---

### Answer by username_21 on 2017-06-20. Score: 11

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](https://www.google.com/url?hl=en&q=http://dilbert.com/strip/1994-06-08&source=gmail&ust=1498065010889000&usg=AFQjCNExkzCVGvBc2cd4Wr435FJl6toMwA), 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](http://magneticpoetry.com/). 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](https://en.wikipedia.org/wiki/Jean-Dominique_Bauby) wasn't a real author because he used blinks instead of a keyboard or pen. (See also these [Dilbert](http://dilbert.com/strip/1992-09-08) and [xkcd](http://www.explainxkcd.com/wiki/index.php/378:_Real_Programmers) 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](https://cs.stackexchange.com/questions/539/visual-programming-languages/545#545). 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](http://www.hasbro.com/litebrite/en_US/) 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.

> **Comments:**
> **username_22**: My personal definition (or test) of a "real" programming language is if you can use it to directly call the host system's platform API or not - so C and C++ are, as is C# and Java (through P/Invoke and JNI respectively) but not Flash ActionScript or LOGO. Would you agree with my definition?  
> **username_21**: @username_22 That should be a separate question, not a discussion within comments.  

---

### Answer by username_23 on 2017-06-20. Score: 11

You could use some environment that lets you switch between blocks and text and work in both. That way, students can see firsthand that the code in the blocks converts to textual "real" code. This can help them understand the leap.

Here's one example of blocks switching with text on a Karel program on CodeHS (Note: I'm one of the founders of CodeHS)

[![enter image description here](https://i.sstatic.net/Kgj2k.gif)](https://i.sstatic.net/Kgj2k.gif)


---

### Answer by username_24 on 2017-06-20. Score: 9

I was at this camp one summer, and it was a programming camp for building models of different systems. I was super excited - I'd already been programming on Khan Academy and Codecademy. So I walk in, and they say that we'll be using this language called StarLogo Nova. We open our chromebooks, go to the site - and I begin questioning things, because I figure out pretty quickly that it's a drag and drop language.

I had (have?) a dislike for drag and drop languages - I had tried Scratch after doing what I considered "real" programming, and I didn't like it. However, that class changed my mind. We created a model of an epidemic, a model of an ecosystem - and I was hooked. I literally still occasionally take a look at those programs when I'm in the mood and add new features.

The about-face was because, I think, it felt useful. I felt more able to create something cool in StarLogo Nova than Scratch. So I guess, I'd say to first, pick a good, fun DnD language, and second, build something cool in it and show it to them.

You might also go into the idea of higher vs lower level programming languages, with DnD languages just another step higher than something like Python. Assembly is no more "real" a coding language than Python is. (If anything, it's the other way round =P)

All this being said, [don't stuff beans up your nose](https://en.wikipedia.org/wiki/Wikipedia:Don%27t_stuff_beans_up_your_nose) - your students may not even be thinking any less of DnD languages and may have quite a bit of fun without you saying anything at all.

> **Comments:**
> **username_2**: I haven't used StarLogo Nova but have extensively used NetLogo (and years ago StarLogo).  The things you liked - were they because they were drag and drop or were they due to the modelling environment which NetLogo provides with a text based language.  Just curious.  
> **username_24**: @MikeZamansky StarLogo Nova does provide a nice modelling environment with a wide array of things you can do with it, which I enjoyed - I didn't like it for being drag and drop, I liked it for its usefulness. That it was drag and drop didn't seem like such a bad thing because of how much I liked everything else.  
> **username_25**: Yes, build something useful. Something fun if you can. That would probably work with Scratch as well.  

---

### Answer by username_33 on 2017-06-20. Score: 7

Here I would go to Microsoft's [Project Spark](https://en.wikipedia.org/wiki/Project_Spark) (even though it is discontinued, I think it is still downloadable. I have a local copy, so I'm not sure. But it's worth a shot)

Project spark is Microsoft's "experiment" as a game for making games. It is visual. And you can say block based. It's not like Scratch or Snap!, but it is visual.

It makes game creation quite easy, (there are limitations on the game models that can be used and other stuff, but that's not too relevant for this answer) and is very good to teach programming. Types, Objects, Methods and many other things can be taught with it.

I have used it for a while, and it is a *real language*. I suggest you try it, and maybe search videos in youtube that show aspects of Project Spark.

A sneak peak to the block programming (or "*Kode*") of Project spark:

[![Kode](https://i.sstatic.net/tOnlX.png)](https://i.sstatic.net/tOnlX.png)

The kode (not a typo) is fairly straight forward and self-explanatory.

EDIT: It is discontinued, but can still be used. It is free, and a very good way to learn programming concepts (as well as a good way to have fun)


---

### Answer by username_34 on 2017-06-20. Score: 5

It isn't very "fun", but there are visual languages widely used in the industry. For example the [FBD](https://en.wikipedia.org/wiki/Function_block_diagram) language.

From Wikipedia:

> The Function Block Diagram (FBD) is a graphical language for programmable logic controller design, that can describe the function between input variables and output variables. A function is described as a set of elementary blocks. Input and output variables are connected to blocks by connection lines.

EDIT: here my try at a real example:

Here in Germany Siemens-hardware and -software is widely used in a wide variety of factories, power plants and most other aspects of automation. The programming languages the PLCs of Siemens are programmed with are based on the [IEC 61131](https://en.wikipedia.org/wiki/IEC_61131) and the [EN 61131](https://de.wikipedia.org/wiki/EN_61131#Teil_3:_Programmiersprachen_.28EN_61131-3:2014-06.29) (German). They are called **FUP** (function plan, looks like Flipflops, I had those in my electrical engineering studies), **KOP** (contact-plan, looks like a circuit diagram), **GRAPH** (flowchart-style), AWL (really basic Statements) and SCL (a high language based on another language... i think pascal).

The first three of those are all graphical and most people simply use whatever fits them the most. You can translate those languages into each other with a simple click, within some borders.

There are several IDEs used, but the most common is TIA-Portal (that's kinda new for newer PLCs of the S7-series), Simatic Manager (older S7-series) and an even older one I don't know the exact Name of for the S5-series. The naming process of Siemens is extremely weird and a world of itself.

Siemens is used in other countries too, but of course I don't exactly know how much in detail.

> **Comments:**
> **username_33**: Welcome! Could you please add details on why FBD would be a good idea?  
> **username_0**: That's a good example - I'm also entirely unfamiliar with FBD. Can you flesh this answer out a little bit (so that I can use your answer better in the classroom)?  
> **username_35**: @BenI. he's not saying to consider it for use in the classroom, but rather consider it as an example of real world usage of a visual programming language. That is, visual programming need not be necessarily "for kids".  
> **username_0**: @DavidLiu I understood that. But if I will even use it as a passing example in class, I would need to give at least *some* more detail about the language, which could totally fit into the answer here to make it more useful.  
> **username_6**: In real industry, there's a reality that not everyone who uses our software can be versed in C++ and have 4 years of practice with the software.  They need a powerful language to interact with our software which doesn't pack such a training price tag.  FBDs are really popular for solving that problem.  They show that there are many levels with which one can interact with a piece of software.  The C++/Java code at the bottom is only one of those ways.  
> **username_9**: There's also Labview used for lab instrument automation, but licences are expensive and the learnign curve is surprisingly steep.  
> **username_34**: @BenI. i tried to flesh it out some more  

---

### Answer by username_2 on 2017-06-20. Score: 4

Full disclosure: I'm generally not a fan of DnD programming languages in high school (maybe even late middle school) and I think DnD languages are frequently used by stem oil salesmen and used incorrectly so I'm frequently down on them.

More disclosure: DnD languages can be real languages and can be properly and soundly used in educational settings.

Ok, now to answer the question.

I think the easiest way is to head over to code.org and show them their DnD language which has a convenient "show code" button which will show the Javascript (a real language!!! `:-)`) equivalent to the blocks. You now have a platform to talk about how the block based language visually described the same code but visually (as opposed to textually with indentation).

[codesters.com](https://www.codesters.com/coding-platform/) also has a pseudo DnD environment and while I like codesters very much, their DnD doesn't really feel like block based programming since it's really text chunk based - I'm a fan but I don't know if it would help in your situation.


---

### Answer by username_36 on 2017-06-20. Score: 4

You used two key words here: "persuade" and "convince." Let's approach this issue from the perspective of the three Aristotelian rhetorical appeals: logos, ethos, and pathos.

* **Logos**: Appeal to their reason as programmers. Have them create a program in Scratch or Snap!, and as they add each block, have them write the corresponding line(s) of code in a language of their choice. DnD is merely an interface for "real code" that is in fact being executed underneath the hood. Have them use their proficiency to attempt to reconstruct what might actually be happening. For example, how does one of these programs handle event-listening? How can something that looks so simple on the surface actually be running a number of more complex processes that are abstracted away? You could even start by having them focus on just the logic of their program without the implementation of the graphical implementation of the language (i.e. treating a graphic as part of a pre-constructed whose logic they don't need to worry about). Then, have them consider the sprites themselves. If they're still not convinced, give them the assignment of designing their own DnD language/interface/block and color system based on Java, Python, or C (or even assembly (!)).
* **Ethos**: Appeal to two big names in computer science: Harvard and UC Berkeley. Harvard begins their famed and incredibly well-designed [CS50](https://cs50.harvard.edu) course with Scratch. They introduce computer science at the university (viz. Ivy League) level with a couple weeks of DnD programming. It clearly plays an important pedagogical role in the course. Similarly, Berkeley's [CS10](http://cs10.org/su17/) utilizes Snap!. They build almost an entire course around this environment because it is important to emphasize the thinking behind and the logic of programming languages, not the interface or the syntax. (This is a nice time to remind students that "computer science != coding".)
* **Pathos**: Appeal to the incredible complexity of some DnD programs, and let them simply feel amazed. Here is one program I just found called ["Landscape Generation"](https://scratch.mit.edu/projects/164324717/#editor) in Scratch. Here's quite a bit going on here that is far beyond dragging some simple blocks around. If something like that doesn't impress them, send them to the [Games](https://scratch.mit.edu/explore/projects/games/) tab and have them explore those and encourage them to "See inside" to examine what went into designing the game. Snap! doesn't have as easy a database of sample programs to explore (at least none that I can find). However, the same logic should apply to Scratch and Snap!. There is incredibly impressive work being done in both environments, work that clearly demands a level of skill that goes far beyond what beginners are capable of. If you really want to blow the away, show them [Pokemon Go](https://scratch.mit.edu/projects/116739847/) in Scratch (Harvard used this in Week 0 last fall).

> **Comments:**
> **username_37**: Landscape Generation => `define (Create Perspective Hack)` Yep, it's real programming when it's all built on a hack :P  

---

### Answer by username_38 on 2017-06-21. Score: 4

A lot of people are talking about how visual scripting is a higher abstraction, and that's all the difference, and the debate has moved more to a question of "is visual scripting 'real' programming?" The general consensus appears to be that yes, DnD languages are still real languages, and sure, it's a higher abstraction, but what does that mean?

There's a value to higher abstraction that no one seems to be mentioning, and that's the speed of it. When you remove details, you can write more, in the same amount of time. It's why we compare Python to C as 1 line for every 6. The value of visual scripting for people who are experienced programmers is the speed at which you can develop. This is an incredibly important factor in development, especially when smaller teams try to produce large, complex software.

A good example of a visual scripting system is the Playmaker extension for the Unity game engine. Every Unity developer and their grandmother uses it, and for good reason. It allows them to rapidly prototype ideas and build complex systems in hours instead of weeks. And once the prototyping phase is done? The system they built is production-ready in most cases. Time is a very expensive resource in the software industry. If the cost of time needed to perfectly optimize your game in C is more expensive than the slight loss in efficiency you'll have for a fraction of the development time, it's a foolish business decision to ignore the option which enables you to make more money.

> **Comments:**
> **username_0**: Welcome to CSE? This is an excellent answer, and I hope we hear more from you in the future.  

---

### Answer by username_39 on 2017-06-22. Score: 3

First and foremost, don't let *your feeling* about *their feelings* affect your judgement. It seems to me that most kids want to learn new things, they want to be 'beta testers' and on the cutting edge. Visual programming is something relatively new, let them be an early adopter as this new form of programming matures.

More importantly though, programming isn't about the *process* of programming. Programming is about **accomplishing a goal**. We can use different programming 'tools' to accomplish our goals.

Different languages make the process easier just like having a screw driver gets a screw in the wood easier than using an awl. And planing is easier with a planer than with a claw hammer.

Perhaps instead of convincing them what is better, have them do various exercises and let them choose their own tool set. Of course the exercises should do something interesting and in some or most cases allow the visual tool to save time. The grade should be given on the finished product - not which tool was used to accomplish the goal. If you have short exercises, have them do them in class and when the visual tool is faster, those students will be done sooner. Let them decide how they want to spend their time.

Remember the goal - it isn't just to learn a language, it is to teach students how to make good decisions and (hopefully) those lessons carry over into everyday life.

> **Comments:**
> **username_0**: Very nice answer. Welcome to CSE!  

---

### Answer by username_40 on 2017-06-20. Score: 2

# Have your students write a visual programming editor.

It sounds like your students are pretty savvy, so what better way to show them how awesome a visual editor can be than to have them build their own! There are many benefits to this approach.

## Relevancy

They're creating software to make them more efficient at what they already do and love.

## Flexibility

The students can choose their preferred language.  
This could also be a solo or a group project.

## Pay-Off

This is an assignment with some legs. It's not something that will go into a folder and be forgotten. They can use it on their next assignment or in their own personal projects!


---

### Answer by username_41 on 2017-06-21. Score: 2

# Real-world motivation

I have a neutral opinion on visual programming. I have dabbled in it and decided that I am not interested. *But*. It is simply a tool.

Tools are complicated to motivate. Just enter any room of programmers and give them the exercise to, once and for all, decide on whether vi or Emacs is better. You might as well ask them to choose the new Pope...

On the other hand, in my opinion, an intelligent person (which your pupils certainly are!) does not need to actually be fond of or deeply knowledgeable of a tool to appreciate its merits. In the same vein as being able to learn about war and famine (which are decidedly not fun), they should be able to learn about Visual Programming even if you do not find a "fun" exercise for it.

So, you can easily teach them that there is a place for almost every tool. Visual Programming has its place in certain niches (depending on viewpoint, obviously) where you just do not need the expressive power of a general programming language. For example, if you are into Business Process Management, you can achieve a *lot* with visual programming. If you are using one of the game engines which focus on higher level creation, the same is true. A program like Blender can go far with a very domain-specific visual "programming" for what it does (physics simulation and so on). CAD/CAM systems are largely "programmed" with very, very domain specific visual tools.

Pick a few nice examples, and maybe you find some open source / free visual programming environments where they just play around, as a bonus. Even if they never touch them again, they will at least know that such things exist, and they may appreciate that *somebody* out there (who, likely, would never "program" anything at all, if they couldn't do it visually) puts them to good use.

# "Convince"?

Try not to convince them. Show them what is *real*, what *exists*, and that in itself should be convincing enough.

This might sound like nitpicking, but in the business world, if people start to try to "convince" someone of something, then it's usually a red flag. I prefer if they show me that something so I can understand and appreciate (or deny) it myself.


---

### Answer by username_20 on 2017-06-21. Score: 1

Just because you are using abstraction does not mean it is no longer programming.

Anything above actually flipping the bits by hand is us just being lazy.

My only objection to using an obscure language just for fun is. Why learn it if I would not use it in real life later?

Essentially I’d say. As long as the problem to be solved is fun. I.e. Not how to implement a solution using a recurs7function, I’d say you are grand. Especially if there is text or graphics output involved.

Blinkenlights are fun.

> **Comments:**
> **username_0**: That's a fair point. Though we also teach 6502 assembly at my workplace, and I learned ML, BASIC, and Pascal - they all served a pedagogic purpose at the time.  If it helps to get at an important concept, then that can be reason enough.  (And keeping student engagement high enough to actually learn and explore is part of communicating the concept)  

---

