> Back on topic, the tools exist, but they are often seen as toys and > not serious software > development tools. Are we at the point where the compiler for a visual > programming > language is written in the visual programming language? > > - Keelan >
Hi Keelan, I was going to mention this further back in the thread when visual programming was first mentioned, but for those not aware, there has been a shift in emphasis in teaching computing principles to newbies who have no idea what a bit, byte, assembler, compiler, interpreter, etc., are. UC Berkeley's "The Beauty and Joy of Computing" (and a follow-on "The Beauty and Joy of Data", offered at some institutions) curricula are increasingly being taught (starting in high school advanced placement computer science, as well as in freshman coursework in universities) to convey fundamental computing concepts: https://bjc.berkeley.edu The associated courses are taught using a visual programming environment called Snap!, where the (now browser-based, thank goodness) ease-of-use of Scratch (drag-and-drop interface, visual metaphors for loops, conditionals, etc., as well as easy animation tools) is combined with the power of Scheme (first class procedures, first class lists, first class objects, and first class continuations). https://snap.berkeley.edu Some universities have begun offering Bachelor of Arts degrees in CS, in addition to BSCSs, where about half of the BACS coursework is technically-oriented, and the remainder is oriented to more traditional arts offerings. TB&JoC, TB&JoD, and Snap! form a bridge so that students who ordinarily would never even consider studying CS can become knowledgeable enough to truly comprehend and appreciate computing's possibilities and limitations in its role in civilization (or at least what's left of it). There's enough slack in the approved offerings that electives can be weighted more toward the technical direction (e.g., user interface and experience) or the arts direction (e.g., psychology and history). The idea was to close the severely-growing gap between those who know everything about computing and those who need to know enough, but not everything, to be truly effective in the information-dominant world we've been careening toward without nearly enough preparation of future generations. I haven't worked with Snap! enough yet to know for sure whether it can be used to develop itself, but I strongly suspect that is the case (it's actually implemented in Javascript using an HTML5 canvas due to its browser-based nature). It wouldn't be suitable for doing systems level development, unless optimized C code (or equivalent) could be emitted, but it could certainly be used to demonstrate the logic principles involved in any level of software development that most people are ever likely to need to understand. There's mention of Snap! programs being convertible to mainstream programming languages such as Python, JavaScript, C, etc., but I haven't traced to ground in documentation how that's supposed to happen, yet. We may be part-way there because Google's Blockly spin-off of Scratch can already emit five scripting languages (Javascript, Python, PHP, Lua, and Dart), and it uses a modular approach where emission of code in additional languages could reportedly be added. That magic word, "optimized", is the key to whether the code is fundamentally correct and would need oodles of hand-rewriting to improve efficiency, or there are ways to automate at least some of the optimization. Snap! can be run off-line in a browser, as well as on the on-line primary and mirror sites, and standalone applications can be generated. Scratch has been extended to provide an easy way to control and sense physical environments via typical robotics components, but I haven't looked to see if Snap! has inherited those extensions. For any doubters, note that Pacman was ported to Scratch years ago, complete with the authentic sounds (including the "shrivel and disappear-in-death" clip), so ... ;^) All the Best, Jim
