Scratch, Squeak, Alice and Go -- programming for kids, adults and everyone else

Does the world need a new beginner's programming language? In the 1960s, BASIC, FORTRAN, LISP and ALGOL were the primary introductory programming languages. In the 1970s and 1980s, Pascal, C, Smalltalk and Scheme were the teaching programming languages of choice. In the 1990s, the object-oriented languages including Object Pascal, C++ and Delphi were used by students and developers. In recent years, some schools have added the managed programming languages of Java and C#.

The "best, first programming language" discussion has continued among professors and practitioners and will probably continue for years to come. Should we teach one of the following programming pedagogies: declarative first, imperative first, objects first, or functional first? Do we need a new beginning programming language? My answer is "yes", and the more programming languages and tools we have to introduce programming to kids, adults and everyone else, the better.

Does the language need to be "big" with a large feature set, complex set of libraries and a runtime system? Jon Bentley, author of the "ACM Programming Pearls" columns and books, gave one of my all-time favorite keynote speeches at one of the first Software Development Conferences in San Francisco and talked about the usefulness of "little languages" [Jon Bentley, Little languages, Communications of the ACM, 29(8):711--21, August 1986.].

Let's take a quick look at four alternatives to the mainstream programming languages that we use today: Scratch, Squeak, Alice and Go (which, put together, may sound like the name of a Saturday morning cartoon show):

Scratch —

The precursor to the Scratch programming language was work that MIT did for Lego to create the Lego Mindstorms programming system. Scratch was created to allow young (and young at heart), beginning programmers to create applications, games, animations and interactive stories. It also was created to help teach math and computational lessons. Scratch was also designed to foster collaborative work. Three words define the goals of Scratch: imagine, program, share.

Scratch provides visual programming constructs and blocks for building program logic and flow. To create programs, you just snap together blocks. The blocks have different shapes and colors so that syntax and data type errors are avoided. Programs are created from stacks of the blocks. Along the way, Scratch helps programmers learn about loops, conditionals and event-driven programming.

Scratch is written in Squeak (more about that in a moment) and is an open source project. Downloads are available for Windows (Windows 2000, XP, Vista, Windows 7) and Mac OS X (10.4 or later). There are many excellent and thought-provoking research papers on Squeak available. If you are a teacher, the Scratch team provides ideas, how to get started and an online educational community.

I find it hard to describe the Scratch "language" and programming in words (I've had my Lego Mindstorms robotics kit for years). The best way is to download Scratch and see for yourself.

Squeak —

Squeak is an open-source implementation of Smalltalk that was started as a research project inside Apple Computer. Squeak was created by a core team that included Alan Kay, Dan Ingalls, Ted Kaehler and Scott Wallace. Squeak's development system goals included user interface prototypes, creating educational software and implementation of many ideas envisioned by Alan Kay in his Dynabook project.

Squeak includes the Smalltalk-80/ANSI Smalltalk X3J20 programming language, base libraries and the development environment and is portable (the virtual runtime machine is written in Squeak). Squeak runs on Windows, Mac OSX, Linux/Unix and OS/2 Warp. As I mentioned earlier, Squeak was used to create the Scratch programming system. Squeak was also used to create the Etoys system that helps children learn by playing with a simulated world.

Squeak includes a virtual machine, Smalltalk class libraries, multimedia extensions, 2D and 3D graphics and video support. The Squeak development environment, in addition to the Smalltalk language support, has more than 600 add-on packages that extend the language. The Squeak wiki is available at

Alan Kay said about Squeak: "The real romance is out ahead and yet to come. The computer revolution hasn't started yet. Don't be misled by the enormous flow of money into bad de-facto standards for unsophisticated buyers using poor adaptations of incomplete ideas."

Alice —

Alice, named for the main character in Lewis Carroll's "Alice in Wonderland, is a three-dimensional programming environment in which you drag and drop graphic tiles to create programs. The graphic tiles are the statements for the programs. Alice has been used to create interactive games, animations and videos. The interactive environment allows you to directly manipulate and test the objects and programming statements.

The Alice programming environment was designed as a gentle introduction to object-oriented programming and allows beginners, programmers and non-programmers to learn the basics of automation, multimedia, and program logic.

Alice was developed by a research team led by Randy Pausch. The project started at the University of Virginia and then moved to Carnegie Mellon University. Three design goals drive the development of Alice: teach programming theory, support object-oriented and event-driven development and to encourage storytelling.

Alice runs on Windows (2000, XP, Vista, Windows 7), Mac OSX 10.3 and higher, and Linux. Alice is an open-source project; you can download the program and the source code from the Alice web Wite.

Go —

Created at Google and recently open-sourced, Go was created by Robert Griedemer, Rob Pike, Ian Taylor, Russ Cox and Ken Thompson (with contributions from many other developers). Go was created as an easier language for system programming. Go's designers focused on creating a language that is a balance between efficient compilation, fast execution and ease of programming. Go combines the ease of dynamic typing with the speed of statically type languages and supports concurrency and garbage collection.

Go's syntax I based mostly on C and the Pascal family of languages (Pascal, Modula and Oberon). Go also provides concurrency support using ideas from C.A.R. Tony Hoare CSP (Communicating Sequential Processes). According to the Go Web site, "It is a new language across the board. In every respect, the language was designed by thinking about what programmers do and how to make programming, at least the mind of programming we do, more effective, which means more fun."

There are two compilers for Go: gccgo (a front-end for the GCC compiler), and 6g (not GCC linkable). The compilers can generate 32 and 64 bit x86 and ARM code. The runtime performance is "typically within 10-20% of C). For garbage collection, 6g has a mark and sweep implementation (the team is working to implement the ideas in IBM's Recycler). The gccgo does not have a garbage collector but will use the next generation collector that the team is building.

You can read more about the Go language and the differences between Go and C at Go language design FAQ. The general FAQ is available at Rob Pike presented a one-hour overview of the Go programming language, available on YouTube or as PDFs). From the slides, the Go goals are safety, good support for concurrency and communication, efficient latency-free garbage collection and high speed compilation.

Do you have another favorite programming language and environment for beginning programmers? Post a comment.

Programming is Life!

Recent news for developers:

David Intersimone (David I) is the Vice President of Developer Relations and Chief Evangelist for Embarcadero Technologies. My company blog is at

Computerworld's IT Salary Survey 2017 results
Shop Tech Products at Amazon