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