Not too many years ago programming carried the aura of a Black Art, known only to a few mystical practitioners evoking their powers for a living. As computers slowly permeated our lives, workers in a multitude of fields found themselves involved with these wonders. And always there was the programmer performing his magic.
—Neill Graham, Artificial Intelligence
It is no accident that sorcery techniques often resemble certain childhood behavior patterns. Children often have a natural familiarity with the simple principles of magic even if they lack the persistence or encouragement to make them work. The adult magician is seeking to regain that childlike sense of imagination, fluidity, and wishful thinking, and turn it into something of real power.
—Peter J. Carroll, Liber Kaos
Program or be programmed.
—Douglas Rushkoff
Scratch is a visual programming language developed by the MIT Media Lab’s Lifelong Kindergarten group for teaching computer programming to children and adolescents. Scratch’s philosophy is anyone can learn to program, and it is inspired by Seymour Papert’s Four P’s: projects, peers, passion, and play (see “Give P’s a Chance” by Mitchel Resnick, director of Lifelong Kindergarten). Rather than typing out lines of code, you build programs in Scratch by arranging graphical blocks—sort of like programming with LEGO. The following illustration compares some Java code that when complied and run will display “Hello, World!” on your computer screen, to a block for doing the same thing in Scratch. You can see how the block simplifies things.
Here is what that block looks like in a script:
I discovered Scratch circa 2007 while doing some research in anticipation of developing a graphical system for creating magician-computer interactions, inspired by Pure Data and similar languages. Scratch could do many of the things I had envisioned and several I had not, and although the scope of its æsthetics and programmability were limited (ease of use often restricts variety—compare Windows and UNIX), it was especially well suited to pedagogy: rather than teaching you a bunch of stuff about discrete mathematics, code syntax, data structures, and other esoterica computatralia before you ever write a program that simply displays a static image on your screen, with Scratch I could show you in just a few minutes how to display a dynamic image in response to your spoken incantation.
Certainly, there is a genuine arcanum to computer science, but just as you can learn and experiment with the basics of spell-casting without first penetrating the great mysteries of the occult (for many occultists, our first attempts at sorcery were our first steps into the mysteries), you can begin programming computers without first obtaining a complete education in computer science. Do not be put off by Scratch being “kids’ stuff”; plenty of magic is, really, and in the hands of a capable sorcerer, Scratch is a toolbox for doing magic with computers that blows away most of what has been written about technomancy, cybermagic, &c., until now. This is why I call Technomancy 101 “advanced cybermagic for beginners.” Scratch may also be a gateway to other technologies with which to make bigger and better technomanctic designs.
Scratch makes it easy to begin multimedia programming with images and sounds, but it also facilitates introductory physical computing with optional add-on hardware that extends Scratch with sensors and actuators not commonly found among desktop computers. Several Technomancy 101 projects feature these and other hardware extensions.
Getting Scratch
You can try Scratch by going to scratch.mit.edu and clicking the Create button at the top, or click Explore to check out projects others have made. Any Scratch project may be opened in the editor so you can see how it works, which is one of the best things about learning with Scratch. Its built-in help system includes step-by-step tutorials, how-to’s, and descriptions and examples for each block; and the website has a Tips page with things to try.
In order to save your projects online and share them with others in the Scratch community, you would need to create an account there, or you may download your projects to your computer and later upload them to the website in order to run or edit them.
There is an off-line editor you can download and install, which is useful when you are disconnected from the Internet or working with content you prefer not to share online. The official extensions (v.i.) work in the offline as well as online editors, while some experimental extensions require one editor or the other. The Raspberry Pi computer’s official operating system, Raspbian, includes special versions of Scratch 1.4 and 2.0 that have interfaces to the Pi’s unique hardware.
Extensions & Modifications
In addition to Scratch’s built-in extensions that add special blocks for interacting with devices such as the PicoBoard and WeDo mentioned above, anyone can write their own experimental extensions. There are extensions for Arduino, littleBits, Leap Motion, Make!Sense, Twitter, text-to-speech, a sound synthesizer, and more.
Since Scratch is open-source software, many people have modified it to incorporate additional or alternative functionality, e.g.:
- SNAP! (formerly BYOB, or Build Your Own Blocks) — a variant created by University of California Berkley for more high-school and college-level computer science. Includes extensions for several devices.
- Scribble — for making generative art
- S4A — a mod of Scratch 1.4 for working with Arduino
The Scratch Wiki includes a complete list of Scratch modifications.
Derivatives
Scratch has inspired many similar programming languages. Two of my favorite robotics platforms can be programmed with blocks: Microsoft MakeCode for the Adafruit Cricket, and BlocklyProp for microcontrollers and robots featuring the Parallax Propeller multicore MCU.
Here are a few more:
- Google Blockly for web-based visual programming
- MIT App Inventor for making Android mobile apps
- Modkit for Arduino microcontrollers and Vex robotics
Resources
- Scratch’s greatest resource is its ability to open any project in the Scratch editor to see how the project works. I encourage you to check out what others have done, and if you see something that piques your interest, open it up and examine it or modify it—any changes you make will not alter the original project, although you can save your changes as a new project.
- Scratch projects may be organized into collections called studios. Here are a few of my favorites:
- Just Like Real Life — simulators and simulations
- MIDI and such Soundstuff — projects that use Scratch’s sound blocks
- 100% Pen — drawings and animations made using only Scratch’s pen blocks
- The Scratch website has a lot of information, including a Tips page to help you get started programming in Scratch; an Explore page where you can browse projects others have made; and a Discuss page where you can interact with the Scratch community to share your work, get or give help, report problems, or propose solutions or new ideas.
- The Scratch Wiki has a lot of detailed information about Scratch, including examples of how to use each block, which usually provide more detail than Scratch’s built-in help.
- Learn to Program with Scratch: A Visual Introduction to Programming with Games, Art, Science, and Math by Majed Marji. There are several Scratch books available, and this one is my favorite; an excellent introduction to computer programming concepts with Scratch. If you are new to Scratch or computer programming, I highly recommend reading this book in order to get the most out of Technomancy 101.
- Scratch 2.0 Game Development Hotshot by Jessica Chiang and Sergio van Pul. Not as comprehensive as Learn to Program with Scratch, but demonstrates a good variety of techniques for games, which can apply to other contexts. (Full disclosure: I was a technical reviewer for a few chapters of this book.)
- Coding for Beginners Using Scratch. In the 1980s, Usborne published several fun books about programming, mostly games in BASIC. Today they have a book out about programming in Scratch.
- Scratch for Budding Computer Scientists. A free, online tutorial written by David Malan of Harvard University. I said earlier that technomancers need not be computer scientists, but a good grasp of the basics is helpful, just as a painter need not be a physicist or materials scientist, yet may benefit from basic knowledge about colors and kinds of paint and how they interact with each other and the world.
About the Projects
The Technomancy 101 projects feature interactions demonstrating various principles and possibilities. These may be studied, modified, recombined, or incorporated into greater works, complete rituals, or other facets of the art magical, as you find fit.
All projects were made with Scratch 2.0 unless otherwise indicated. Each project page includes a link to download the project file, which you can open in the offline editor, or upload to the online editor if you prefer using that (go to File → Upload from your computer).
All project pages are divided into these sections:
- What It Does — a summary of what the project does, what magician-computer interaction it demonstrates
- How It Works — a technical explanation of how the project works. Suggested ritual components or applications are also given here or in the subsequent section.
- Make It Better — suggestions for modifying and improving the project
Any project requiring specialized hardware or software will have a note in the “What It Does” section, stating what is needed and suggesting alternatives if any are available.