Scratching the Surface
23 January, 2007
It’s out! The MIT Media Lab’s Lifelong Kindergarten group with John Maloney, who most of you know as one of the major contributors to Squeak, have released Scratch. Scratch is a new programming language that lets you create your own interactive stories, games, music, and art. I spoke with John about Scratch.
Ron: John many people are familiar with your past, could you give us an update as to what you have been doing and what you are currently working on?
John: Since January of 2003 I have been working in the Lifelong Kindergarten group at the MIT Media Lab on a media-rich programming environment called “Scratch” (http://scratch.mit.edu). Scratch combines ideas from Squeak EToys, CricketBlocks (the precursor to PicoBlocks, see http://www.picocricket.com), and Logo to create a playful and engaging introduction to programming. Like EToys, Scratch programs are written by assembling colorful command blocks on the screen to control one or more sprites. However, Scratch has fewer commands and objects and more “training wheels” to get you started.
Scratch was developed under an NSF grant and is aimed at youth at after school centers. As we’ve developed Scratch, we’ve worked closely with the Computer Clubhouse, a network of 100+ after-school centers located in low-income areas in cities around the world. This is a very tough audience, since kids are free to choose what they want to work on and there is no “curriculum,” no classes, and no teachers. (The Computer Clubhouse relies on volunteer mentors.) Thus, we’ve worked hard to make Scratch be fun and easy to learn so youth will want to use Scratch and can figure out many things for themselves even if there isn’t a mentor around. But in addition to after-school computer centers, Scratch is also attracting attention from forward-looking teachers and educators, science museums, school computer clubs, and it has even been used as a first introduction to programming in several Harvard computer science classes.
Ron: I spent some time working with Scratch, it really is nicely done. I can see that it would be very useful to teach program flow, and I think that the set of sample applications is great for opening up the creative possibilities in the minds of children. I’m interested in what you believe we can learn from how children use the program and what you believe are the benefits to tile programming. I personally like the way that programming becomes more tactile. It’s very interesting to see the concepts that we take for granted represented in puzzle pieces that can be picked up organized.
John: It’s not just children who find Scratch an easy entry intro programming. David Malan and others at Harvard have been using Scratch in the Intro programming class as a warm-up for Java. It’s been a big success and David had a paper about it at this year’s SIGSE. It seems clear that both kids and adults are able to transfer concepts such as control flow, iteration, conditionals, and variables from Scratch into other languages. David’s paper is the most well documented study, but I’ve seen kids go from Scratch to Flash ActionScript programming with relative ease.
Ron: I have seen some people complain (mostly adults not children) that tiles do not allow for a deeper understanding of programming concepts. I can see that the programming concepts once understood can be represented in the mind of the programmer as a “thing” that needs to be recreated syntactically in other languages. How do you feel about the argument that tiles make programming too simple and limit deeper understanding?
John: We’ve heard this argument before. I think that the people who make this argument are confusing the surface structure of programming languages with their deeper meaning. Because many programming languages involve strict syntax rules and complex data typing systems, people sometimes lose track of the goal, which is to get the computer to do what you want with as few errors and ambiguity as possible. Syntax and type declarations are simply means to that end.
Some aspects of traditional computer languages are more for the convenience of the language implementation (e.g. syntax rules), not the human being. Other aspects, while meant to reduce human errors, are sometimes more of a hindrance than a help (e.g. complicated type systems). Programming language design is an exercise in balancing many factors: ease of implementation, efficiency of the final code, ease of writing, ease of maintenance, and human understandability. As a programming language, Scratch is optimized for ease of writing and, to a lesser extent, ease of understanding for relatively small programs within a specialized domain. The same exact statement could be made about Perl, Tk, Awk, APL. None of these languages is particularly efficient or suitable for building large applications, yet all of them are useful. Scratch is a programming language in exactly the same spirit, but focused on a different audience.
I actually believe that a blocks language similar to Scratch, PicoBlocks, or EToys could be scaled up to support larger programming projects. Current Integrated Development Environments for languages such as C++ and Java make heavy use of color and highlighting to help the user with syntax (e.g. finding missing quote marks or curly brackets). Scratch blocks can be seen as just a fancier version of such editors that uses shape as well as color to help with syntax.
But to answer your question — I am convinced that you are right.
People who grow to understand programming in Scratch will be able to map the key concepts onto analogous constructs and syntax in other programming languages. I don’t believe for a moment that “tiles make programming too simple and limit deeper understanding”. You can make a few things happen in Scratch by trial-and-error. But as your aspirations grow, you quickly run into the need for deeper concepts. And when you learn a new concept to accomplish something in Scratch, you really appreciate and remember it. Mitchel once had a boy thank him profusely and shake his hand many times for showing him how to use a variable to keep score in a game.
Ron: What does the “Share” button on the Scratch users interface do?
John: Nothing yet. However, the Lifelong Kindergarten Group is currently working on a new Scratch website that will allow you to share your Scratch project online. Once you’ve created a Scratch home page on the site, clicking that button will upload your project. Assuming you have a Java-enabled browser, Scratch projects on the web site will run right in your browser, like playing a YouTube video except that Scratch projects can be interactive. If you find a project that you like, you can download it to see how it works or to create your own variation of it. Our goal is to build a Scratch community in which users are inspired by, learn from, and build upon each other’s work.
We hope to have this new website online by the end of February. Stay tuned!
Ron: What is the Scratch license?
John: Scratch is under the MIT license. That means that people are free to use Scratch for any purpose whatsoever, as long as the copyright notice and license remains intact. The license is in the file “license.txt” in the Scratch folder.
Ron: Is the source code of Scratch available?
John: Scratch is a “closed development, open source” project. We plan to make source code available by mid-2007 under the MIT License so that others can experiment with extensions and variations. However, unlike a conventional open source project, we do not seek code contributions from the community. The open-source version of Scratch will be visually different and incompatible with the standard MIT version, to avoid confusion between experimental versions and the standard version.
Ron: When will there be a Linux version of Scratch?
John: We hope to have a Linux version available by the end of 2007.
Ron: Scratch is wonderful fun. It is nice to play with programming constructs by picking up pieces with a mouse. I’m sure that Scratch’s ability to remove syntax and to provide instance feedback will help a number of people learn the concepts of digital media, programming, user interaction and logic flow. Great work!!
You can get your copy of Scratch at: http://scratch.mit.edu/index.html
John Maloney is a major contributor to Squeak. John was the original author of Morphic and is now a Research Specialists for the Medial Laboratory at MIT Media Lab’s Lifelong Kindergarten group.
Ron Teitelbaum is long time Smalltalk programmer. He is President and Principal Software Engineer at US Medical Record Specialists.