The last time Hackerfall tried to access this page, it returned a not found error. A cached version of the page is below, or click here to continue anyway

Making block-based coding more intuitive for young children

Block-based programming environments like MITs Scratch and Googles Blockly have been successful in introducing coding to children in classroom environments. Developers of Scratch, Mitch Resnick and the MIT Media Lab, have done outstanding work in lowering the floor for learning computer programming by encouraging tinkerability and removing syntax requirements.

Organizations like advocate for computer science to be taught in all classrooms. Systemic change is slow, however, and not all students, especially those who live in underserved communities, have access to schools that teach it. Studies have shown that children (notably girls) lose interest in STEM subjects in middle school, and we think its important to introduce these concepts early in elementary school.

At Wonder Workshop, our goal was to make block-based programming fun and accessible for children ages 7+ without the help of adults and to provide a high ceiling that would engage children progressing to advanced concepts. When we put Scratch and Blockly in front of children without any directions, many of them struggled to get started. We knew that we had to improve the user experience and refine through user research.

Using a robot helps in making learning to code hands-on and fun for young children. We made our interfaces visual so kids could easily make connections between what they were building and how it would be expressed in the real world. Coding, by nature, is open-ended, free play. However, learning requires scaffolding and a need for guided play. Our focus was to keep cognitive load for children low, and this informed our design choices at every stage. Finally, we applied these learnings to some of the more advanced concepts such as variables to bring them to children ages 9 and older.

Using a real-world robot

Many of the math prerequisites in Scratch such as cartesian coordinates, negative numbers, and percentages are not introduced until 5th grade, making it difficult for younger children to get started. In primary grades, children are still learning with their eyes and hands, drawing, molding, and manipulating objects. At this age they are starting the tough transition to learning by reading.

Having robots to work through problems visually helps many children with complex concepts. Programming a robot has tangible, observable effects. Testing the robots code can be done in a hands-on way with visual results. Robots are also a fun way for children to apply and experiment with concepts that they are learning.

We chose to develop a robot with expression and personality so that children can relate to the character. Instead of having to plot coordinates on a grid, for instance, children can put themselves in the position of the robot and think about how they would walk to a certain location in the room. In our basic blocks, we avoid using negative numbers, percentages, or fractions. We use language like forward, backward, turn left, turn right, look, hear, and say so that children can relate to the commands they are sending to the robot.

Visual representations of abstract concepts

When we introduced Blockly and Scratch to 6 and 7 year olds, they struggled with the open-ended inputs for distance, angles, speed, and direction. These environments allow children to type in any number as an input. Many of the children were new to these concepts and didnt know what values were acceptable. They also didnt know how these values would translate to what the robot would do.

In our basic blocks, we created visual inputs that helped bridge abstract concepts with the real-world outputs. Here are some examples of how we surfaced speed, direction, angles, and sensory events.

Visual inputs for angles, speed, and events.

Balancing free play with guided play

Like Scratch, we created a open-ended sandbox environment that allows children to move at their own pace and create their own projects. They had a lot of fun with movements, sounds, and lights in our initial user research sessions. However, we found that it took them a long time to start experimenting with key concepts of programming such as loops, algorithm design, events, and conditionals. The level of understanding varied widely from child to child when they were working on their own. They also did not come up with a wide range of creative uses for the robots without adult help.

In addition to the open-ended programming environment, we created puzzles that teach the concepts of coding through playful project ideas. We provided scaffolding for the content by limiting the number of blocks that could be used, introducing one concept at a time, and explaining new concepts the first few times they are introduced (such as how to trigger sensors on the robot).

These project ideas givechildren a starting point to exploring the possibilities of what they can create with our programming environment. At the end of each puzzle, we give them ideas for how to extend their knowledge and tinker with their programs. We tested understanding by asking them to come up with new ways to apply the concept they just learned. They came up with a wide range of project ideas and were able to customize their programs.

Puzzles with scaffolding and hints for beginners.

Reducing the number of choices kids have to make

Throughout our design process, we wanted to reduce the cognitive burden of having a large number of options to choose from. Too many options in Scratch and even some Blockly interfaces sometimes discouraged exploration and caused stress in users in unsupervised environments. We limited the number of choices in each category (drive, look, light, sound, control, variables) to 7 possible choices.

We were able to cut down the number of choices by incorporating options into the edit block interface. Each block was a standalone entity, and there are not pieces that could be added to blocks like there are in Scratch and Blockly. This both reduced the cognitive load in making choices and made it easier for children to physically edit blocks on a touch interface without losing parts of it.

Introducing variables

In our efforts to make our programming environment more intuitive to children, we lowered the ceiling of what they can do with the robots. We introduced variables to give children more control and surface more advanced programming tools. We created a separate section for variables and execution blocks that use variables because we didnt want to distract novice users with these features.

Children are usually not introduced to variables until 6th or 7th grade in school, so most of our users hadnt used variables before. We provide puzzles that teach the basic concepts and give examples of how to use variables, but we also made the user interface more intuitive and user friendly. We limited the number of variables that could be used in any project to a manageable number that also allowed powerful programs to be created. We also didnt require users to name their variables. This made it easy to get started and tinker with variables.

In our user research, children often got lost when there were multiple input sources of numbers and operations in different categories. In Scratch, there are over 30 inputs that you can use to set a variable. The inputs for a variable exist in the motion, looks, data, sensing, and operations categories.

Setting variables in Scratch

Since variables were a new concept, we streamlined everything kids need to set and operate on a variable into one interface. While this means that you cannot combine multiple operations into one block, it is much easier for children to work with. We determined that nearly all uses of variables with the robots were numeric in nature, so we simplified the interface by limiting the variable values to numbers rather than adding other data types such as strings, arrays, booleans, and so forth. Below you can see the interface for setting a variable and using a variable in an if statement.

Setting variables in Blockly for Dash & Dot

We are excited for children around the world to try this new version of Blockly for Dash & Dot Robots that allows children to use coding as the building blocks of their own creations. Independent learning allows kids to build confidence and gain access to computer science education even if their school doesnt teach it. Through programming, children can change, shape, and re-imagine the world around them, giving them the power and confidence to follow their own dreams.

Thanks to the following organizations that helped us with our research: The Childrens Creativity Museum, The Tech Museum of Innovation, Steve and Kates Camp, The Carey School, Joaquin Miller Elementary School, Laurel Elementary School, Barron Park Elementary School, Ravenswood Schools, Gideon Hausner Jewish Day School, Peak to Peak Charter School, and AltSchool

Continue reading on