MIT's Scratch makes programming playful. Drag and drop blocks, then connect them together. Moments later, you can have a program that does exactly as you instructed. One doesn't even need to call it programming; instead, we can call it play. Like Lego blocks, you connect the blocks and make something that, at the end, is yours.
Scratch has been an inspiration for me while I have been working on VisionScript. I remember being in my primary school class using Scratch. I cannot remember making anything of note, but I do remember one thing: I was making things. I could make a game. I can always say I made a game with code (although I can't remember what I made!).
VisionScript takes the idea of drag-and-drop programming and combines it with both computer vision and a desire to build progressive on ramps to new programming paradigms.
First, let's unpack the computer vision aspect. WIth VisionScript, you can make apps that interact with the real world. A demo towards which I am striving is being able to take a selfie on my iPhone and replace my face with a smiley face emoji [^1]. I see this as a compelling way to introduce people to programming. You can use blocks to control images from the world.
Imagine a young person building an app that counts the number of books on a table. Or an app that lets them make a search engine for photos of their classroom. With a language and a playful, intuitive interface, building such apps becomes possible. The technology is there, but there is a big gap: making it accessible to people who are learning to code.
The more different ways of presenting coding we have, the more we can convey what "coding" really is. Scratch shows you can make games. VisionScript shows that you have the power to make something that uses information from the real world as an input.
Coding teaches logic, and that, from a computer, you can make something fun that you can call your own.
Earlier in this post, I mentioned the "desire to build progressive on ramps to new programming paradigms." VisionScript, like Scratch, is a starting point: a place where you can say "I made something with code!" A statement you can say proudly; a statement that you can hold throughout your life. I'm no game developer, but I can say that I made my own computer game as a kid thanks to Scratch.
VisionScript uses a drag-and-drop syntax in "interactive mode", but you can write your own code using exactly the same words as the blocks that you drag-and-drop. Therein lies the progression: play with blocks, then type your code. The output is the same, but the medium is different: now, you are writing code. And I may even include more powerful functions that you can't drag and drop to provide an additional incentive to explore writing code.
VisionScript provides an on-ramp to Wolfram Language, a more complex computation language. The syntax of VisionScript was inspired by Wolfram, but VisionScript has a vision focus and does a lot behind the scenes to reduce the amount of code you need to write. You never need to learn what a function parameter is to make a VisionScript app that lets you search a folder of images; you don't need to know what embeddings are to compare the similarity of two images and make a game from that.
I see a clear progression path for teenagers from VisionScript, which I hope someone can learn in a few hours, to Wolfram Language. Wolfram is more powerful, but with that power comes complexity.
Alternatively, I see Python as a good starting point: VisionScript gives you logic and introduces you to some of the programming lingo "code", loops, inputs, outputs. You can use this background as a way to start using Python, which has a syntax that I think is friendlier to beginners than other languages.
I found myself playing with VisionScript. Not coding: playing. I made an app to get the text from a Taylor Swift Instagram post. The app isn't particularly useful, but making it felt like magic. This is the feeling I want more people to have: that coding allows them to make magical things. How do we enable that? Creating more playful programming experiences.
[^1]: The stumbling block relates to the file upload API on iOS. More work to do to figure out what isn't working!
Comment on this post
Respond to this post by sending a Webmention.
Have a comment? Email me at firstname.lastname@example.org.