 Let's start with young students. One of the key ideas of programming is sequencing or putting instructions in a specific order. Using little programmable robots called b-bots, for example, very young students can pretty easily program all the series of moves and turns to get through a maze or grid. And it's this simple idea of sequencing a set of instructions that's fundamental to the idea of coding. Although I really like the idea of programming real physical objects like robots, if you have access to iPads, there's a couple of apps that can help your kids learn these same core ideas of sequencing. So b-bots, for example, is also available as an iPad app. And just like the actual toy robots, it requires younger students to carefully think through the steps for getting through a series of increasingly complicated mazes. And the higher levels actually get quite challenging. Similar to this idea is Daisy the Dinosaur. It's a simple programmable game that challenges students to sequence the movements of a cartoon dinosaur character to step and jump and spin and turning the sequence of algorithms into a game. Now taking this idea a step further, it's codable. And this game presents students with a similar series of challenges to sequence their way through maze-like pathways. However, codable introduces additional coding concepts such as branching and looping. And these ideas of if-then decision-making and iterative repetition are fundamental to creating code. Once students grasp these concepts, it paves the way for developing more complex programming. Once students grasp these key ideas, sequencing, branching and repetition, it opens the door to a number of other interesting coding tools for young minds. And the best known of these is probably Scratch, an amazing visual programming environment for kids developed at MIT. With Scratch, students can snap together simple colored blocks to create algorithms and with a bit of experience and thought, they can actually express some quite complex ideas in code. I'm a big fan of Scratch myself, and I believe it's something that all young students should get a chance to delve into. Now this idea of assembling visual blocks of code is used in a number of other programming environments, too. Tinker, for example, uses the same kind of idea of blocks that snap together, and although it isn't free-like Scratch, it offers an interesting built-in learning curriculum and a unique set of tools for teachers to monitor student progress. For iPad users, it's worth taking a look at hopscotch. Hopscotch uses visual code blocks, just like Scratch, that can be assembled together to form sequences and instructions. And although it has a limited range of blocks compared to something like Scratch, the fact that it makes use of the touchscreen and the accelerometer in the iPad opens up some really interesting possibilities for creative programming ideas. And then there's Blockly. Now Blockly is a Google code project, and it uses similar visual blocks of code that snap together to solve a number of coding challenges. You can load, play, and even hack a number of pre-made projects in Blockly, so it's great for deconstructing code. And Blockly actually forms the basis of Android App Inventor, which we'll talk about a little bit later. Then there's StarLogo. StarLogo takes the concept of turtles from the original logo programming language developed by Seymour Pappet, and it supercharges it with a whole lot of options for complex programming. And again, it uses this idea of snap together blocks to develop flow and logic in the code, and it starts to integrate some quite complex mathematical thinking. As you look at all these different tools, you start to realize that the ideas behind coding are not that difficult. Sequencing, branching, looping form the basis of so many problems that can be broken into algorithms. And of course, it gets much more complex, but you'd be amazed at how much can be achieved with just these few simple ideas and a bit of maths and logic thrown in. Coding is all about solving problems, breaking them down into little steps and designing step-by-step solutions to deal with them. Once you start to develop the skills and understanding of coding, you might want to get your kids to start looking at tools like Alice. Alice lets you create instruction sets to control 3D models. It can be a little bit daunting at first, but really it works on exactly the same principles and ideas of most of the simpler coding tools we've already mentioned. Kodoo is from Microsoft, and it's another 3D animation tool, kind of similar to Alice in the way it lets you put coded instructions behind 3D characters. And it's useful for developing storytelling and animation-type projects. GameSalad provides an environment for building game-like programs that can be easily turned into apps for iPhones and iPads. It introduces the concepts of object-oriented programming, which form the basis of more serious programming languages later on. If you have access to Android devices, you should check out Android App Inventor, also from MIT. It's based on the same code blocks used in Blockly, but it includes a module for defining the buttons, forms and the user interface elements for the device's screen. And once the screen elements are laid out, they're then wired up with functions to make them do things. Students can build simple Android apps very quickly, and once they get the hang of how it works, it's possible to develop some very interesting app ideas that can be coded up and then made available in the Google Play Store for Android apps, all at no cost. And some kids will find that very motivating. If you have the hardware to go with it, Lego Mindstorms Robo Lab lets you program robots made with Lego. And these robots, based on Lego's NXT or EV3 units, are a great fun to build and program, and there's tons of resources and tutorials online, as well as a thriving RoboCup culture of competitions and challenges all over the world. Robotics seems to really motivate kids, I think because it forms this really tangible bond between the coded instructions and an actual physical object that responds and reacts to its environment. All of these environments we've mentioned have one very important feature in common. Not only do they allow you to create code that gives a predictable result, but they also let you see how the code was created. If you see someone else's program, so in Scratch for example, you can not only run the program and see its output, but more importantly, you can get inside it and see exactly how it was put together. In the programming world, this idea is known as open source, and the ability to see each other's code to learn from it, copy it, remix it, and share it forms a fundamental part of the culture of programming. In coding, you learn from each other, and it's this social aspect of coding that's really important. So far, most of the coding tools we've talked about have not really required your students to write code, because they let kids just drag blocks around and arrange things into sequences. It's possible to learn an awful lot about coding without actually needing to develop a deep understanding of programming structure or language syntax. However, once your kids grasp the core ideas of coding, many of them will actually want to go further and learn a real programming language. And there are literally hundreds of programming languages, but the best ones for anybody wanting to learn would probably be Python or Ruby. And both these languages are free, they can be installed onto personal classroom computers or laptops, and there's a lot of resources online for learning how to use them. In the classroom, it's worth taking a look at Ruby for Kids, which will step you through the basics of programming with Ruby. If you decide to learn Ruby, it's also a good idea to take a look at Hackity Hack, an online interactive tutorial to help you get up and running fast with Ruby. If you prefer Python, but you have kids with iPads, you can even get Python for iOS. It's available in a number of versions, so whether you want to learn to use the classic Python 2.7 version or move on with the latest 3.x versions, you can get either. It's pretty cool that you can actually do serious programming on an iPad. And because Python isn't incredibly popular as a great first language to learn, there are tons of online tutorials and websites that teach you how to get started. If you really want to do some serious coding and you're on an iPad, you should look at Codea, an absolutely amazing coding environment that runs the Lua programming language from South America. Lua is yet another possible language your kids could learn, and it seems to have clean syntax and would be similar to learning something like Python or Ruby. Codea has powerful code completion and syntax correction built into it, so it's much easier to learn, and it lets you build some amazing games. Check out the included programs to get a taste of what's possible with Codea. Or try playing Cargo Bot from the Apple App Store, a game built entirely in Codea. And if you want to see how Cargo Bot was created, the open source code is available inside Codea, and amazingly, all of this is available on an iPad. And if those languages are not enough for you, there's always Dart, a programming environment created by Google. It's powerful, flexible, relatively easy to learn, and it produces output in JavaScript with plenty of built-in libraries and APIs that take full advantage of the web. For your students who really want to geek out on this stuff, there are plenty of great choices. Of course, this level of coding might not be for everyone, but it certainly is for some. There are kids who absolutely come alive with this stuff, who are incredibly passionate about it. And as teachers, it's good to know this stuff exists, so that we can at least connect our kids with these tools.