Watch What I Do: Programming by Demonstration (1993)
A couple of valuable takeaways from chapter 1 for me:<p>- Explains what PBD is all about.<p>- &quot;many mathematicians and physicists think visually and reduce their thoughts to words only reluctantly to communicate with other people&quot;. I&#x27;ve found that this holds true for myself as well, both when thinking about maths problems and in thinking about algorithms for my software. This is why I believe in the <i>concept</i> of visual programming.<p>Several tools made for music production, creation of computer generated imagery and animation base a lot of the workflow around working visually. For example:<p>* Max, a visual programming language for music and multimedia. <a href="https:&#x2F;&#x2F;cycling74.com&#x2F;products&#x2F;max&#x2F;" rel="nofollow">https:&#x2F;&#x2F;cycling74.com&#x2F;products&#x2F;max&#x2F;</a><p>* Pure Data, an open source visual programming language for creating interactive computer music and multimedia works. <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pure_Data" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pure_Data</a><p>* VCV Rack, an open source virtual modular synthesizer. <a href="https:&#x2F;&#x2F;vcvrack.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;vcvrack.com&#x2F;</a><p>* Blender, an open source 3D modeling, animation and rendering program has a material editor where you create a material by routing basic materials through a set of nodes. <a href="https:&#x2F;&#x2F;docs.blender.org&#x2F;manual&#x2F;en&#x2F;latest&#x2F;render&#x2F;blender_render&#x2F;materials&#x2F;nodes&#x2F;introduction.html" rel="nofollow">https:&#x2F;&#x2F;docs.blender.org&#x2F;manual&#x2F;en&#x2F;latest&#x2F;render&#x2F;blender_ren...</a><p>* Nuke, a compositing software that is widely used in the VFX industry, has a node-based workflow. <a href="https:&#x2F;&#x2F;learn.foundry.com&#x2F;nuke&#x2F;content&#x2F;getting_started&#x2F;using_interface&#x2F;working_nodes.html" rel="nofollow">https:&#x2F;&#x2F;learn.foundry.com&#x2F;nuke&#x2F;content&#x2F;getting_started&#x2F;using...</a><p>* Natron, an open source composting software. Development stopped last year and they are currently in need of a maintainer. <a href="http:&#x2F;&#x2F;libregraphicsworld.org&#x2F;blog&#x2F;entry&#x2F;the-demise-of-natron" rel="nofollow">http:&#x2F;&#x2F;libregraphicsworld.org&#x2F;blog&#x2F;entry&#x2F;the-demise-of-natro...</a>. <a href="https:&#x2F;&#x2F;natrongithub.github.io&#x2F;" rel="nofollow">https:&#x2F;&#x2F;natrongithub.github.io&#x2F;</a><p>* Tool2, an open source piece of software for creating interactive 3d content and animations. <a href="http:&#x2F;&#x2F;tooll.io&#x2F;" rel="nofollow">http:&#x2F;&#x2F;tooll.io&#x2F;</a><p>* Cables, &quot;interactive visuals, made from cable salad&quot;. <a href="https:&#x2F;&#x2F;cables.gl&#x2F;" rel="nofollow">https:&#x2F;&#x2F;cables.gl&#x2F;</a><p>* Demotivation, a tool by Ferris of demoscene group Logicoma, provides a visual programming language that compiles to a function that renders everything on screen in the demos created with the tool. Ferris talks a bit about it in <a href="https:&#x2F;&#x2F;youtu.be&#x2F;hFIyj5Yv440?t=1332" rel="nofollow">https:&#x2F;&#x2F;youtu.be&#x2F;hFIyj5Yv440?t=1332</a>, and he also worked on the code in a recent stream on Twitch which he hasn&#x27;t uploaded to YouTube yet; <a href="https:&#x2F;&#x2F;www.twitch.tv&#x2F;videos&#x2F;419371333" rel="nofollow">https:&#x2F;&#x2F;www.twitch.tv&#x2F;videos&#x2F;419371333</a> (Ferris Makes Demos Ep.052 - Botch. Skip to 00:07:41 in the video on Twitch). This tool is not available to the public.<p>I think a couple of other pieces of software deserve a mention for being ways to work very visually with music production in various ways:<p>* Steinberg Cubase, a digital audio workstation. <a href="https:&#x2F;&#x2F;new.steinberg.net&#x2F;cubase&#x2F;" rel="nofollow">https:&#x2F;&#x2F;new.steinberg.net&#x2F;cubase&#x2F;</a><p>* Ableton Live, a digital audio workstation. <a href="https:&#x2F;&#x2F;www.ableton.com&#x2F;en&#x2F;live&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.ableton.com&#x2F;en&#x2F;live&#x2F;</a><p>* Arturia Pigments, a wavetable and virtual analog software synthesizer. <a href="https:&#x2F;&#x2F;www.arturia.com&#x2F;products&#x2F;analog-classics&#x2F;pigments&#x2F;overview#en" rel="nofollow">https:&#x2F;&#x2F;www.arturia.com&#x2F;products&#x2F;analog-classics&#x2F;pigments&#x2F;ov...</a><p>And in the world of game development there is of course:<p>* Unreal Engine 4, a game engine and suite of integrated tools for designing and building games, simulations, and visualizations, features a visual programming language called Blueprints. <a href="https:&#x2F;&#x2F;docs.unrealengine.com&#x2F;en-US&#x2F;Engine&#x2F;Blueprints&#x2F;GettingStarted" rel="nofollow">https:&#x2F;&#x2F;docs.unrealengine.com&#x2F;en-US&#x2F;Engine&#x2F;Blueprints&#x2F;Gettin...</a><p>Those are the ones that I personally find inspiring. There are a couple of visual programming tools that I don&#x27;t mention here but which I felt fell way short of being even remotely productive.<p>So back to what was being said in the book linked by OP. A couple of quotes:<p>- &quot;Aaron Sloman distinguishes two kinds of data representations: <i>analogical</i> and <i>Fregean</i> (after Gottlob Frege, the inventor of the predicate calculus). Analogical representations are similar in structure to the things they describe; Fregean representations have no such similarity.&quot; (Goes on to show a figure demonstrating the difference.)<p>- &quot;Words are Fregean. Yet words and rather primitive data structures are often the only tools available to programmers for solving problems on computers. This leads to a translation gap between the programmer&#x27;s mental model of a subject and what the computer can accept. I believe that misunderstanding the value of analogical representations is the reason that almost all so-called visual programming languages, such as Prograph, fail to provide an improvement in expressivity over linear languages. Even in these visual languages, the representation of data is Fregean.&quot;<p>I find this very interesting. This is pointing out a very specific problem.<p>I went on to read chapter 3 as well, and found that chapter interesting as well. Not going to comment on that chapter because this is enough text anyway for now.<p>I intend to read more of the chapters as well.<p>All of this is to say, this book seems to hold some valuable knowledge, and I wish people read it. The book seems to focus a good deal on empowering end-users, and on teaching-contexts. That is a worthy goal as well but not what I am interested in (hence why I skipped reading chapter 2). But from what I have seen so far I think this book might help guide us toward creating better tools for expert programmers.<p>We need tools that help us manage complexity better than what we have today. We need tools that will help us iterate faster. And I believe that tools that give us ways to reason about our problem visually as we are authoring and editing our software will be key. Not as separate drawings and documents. As an ingrained part of development. As a way of communicating to the machine what we are trying to achieve with our software.