I was recently asked about some programming environments I’ve used with students, and I thought I might as well compile a list of them, as well as some environments I’ve considered using.
Younger students:
- Blockly
(Image credit: BlocklyBlockly is an open-source online programming environment developed by Google. It is currently very much a work in progress, although the language itself seems pretty stable, getting it to a state of usability for a group of students is not for the faint of heart. I mocked up a version of Blockly that resembles some aspects of the Logo programming language that I used with kindergarten students.
- Turtle Art
(Image credit: Sugar Labs)Turtle Art is a derivative programming environment of Logo, having been heavily influenced by the Logo programming language, and developed into a visual block version of it. It is multi-platform, and free to download (well sort of free – you need to email the developers of the program and request a download link for the program). I’ve used it with third and fourth grade students with some success. Turtle Art actually comes installed on the OLPC laptops.
- StarLogo TNG
StarLogo TNG is the extension of the original Logo programming into a 3d world. From their website, "StarLogo is a specialized version of the Logo programming language. With traditional versions of Logo, you can create drawings and animations by giving commands to graphic "turtles" on the computer screen. StarLogo extends this idea by allowing you to control thousands of graphic turtles in parallel. In addition, StarLogo makes the turtles’ world computationally active: you can write programs for thousands of "patches" that make up the turtles’ environment. Turtles and patches can interact with one another — for example, you can program the turtles to "sniff" around the world, and change their behaviors based on what they sense in the patches below. StarLogo is particularly well-suited for Artificial Life projects." - Hopskotch
Hopskotch is an iPad, which is still in development, which allows children to do block programming in a very similar fashion to Scratch, Turtle Art, and other programming environments. I’ve not used Hopskotch myself to verify that it works.
- Scratch
(Image credit: Chris Betcher)Scratch is probably the most well known program for programming with kids. It has the same basic block structure that Turtle Art uses, but it has some additional features (ability to customize icons, object based programming) over and beyond the Turtle Art feature set. It can be quickly used to create simple animations, which is an attractive feature, but I found it harder to create simple geometric shapes than it is with Turtle Art.
- Move the Turtle
(Image credit: Move the Turtle)Move the Turtle is an iPhone/iPad app. It has a feature set very similar to Turtle Art (although somewhat reduced programming functionality). One thing that is compelling about it is that it includes a series of tutorials through puzzles which means that students without the support of a teacher can play around with the puzzles and learn how the application works. Obviously there is a certain amount of playing around necessary with any programming environment in order to learn it, but the tutorials Move the Turtle provides are useful when students get completely stuck.
- CoffeeMUD
(Image credit: Coffee MUD screenshot)Coffee MUD is easily the most difficult of all of the programming environments listed here to set up, and certainly amongst the most complicated environments to use. Coffee MUD is an online multi-user dungeon environment which means that it is both a somewhat collaborative game that students can play (and build their literacy skills in) and create.
How Coffee MUD works is that it provides a server to which each student connects using some client software (recommendation: Jaba Mud client). While playing Coffee MUD, students navigate through a text based world, moving from room to room, and interacting with objects and non-player characters (NPCs) within the game. Many MUDs have no combat at all and have users interact with each other (social role-playing) or with the digital world provided via quests that the users solve.
It also provides a way to interface (through a web browser) to the code that runs Coffee MUD and let trusted users add rooms, objects, and NPCs, as well as add a specialized coding system to allow players to interact and change these objects, rooms, and NPCs during the normal course of play.
One enormous advantage I see with Coffee MUD is that the system is flexible and stable enough to potentially allow an entire school to interact via text in a virtual Coffee MUD world. While obviously this interaction shouldn’t come at the expense of face to face time, it could replace the traditional book report (create a virtual version of the story of the book instead!) or some creative writing time. For example, it would be an interesting interaction of the 7th graders attempt to create a portion of the game that the 3rd graders then play in.
Older students:
- Alice
(Image credit: Alice 3 logo)I’ve not used Alice myself (except in a rudimentary way to test it out a bit), but I have heard some good things about it. One strength is that it relies on building object based programming with students, which is much more powerful and flexible than more traditional procedural based programming. From the Alice website:
"Using an innovative 3D programming environment that makes it easy to create animations or games, the Alice Project seeks to provide tools and materials for a conceptual core of computational thinking, problem solving, and computer programming.
The Alice Suite of educational tools is designed to support teaching and learning across a spectrum of ages, grade levels, and classes in K-12 and in college or university courses."
- Python
Python is both a command line programming language, and a language that can be used to build web applications. Many of the web applications created by Google are powered by Python. It’s not an especially new programming language, but the benefit of this is that there are an awful lot of great resources out there to learn how to program in it. See, for example, this excellent online tutorial.
- Visual Python
From the website for Visual Python (which I have successfully installed and played with myself): "VPython is the Python programming language plus a 3D graphics module called "visual" originated by David Scherer in 2000. VPython makes it easy to create navigable 3D displays and animations, even for those with limited programming experience. Because it is based on Python, it also has much to offer for experienced programmers and researchers."
- JavaScript
JavaScript is actually a pretty difficult language to learn because it requires an understanding of HTML and CSS first. It is probably best learned as a companion piece to making HTML websites more interactive. It also happens to be the base language for the scripting language Google uses for their Google Apps scripting environment, which means that students could potentially learn some JavaScript through programming directly in their browser. Students who want to learn JavaScript will also want to learn HTML, a mark-up language that JavaScript is often used to give dynamic capabilities.
- See also:
Salehen Shovon Rahman says:
This list is a great way to get started on presenting students with different programming environments.
Programming isn’t so much the technical side, rather than the problem solving side. As you start working with different methods to solving problems, the technical bits start making sense. Odd, but true. You hear things like NTFS, and it will sound like yet another piece of jargon to a beginner. But as people starts to work with different data structures as they solve more and more complex problem, they’d know what NTFS is all about, and why do they require defragmenting files in the file system.
With all due respect to the Ministry of Education, their ICT program isn’t ideal for those that are passionate about computer science and software engineering. The ministry should teach either programming, or start introducing students to some basics of computer science, such as set theory, graph theory, and complexity. Maybe, at a grade 12 level, introduce students to limits and asymptotics in order for them to understand complexity. Maybe some statistics would help, too. But don’t worry; all of those topics would be electives.
Anyways, your article is a good start. Much better than talking about teaching MS Office (though, it is pretty important for computer use literacy, but we shouldn’t stop at that and call it “computer science”).
ps. You don’t really need to learn HTML and CSS for JavaScript. Do understand that JavaScript as a language is much, much more different than C/C++ and Java. It’s more similar to Lisp. Better yet, it’s Turing complete, so you can plug the language in just about any environment. This is exactly what Node.js did. If you want, you can try it out. Go over to http://nodejs.org/, install it on your machine, create a new test.js file, add the code `console.log(“Hello, World!”)` (without the back ticks of course), open up a command line window, and type `node test.js`. Boom, JavaScript without the browser.
October 11, 2012 — 8:37 pm
David Wees says:
Thanks for the information about JavaScript. Of course you are right, it’s not totally a browser dependent language but it is browser capable, which makes it easy for students to get started with it, all of their computers come with a compiler installed!
This list certainly isn’t complete. I’m sure there are other languages and programming environments out there which are also excellent places for kids to get started with programming. As for your assessment of the BC Ministry of Education’s curriculum around programming, I agree, it is less than ideal.
October 11, 2012 — 9:54 pm
Lana says:
I’ve just started using the interactive JavaScript tutorials from Khan Academy with my programming students. The presentation is very upbeat and kid friendly. Here’s a link to the first tutorial.
http://www.khanacademy.org/cs/intro-to-drawing/848372201
Students can play around with the code in the left frame and see the changes right away in the right frame.
Like Scratch there are many sample programs to deconstruct.
October 21, 2012 — 2:33 am
Mike says:
Yeap, I’ve also heard about Khan Academy courses and they’re said to be a very high-quality courses. If you should teach a beginner, you should start with game methods to make programming interesting. And then move to more complicated things, because if you’ll start directly from the most difficult parts, your student may say: ” Arhg, what a boring and dull thing is this programmin” 🙂 Good luck and thanks for your article!
November 28, 2012 — 3:19 am
Ian Davies says:
I agree Javascript is a great language for kids to learn. It’s ubiquitous, and it’s C-ish (moreso than Python, anyway).
The problem is that kids have frequently come from something like Scratch where there’s plenty of instant gratification, and plowing through loads of text-mode programming seems a bit dry and unappetizing by comparison.
http://s2js.com is a website that tutors kids in writing games in Javascript to run on their smartphones or whatever else. It explains things in Scratch-terms, and shows how you take the sort of things they already know how to do in Scratch, and achieve similar results in Javascript. It includes a development environment — it’s a bit like Crunchzilla and jsbin joined as one, but pitched assuming Scratch knowledge and not much else. Free, of course.
November 8, 2014 — 11:13 pm
David Wees says:
This seems like a useful resource to bridge the gap between kids learning using block languages and then transitioning to text-based languages. Thanks for sharing.
November 9, 2014 — 6:06 am
Prateek says:
I have created some at http://thepythonguru.com/getting-started-with-python/
August 24, 2015 — 5:13 am