Environments for Teaching Kids to Program

In 2007 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 at that time.

  • Scratch or Logo for simple projects and younger kids. Both provide simple worlds to explore.  In 2007 there was more material for Logo, but Scratch is “more fun”. In 2024 there is a huge amount of material for Scratch.
  • 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.
  • JavaPython, or Ruby for kids that want a quick path to vocational programming.

In 2024 there is a richer set of options and a lot of good material.

  • Scratch for younger kids wanting to learn concepts and have some fun
  • Scheme for teaching fundamental computer science
  • Python for a quick path to vocational programming
  • JavaScript for people who want to build web or simple model applications. Several of the classes / projects on code.org use JavaScript.

In 2007 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 would have been 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.

The Search

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. Logo is good for a very basic introduction to programming or for exploring mathematical principles, especially geometry. Most logo implementations provide a friendly IDE. A down side, there are no industrial strength logo implementations and the programming model is fairly simple. These days one of the visual “block” oriented languages like Scratch is better for youngsters. While more advanced computer science could be taught in logo, I would recommend using scheme, python, or Pyret.

The Language

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.

Educational Use

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”.

Implementations

  • 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]
  • 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]
  • 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.

Resources

  • The Logo Foundation Resources List
  • All of the web sites listed in the implementation section have links to resources for their specific implementation.

Scheme

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.

The Language

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 33-36 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 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. 

Educational Use

In the early 1980s scheme started to displace Pascal as 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 and the number of schools using Scheme has significantly decreased. I found people whose introduction to computing was by way of the classic introductory SICP textbook tended to have better foundational understanding that the more commonly used textbooks. 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:

Implementation

  • Racket environment provides the best IDE for teaching using Scheme, and several other scheme inspired languages [Freeware: Windows, Macintosh, UNIX]
  • BEE: Decent IDE [Freeware: UNIX w/ Emacs]
  • Lisppad: Simpe IDE [Freeware: Macintosh, iPhone, iPad]
  • LambdaNative: [Freeware: Gambit based which creates apps for iOS, Android, etc]
  • BiwaScheme: [Freeware: Scheme in JavaScript / Your Browser]
  • See scheme wiki’s list scheme implementations for other options

Resources

  • scheme.org is a good place to begin learning about the scheme language

Squeak (Smalltalk)

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 Language

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 popular language in common use. Squeak is a version of Smalltalk which was developed to be a freely available. 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.

Educational Use

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. The 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.

Implementations

  • Squeak [Freeware: Macintosh, Windows, UNIX, PocketPC]
  • Squeakland [Freeware: Browser Helper for Macintosh, Windows]

Resources

Python

Python is a clean language which are easy to learn. Python is popular in the real world for developing web oriented applications, doing data analysis and many other tasks. 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.

The Language

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.

Educational Use

In 2007 material was pretty scarce for teaching python. The only introductory material I was able to find was:

In 2024 there are plenty of materials. From what I can tell, many of the best engineering schools are using Python in their introduction to computer science classes. A few examples

Implementation

  • Python: [Freeware: Macintosh, Windows, and UNIX]
  • PyCharm: Arguably the best IDE for Python. [Free/Paid: Macintosh, Windows, and Linux]
  • ActivePython: In 2007 the best version of Python for Windows. No clue how good it is today

Resources

Java

In the 2000s Java unfortunately has become the most common language used in high schools and for CS1 & CS2 in college and college prep curriculum, though by 2024 it seems like Python is more often the language used in these course. 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.

Language

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 commonly used in industry for the creation of business applications. Java is often used for web based applications which require complex user interaction.

Educational Use

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.

In 2007 some resources for teaching Java to kids (still accessible thanks to archive.org) were

These days, I am sure there are materials that are actively maintained, but I haven’t gone looking for them since I am not particularly fond of Java for instruction.

Implementations

  • 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.

Resources

JavaScript

Will add text shortly.

Language

Educational Use

Implementations

Resources

  • Code on iOS: IDE for JavaScript (and other languages) which runs in iPhone and iPad

Other Languages

  • 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
  • MakeCode: Microsoft’s block system which embeds JavaScript and/or Python providing a nice transition from a block / visual system to text oriented code and can be uses with microbit for bridging into the physical world.
  • Processing: a graphics oriented IDE which execute a graphics oriented language which is built on top of java
  • Pyret: A language in the spirit of Scheme with a Python like syntax with a wide array of instructional material at bootstrampworld
  • 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 originally lacked the 3D rendering. Scratch would be an ideal environment to use anywhere people have historically used logo. Version 1 was built on top of Squeak, Scratch has been rewritten in JavaScript and happily runs in a browser.
  • Small Basic: Free language from Microsoft based on the original basic running in a .NET framework. Just 14 imperatives. Designed for kids.
  • Stagecast Creator: No longer around. Several junior high girl’s schools seemed to be using 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]

Around 2007 there were a few discussions I found about educational programming languages including Don’s Box discussion on teaching younger kids to program and lambda’s follow-up. Some other idea could be found in kidsdomain list of programming languages and the Educational programming languages article on wikipedia. Microsoft has a “kid’s oriented” coding4fun section of MSDN.  I am sure there are more up-to-date resources now.

Additional Information

Active Research Programs

Interesting People

Other Information

Other Information (from 2007)

Posted Under: tech

Leave a Reply

Your email address will not be published. Required fields are marked *