My ten year old daughter asked me to help her learn to program. It’s not that she’s interested in computer science, it’s that she knows that programming is required to create games and other things that she has imagined. I investigated a multitude of languages / environments. The following is what I decided would be the best languages for instructing kids:
- Scratch or Logo for simple projects and younger kids. Both provide simple worlds to explore. More material for Logo, but Scratch is “more fun”.
- Alice for children who want to tell stories through created worlds. In particular, Alice has been used very successfully with middle school girls. The environment uses a drag and drop editor to drive an animation 3d world.
- Squeak (smalltalk) for older kids whose focus is building artifacts more than programming.
- Scheme for kids focusing on learning computer science. The kids can focus on CS principles rather than syntax. Scheme can be used to teach a number of programming styles.
- Java, Python, Ruby or KPL for kids that want a quick path to vocational programming.
I decided that Squeak was best option for my daughter, especially using the ReadyPC environment from Squeak: Learning to Program with Robots and that it had an Alice like Wonderland environment. After we started, it has become clear that Alice is a better choice because she is more interested in storytelling than creating artifacts. There are also a number of other other noteworthy languages that I considered, but I rejected them for various reasons after a brief investigation. Others might find these languages useful for their needs.
Years ago I was inspired by the book Mindstorms which made the case to use computers as a tool for students to explore and learn rather than merely an automated tool for rout memorization or for teaching computer science. In the early 1990s I helped run some classes in Scheme and Logo that focused on discovery and creativity. I figured there had been a lot of advances in the last ten years. So I started by looking for projects which were not just teaching kids to program, but were using computers and programming to help kids explore the world around them. I guess I wasn’t looking in the right places, because I had trouble findinga lot of people doing interesting things. I have recorded what I discovered in the additional information end the end of this document.
I spend some time trying to find what languages / environments and curriculum were being successfully used with kids. The rest of the document details what I found. For each language I have recorded my biased assessment of it’s pedagogical value, small bit about the history of the language, educational material / practices I could find, a summary of possible implementations to use, and a list of additional resources. I believe the best environment would provide minimally:
- Simple, clean, powerful language
- Easy to use IDE
- Quick development cycles with direct commands
- Easy access to graphics… want near immediate feedback
Logo was designed from the ground up for use as a pedagogical tool and is very easy to learn. Most logo implementations provide a very friendly IDE. On the down side, there are no industrial strength logo implementations for large scale projects and the programming model is fairly simple. I would recommend logo for a very basic introduction to programming or for exploring mathematical principles, especially geometry. While more advanced computer science could be taught in logo, I would recommend using one of the other languages.
Logo originally designed at MIT in the early 1970s as a educational tool for children. Logo itself is a functional language which is normally implemented as an interpreter within an interactive environment. All logo implementations to my knowledge provide a read, interpreter, execute loop which allows the direct entry of expressions as well as the creation of functions and provide turtle graphics makes it extremely easy for kids to immediately gain visual feedback for the programs they create. Logo hasn’t changed significantly over the years though a number of logo implementations have taken the 2d graphics “world” of turtle graphics to much richer “worlds” which support 3d graphics, animation, and/or music.
Through the 1980s logo was the premier language and environment for thoughtful education. There is a reasonable body of research, curriculum, and tools for someone wanting to use logo for instruction and exploration. There were a number of MIT-AI memos about logo. The Logo Foundation continued to generate educational resources as well as often workshops to help teachers better use logo in educational settings. Today, Logo is typically used as a tool to explore topics such as geometry rather than a way to teach “programming”.
- Computer Science Logo Style. first year computer science curriculum in three volumes by Brain Harvey
- Elica: seems to be the richest freeware Logo which is currently available. If you use Windows and don’t want to spend any money, then I would recommend Elica. Elica has supports several microworlds including fairly decent 3d graphics. It has been localized for a number of languages and has excellent online documentation. [Freeware: Windows]
- LCSI Microworlds: seems to be the premier commercial logo. The staff of LCSI have been near the center of the logo community since Seymour Papert help found the company. In recent years the LCSI has updated their implementation for the 21st century including the support of richer “worlds”, robot systems such as Lego mindstorms, and publishing and sharing projects via the web. [Commercial: Windows, Macintosh]
- Terrapin Logo is a “classic” logo implementation. Many children used terrapin logo on Apple IIs and later IBM PCs and Macintoshes. In recent years Terrapin updated the UI to confirm more to the native OS GUI and added support for lego mindstorm. [Commercial: Windows, Macintosh]
- UCB Logo: As close as you will find to “classic logo” which will run on just about any machine. Provides basic logo with turtle graphics. Has been ported to a number of platforms. [Freeware: DOS, Windows, Macintosh, UNIX]
- aUCBlogo, mswlogo, and fmslogo are updated versions of UCB logo which support Windows functionality such as direct access to the GUI and other OS functionality. Some function names have been changed from classic logo, for example “forward” is now “fd” [Freeware: Windows]
- For other options see a list of logo software.
All of the web sites listed in the implementation section have links to resources for their specific implementation. At some point I might update this section with implementation neutral resources.
Squeak provides an extremely rich development environment. The down side of squeak is that the complex environment is fairly different from everything else. The Smalltalk language also uses a moderately complex syntax which is quite different from most other languages. So the learning curve is more than say scheme, and the learning invested into learning Smalltalk is unlikely to transfer to other languages. Even with the extra complexity I would recommend using Squeak to explore general topics, building multi-media projects, or creating simulations because the environments richness offsets it’s idiosyncrasies. I would recommend using some other language if you want to focus primarily of computer science.
The Smalltalk family of languages that was developed at Xerox PARC. The original versions of Smalltalk was designed to teach younger children. Over time Smalltalk evolved into an extremely rich programming language and environment designed for professional programmers. Smalltalk is a purely object oriented language and the environment is also written in Smalltalk. The syntax is quite different from every popular language currently in use. Squeak is a version of Smalltalk which was developed to be a freely available multi-media environment. It’s extremely powerful, complex, with a GUI interface which doesn’t follow the native windowing system user interface guidelines. It is easy to change and evolve Smalltalk, yet little has been changed since 1980. Hopefully more people will start to work on Squeak and take it to the next level.
Squeak and tools built on top of squeak seems to have taken up the “premier educational tool” mantle from logo in the educational research community. There was a nice article/interview about squeak published in technos. Best best place to find information about using squeak for education will be found at Squeakland. If you click on “download” you will find a repackaged Squeak designed to make it easier for kids to get a good start by hide some of the environment’s complexity.
- Powerful Ideas in the Classroom by B.J. Allen Conn and Kim Rose. Short text designed for elementary age kids. Gets them started using the Squeakland environment and with etoys components.
- Squeak: Learn Programming with Robots by Stéphane Ducasse seems to be the best text for teaching programming which would be appropriate for late elementary or middle school students.Old Miner follow-on to “Robots” will take students into more advanced topics.
- Squeak [Freeware: Macintosh, Windows, UNIX, PocketPC]
- Squeakland [Freeware: Browser Helper for Macintosh, Windows]
Scheme is well suited for classic computer science education. The scheme language is clean and simple. I would recommend considering scheme for teaching computer science material because the student can focus on the core concepts they need to understand without spending a lot of time thinking about the language they are working in. Scheme can be used to explore more general topics, though logo or Squeak might be better choices for this sort of use.
Scheme is a language rooted in the Lisp community which was originally designed to explore Carl Hewitt’s theory of actors as a computing model. [See Evolution of Lisp, see page 17-20 for a brief explanations of scheme’s history]. Scheme has exceptionally clear and simple syntax and semantics making the language very quick to learn. You will find that the full description of scheme is very concise and extremely readable. Yet, scheme supports a wide variety of programming paradigms, including imperative, functional, and message passing styles. With additional libraries it is possible to explore object oriented, meta-object, and aspect orient approaches.
In the early 1980s scheme started to displace Pascal as the the language of choice for computer science education in progressive schools. For a short time I had hopes that Scheme might become the dominate instructional language, but that didn’t happen. There are still numerous high schools and colleges that use scheme for instruction. There are several reasons why scheme is ideal for teaching introduction to computer science materials. There are several excellent college level textbooks for teaching computer science in scheme as well as a number trade texts. The two most popular texts these days seem to be:
- How to Design a Program: Gentle introduction to programming
- Structure and Interpretation of Computer Programs: Landmark, hardcore CS textbook from MIT
- DrScheme environment which is found in of plt-scheme. A really good IDE for instruction [Freeware: Windows, Macintosh, UNIX]
- EdScheme: Commercial scheme IDE. For instructional use, I think DrScheme is superior. [Commercial: Windows, Macintosh]
- BEE: Decent IDE [Freeware: UNIX w/ Emacs]
- XS: scheme for lego mindstorm robots
- See schemewiki’s list scheme implementations for other options
Python is a clean language which are easy to learn. Python is popular in the real world for developing web oriented applications. Given many kids’ desire to create cool web pages, there is a nature drive which can be harnessed for educational purposes in python. The downside of python is that there isn’t a really great, kid friendly, IDE.
Python is a dynamic language designed for the creation of scripting and applications in a variety of domains. Python was built for working programmer, but due to the clean design, are well suited for educational uses. Python has a rich library and an extremely active community.
I don’t know of any good instructional material designed to use python as a vehicle to explore the world or teach programming.
As far as I can tell, Java is the most language of choice for CS1 & CS2 in college and college prep curriculum. On the plus side, java has become a popular vocational language and has a rich and growing set of libraries. The downside is that there is a large learning curve, students typically end up focusing a large amount of time on learning the libraries rather than focused on creating unique / new code, and the develop/test/evaluate cycle is slow compared to the environments provides by most of the other languages in this list.
Java was original developed to be a working language industrial strength applications and operating systems incorporating features found in a number of languages and making up for some deficiencies found in C++. Java is the first language to win a large popular following which has a garbage collector, modules, a decent type system, exception handling, and a clean object system. Java is community used in industry for the creation of business applications. Java is often used for web based applications which require complex user interaction.
There are a wide variety of text books and curriculum for classic computer science education in Java, especially at the college level. Sometimes Karel the Robot or Alice are used at the beginning of a course to provide an easier framework for programming. Once the core concepts related to computing are understood, the students switch to using Java. I would strongly recommend starting students out with Karel or Alice if students have no past programming experience.
- bluej: One of the best IDE for instruction due to it’s simplicity
- Eclipse Seems to be one of the most popular IDE for Java. Industrial strength used by many professional developers.
- java se (used to be java jdk) is simple but feature poor
- java studio creator from Sun
- Sun’s Java Homepage
- Sitraka makes some useful tools for Java hackers
- Processing: a graphics oriented IDE which execute a graphics oriented language which is built on top of java
- AgentSheets: Disovered this recently. Looks like a pretty cool environment for building simulations. A lot of kids want to make games and this would be a good environment to do that in.
- Alice: Uses a drag and drop editor to drive an animation 3d world. A number of universities are using Alice to help student understand the core concepts found in CS1 before working in Java. Alice like functionality has been added to Squeak as Wonderland. Can be pitched as a tool for storytelling to folks who aren’t excited about programming.
- C#: Not significantly better than python or java with less instructional material
- Factor: Forth meets lisp. Interesting system but doesn’t seem to be as easy to use as some of the other systems I are considering.
- Forth: In the days of small memory, slow machines I would have considering Forth… but these days it makes sense to use a more advanced language that is memory safe
- Greenfoot: A set of java objects that produce an object oriented, graphical environment for kids to build tools and explore. The authors suggest that it offers the best of the object interaction of BlueJ with a microworld which provide visualization like Karel the Robot.
- Guido van Robot: Logo with python syntax. Designed to be a easy way to get into python, much like Karel the Robot was an intro to Pascal.
- Haskell with pan#: Pure functional language. Pretty cool for CS, but steeper learning curve than I would want for younger kids.
- Karel the Robot: Originally a gentle introduction to Pascal from CMU. Multiple forms of Karel have evolved over time. Search the phrase karel the robot for a variety of resources.
- KPL: Kid’s Programming Language: looks like a simplified version of Visual Basic meets C# which Microsoft is promoting for use with first time programmers / kids. As you might expect, KPL was build in Visual Studio in C# and is tied pretty solidly to Microsoft’s .NET framework. Don’t expect KPL to run on anything but Windows. Think of KPL & C# as being the proprietary equivalent of Karel & Java. [Freeware: Windows]
- Kodu: logo meets video games
- love2d: gaming engine + Lua
- ML: Never have been a big ML fan.
- Prolog: Logic programming too limiting
- RCX: Visual programming language for Lego Mindstorms. Build programs on the PC and then execute them on a mindstorms robot. Somewhat limited, but you do get to build and control robots. Mindstorms are not cheap.
- Ruby: Materials in python are more developed but it seems like Ruby is catching on. One nice thing about Ruby on Rails is that very sophisticated applications can be created with little effort. You can take advantage of the auto-magic at the beginning and the progressively have the students learn what’s happening under the covers. hacketyhack was been constructed to provide newbies with a friendly environment.
- Scratch: Drag and drop interface where you plug actions, controls, sensors, etc together to control sprites and environments. Easier to use than Alice, but lacks the 3D rendering. Scratch would be an ideal environment to use anywhere people have historically used logo.
- Small Basic: Free language from Microsoft based on the original basic running in a .NET framework. Just 14 imperatives. Designed for kids.
- Stagecast Creator: I have not looked closely at this, but my daughters school seems to like it.
- Toontalk: First-person-ish environment which using direct manipulation to interact with the virtual world. I would think building anything substantial would be quite tedious. [Commercial, Windows]
For a discussion about educational programming languages check out Don’s Box discussion on teaching younger kids to program and lambda’s follow-up. Some other idea can be found inkidsdomain list of programming languages and the Educational programming languages article on wikipedia. Microsoft has a “kid’s oriented” coding4fun section of MSDN.
Schools with Interesting Looking Programs
- Los Angeles Open Charter Magnet School
- http://www.microworlds.com/links/index.html (to be investigated)
Active Research Programs
- Life Long Kindergarten @ MIT Media Lab
- Brian Harvey: Influential in the logo community
- Alan Kay: Inventor of Smalltalk and highly involved in multiple educational projects
- Yasmin Kafai: Professor at UCLA
- Symour Papert: Inventor of Logo and highly involved in constructionist education
- Randy Pausch: Entertainment / storytelling / world creation
- Mitchel Resnick: Researcher at MIT Media Lab
- edutopia.org technology integration and biglist of technology integration
- guidetoonlineschools.com’s educational-technology
- Media Computation Teacher’s Website
- Lego Mindstorm: Lego robots. Cool!
- Pico Cricket: components to make fun and interesting artifacts
- Handy Cricket: Small micro controller
- Discussion Thread about toontalk & logo which was quite interesting
- readwriteweb 4 more tools for teaching kids to code