It's in installations such as this that I most strikingly see the parallel between code and poetry.
Snap! could hardly be more forgiving, yet knowing syntax -- knowing the manual inside out -- would never tell me how to make this sprinkler. Likewise, learning the parts of speech and rules of grammar will turn no one into Shakespeare.
It is the 'how do you do that' that fascinates me. How do you envision what you want to see and break it down into functional components? It isn't in algorithms or a library of snippits. At least not those alone. Is it more muse and inspiration or more planning and perspiration?
And most important, how can you convey it to others. This is the heart of teaching writing, of learning to code. This is what I would most like to see in courses on coding. How to see as a developer. As a poet of code.
I've been playing with this, trying to produce more drops, and making them more transparent. Did you know you can increase the number of clones using
warp? Check this out:
Thanks for sharing this super nice project, Frido!
I wish I were a poet of code... let alone teaching it. Looking at a piece of code (especially a piece of student code) I can often teach how to make the code more elegant, but I would never think of doing a project like this, let alone work out the physics of it.
I can recognize it when I see it, though. I'll never forget that Scratch project with the lump of jelly,
Like this water one, it doesn't have a plot, or characters, or a lot of action, but it's perfect for what it is and, again, I would never have thought to do it.
I think some of the wonderment is in the ratio of approachable code to the unexpected emergence it produces. Quick examples are Engine, by Jens, or Brian your Animal Game or Art-Horns-Hue. They’re engaging and pull you in. Then look under the hood at the brevity and clarity of code. There is an elegance, simple and approachable.
Sure, people produce amazing whiz-bang software, like FireFox and Photoshop and Scrivener and SimCity. But these have thousands of lines of arcane code, massive amounts of media assets and external libraries. And take a team months to do it. I looked at Jens’ Swimmer, then made a rowboat in a few minutes. Then made a regatta.
Art of imitation. Re-mixing. Imagine a course or textbook on methods or examples of going from a model problem to expressing it in code.
When I write, I often start with an intriguing question and respond with an essay. In other words: this is what I have to say about that. How I say it, the format, follows the nature of the content. The essay may end up as a soliloquy or diary entry or letter to the editor (okay, probably not a letter to the editor). My point is that methodology can be taught. I can’t teach you what to say, but can guide you with the tools used by Faulkner and Hemingway and (Stephen) King (whose book on writing is a case in point).
I betcha, Brian, with one foot in the classroom and another in coding, you have such a text to tell. ;—)
Well thanks for the compliment, but Art-Horns-Hue was invented by a 12-year-old and Animal Game is an old, old, standard Logo demo. I did invent https://scratch.mit.edu/projects/1053593/ and https://scratch.mit.edu/projects/1068688/ but mostly I do boring things like https://scratch.mit.edu/projects/257694182/.
Jens, on the other hand, cranks out great demos in his sleep. (It must be in his sleep because all his awake time is developing Snap!.)
Roses are red, violets are blue,
It's new to me, but I think it would slow down my computer too fast
A remix, containing Jens'
You can freeze the droplets by moving the mouse to the bottom of stage (touching an invisible shape, which will in turn change its transparency based on the amount of droplets touching it). Except for the droplets that have been touched by the mouse; those will continue moving.
I'm humbly inspired only by the most interesting originals, such as your one here. Thanks for sharing the original, fridolinux!
That a 12 year old wrote the project makes the point all the more. Snap! has a high ratio of effect to code; big bang for the coding buck. And there are some amazing block-code projects out there. Tale of the Fiery Dragon (scratch.mit.edu/projects/126517840) comes to mind.
Suppose I compose verse about the feeling of being in the scene when riding a motorcycle. I can hang a static image with it. Meh! Better still, I could create an interactive installation. Something in the sprit of fridolinux's "water simulation" above. So suppose I decide to simulate push steering on the bike, which is different from driving a car. Okay, now I know what I want to do. Nobody can write a manual for how to do all projects. Nor would I want one. But I would like something like the MasterClass series. Talented individuals who offer insight into their general methods and tips on technique.
There is a rise in tele-education. I can see the need for instructors and learners to turn concept into project with relative ease. Snap! has a calling here, both aesthetic and instructional. So the missing manual is somewhere between "Snap! 6 Reference" and the assignment. "Okay, by Monday make a simulation of blood pressure." Or goalie strategies or organic composting or scheduling efficiency.
You said you would like a MasterClass series about "turning a concept into code".
I share the sentiment with you, however, I would prefer first to have an intermediate ("pre-Master") course, showcasing not the concept-to-code path yet, but an original-to-remix path, in other words, a course teaching (or showcasing) how to remix an interesting project, is what we need, imho.
I'm deeply humbled by your beautiful accounts of how true inspiration can be found in programmed artifacts. It's precisely such projects as Frido's water project that make my heart smile. As far as Brian's praise for my own demos goes, I'm very afraid that your idealistic perception of how they come to existence is entirely exaggerated.
For me the music is very much in the piano. That's an Alan Kay quote and I'm emphatically contradicting it. Alan said that there isn't any music in the piano. For me, there is. Great minds must be able to conceive of a notion of beauty and - as you say - translate it into working code. Not me. I fiddle around with whatever my hands pick up, and the things suggest things I might do with them. And then those things suggest variations, and the variations of things beget new ideas.
When I was in Peru last September I bought a charango, a little guitar-like 10-stringed instrument with a peculiar, doubly-reentrant tuning that makes it ridiculously hard to play a tune, but fairly easy to strum those Andean chords. They practically fall out of the instrument as soon as you pick it up. I'm sure that handling a charango explains more about the indigenous tunes of the Andes than reading a book about it. Because the music is in the instrument.
In that respect programming languages are like musical instruments for computing to me. There are projects that literally "fall out of them" as soon as you pick them up. And then those projects suggest variations, and those variations trigger new ideas.
When I grow up I want to build an instrument that makes minds sing.
I think you did build it. Soon to be in version six.
And your point is well taken that music (function) follows from the instrument (form). In that sprit, to tinker with the blocks of Snap! is to see a project as performance and reach for the blocks that make that interaction happen.
Cool. I think you just wrote the first chapter of the missing methodology manual.
Taking up my previous example of being in the scene, push steering is about the "swoopy." Press this side of the screen and the image tilts, the path curves, then uprights. Harder the press, more intense the swoop, into a back and forth glide through the twisties of a mountain path or along a long valley arc.
Which blocks capture the press, curve the path, tilt the view? Pretty it up with a few bells and whistles, a bit of back and forth experimentation, and there it is. A few artist friends hate being asked where their ideas come from. They don't like to admit it is a messy, mundane process of revisions that started over there and end up here.
Likewise, contemporary poet A.E. Stallings uses rhyme in her work as a methodology. Finding patterns of sound compel her to re-imagine and evolve ideas, pushing the subject in directions not previously pictured. As with the poet, so with the coder. Fitting ideas to blocks, re-imagining, evolving, going directions not previously envisioned.
Ya know . . . Snap! is a charango.
Interesting thread ...
I have had similar experiences with recoding & remixing examples of early computer art. I learned a lot by analyzing the artwork and then designing algorithms to reproduce it. Snap! was immensely helpful in implementing them with manageable previous knowledge. Little by little I discovered new concepts (command-blocks) that simplified the implementation and allowed completely new components for remixing the artwork.
I agree with Jens that the art (at least some ideas) can be influenced by the tool. Unfortunately, as an autodidact, I lack basic computer science knowledge, because I suspect that advanced concepts (i.e. like object-oriented programming) could be very helpful for my further ideas, which I am probably unnecessarily tedious to tackle with my current state of knowledge.
The Snap! manual does not necessarily help me in this respect. I am still looking for a textbook that I can use as a low-threshold entry to the use of these concepts.
I appreciate the discussion. It helps coalesce a number of questions. The first and most important is: What is it I want to do? Now I know with a bit more precision. I want to make what, for lack of a better term, I call Snap!Art.
I can say what that is. I cannot say (yet) how to go from a concept to its code. In this regard, however, Jens offered an insight about allowing the instrument (block based coding) to inform the design. What that says to me is think in blocks. By analogy, in learning French, think French, don’t translate back and forth from English. In learning metric, think metric, don’t keep converting. (If I have seriously misunderstood, Jens, then I promise hang up my charango )
So, what is Snap!Art?
( Skip if uninterested, of course. )
In short, it’s an interactive installation made with Snap! How it is made with Snap! is for the missing manual. But I characterize an interactive installation as a (a) first-person (b) software (c) simulation.
(a) The user is a participant, not observer to the process. For example, a player on the field, not a spectator fan in the stands.
(b) The work is based on instructions by which user actions are turned into observable results. For example, rolling a virtual bowling ball down an alley knocks over pins along its path.
(c) The work is an immersive imitation [mimesis] of another real or realistic process. For example, a playground train for a toddler to sit on and turn a wheel and imagine steering.
As an installation, the work is on exhibit in a physical or virtual location as (a) an original (b) artifact (c) of aesthetic merit. For example, a kinetic sculpture in the lobby of a museum.
(a) Original in that the work is authentic or innovative (not a trivial copy of preceding work, mass produced, or clone)
(b) An artifact in that the work is human made, not naturally occurring (animals don’t make art)
(c) Having aesthetic merit in that the work is a personal expression, not merely functional (the way it is matters, not simply what it does). For example, the work inspires amusement, wonder, or appreciation.
Water simulation, which started the discussion, I see as an excellent example of Snap!Art. I want to add Snap!Art rather than simply static graphics to blog posts. That way, make the content more immersive and add to the content beyond a passive image.
Snap! is an excellent medium in this regard, no small part of which is how easily it is embeds on a post page and the improved speed of version 6. (I tried LiveCode …briefly.) The expressive power of Snap! isn’t the blocks. At least, not for me. It could just as easily be text syntax based. Rather, it’s the approachability of the language and ease of deployment. Heck of a lot more intuitive and expressive than Processing (https://processing.org).