It's hard to argue with the importance of teaching students how to use computers -- how to turn on, log on, search the Web, and use applications. These skills are absolutely necessary for students' academic success as well as for their future job prospects.
Being able to use the Internet and operate computers is one thing, but it may be just as valuable to teach students how to code. Giving students an introduction to programming helps peel back the layers of what happens inside computers and how computers communicate with one another online. Programming knowledge, even at a very basic level, makes technology seem less magical and more manageable. Programming also teaches other important skills, including math and logic.
Many students don't have access to computer science courses until college, and that's a missed opportunity to introduce younger students to programming. There are many tools out there that provide a great introduction to computer science for K-12 students, but here are a few of our favorites.
Developed by the MIT Media Lab, Scratch is a visual programming language for children age 6 and up. Since its release in 2007, over 800,000 users have joined the Scratch website and have shared over 1.7 million projects -- from games to animations. That sharing aspect is an important part of the Scratch community, so the projects that are uploaded to the site are licensed under the Creative Commons attribute and share alike license so that others can download and remix them. Scratch is available free of charge and runs on Mac, Windows, and Linux computers.
Alice is a free and open source 3D programming environment designed to teach students object-oriented and event-driven programming. With Alice, students drag and drop graphic tiles in order to animate an object and create a program. A variant of Alice, Storytelling Alice was developed by Caitlin Kelleher as part of her doctoral work in Computer Science at Carnegie Mellon University. By emphasizing animations and social interactions, this approach was found to greatly increase the level of student interest in programming.
Hackety Hack is an open source application that teaches the basics of programming in the popular Ruby language. Hackety Hack offers an interactive tutorial that runs on Windows, Mac, and Linux operating systems. While both Scratch and Alice use a graphical programming language with "blocks," Hackety Hack teaches the basics of Ruby syntax. The tutorial and the text editor are well-integrated, so there isn't any flipping back-and-forth to move between the How-To guide and the actual coding. Hackety Hack gives students a solid foundation in the language so they can quickly and easily start building their own apps in Ruby.
Arduino is an open-source electronics prototyping platform with both hardware and software components. Arduino's hardware is programmed with a language similar to C++, and although it may not be the easiest of entry points for learning programming, there's something about building things that actually move that can be pretty compelling. Projects that use Arduino to introduce children to programming include a modification of Scratch to support simple programming on the Arduino hardware. As Google recently announced that it would allow Android mobile devices to communicate with Arduino hardware, look for more opportunities to work with this platform in the future, perhaps even via the Android App Inventor, a tool that provides a visual interface for building Android apps.
One of the most popular toys in history, Lego may be best known for its brick-building. But Lego Mindstorms also enables robotics-building. Lego Mindstorms' kits -- which can be purchased in educational and consumer versions -- include sensors and motors, and the programming is command-box rather than code programming. The kits come with languages supplied by Lego, but can be modified to work with third party languages. Like several of the tools on this list, Lego Mindstorms has its roots at the MIT Media Lab.
These are just a few of the options for introducing someone to programming. What other languages or tools have you used -- in the classroom or at home?