Today was my first week teaching a six-week coding project with multilingual first graders, and it went so well I wanted to share it with you straight away! I’ll update with future lessons as they happen. My students are emergent English-Chinese bilingual, so although many are language learners, they are not all English language learners. However, these lessons could easily work within an EAL or monolingual classroom. At this school, I teach my lessons in English, with Chinese language support from the class’s Chinese teachers. This first lesson can be taught anywhere, as it requires no technology beyond a piece of paper and a pencil.
Today’s learning outcome: Anyone can code!
Each week, we will focus on a different learning outcome to help us understand who software engineers are and what they do. This week our main learning outcome is that anyone can become a software engineer, even first graders! I told the students that today they would learn the basics of software engineering by learning to program a ‘robot’. Click ‘anyone can code’ on the left to get a printable pdf of all of my learning outcomes for this unit.
Step 1: Turn students into ‘robots’ and ‘engineers’
I got the idea for this lesson from Dr Techniko, who wrote a great blog post about teaching students to program without computers. I asked one student to volunteer as my robot. I wore an ‘engineer’ sticker, and my student wore a ‘robot’ sticker. I explained to the class that I have a simple problem: I want the ball from the other end of the classroom, but I am too lazy to go and get it. To solve my problem, I decide to program my robot to fetch the ball for me. However, because robots can’t speak English (or Chinese!), I need to write instructions in a language that the robot can read. I can then give my instructions, or program, to the robot to follow.
Step 2: Learn to use robot language
My student robot can only understand simple commands, such as walk forward one step, walk to the left one step, walk to the right one step, walk backward one step, pick up object, and put down object. I displayed my robot commands on the board next to me. I asked the students to help me write a program that would direct the robot forwards to pick up my ball, and then backwards to bring it back to me. Together, we wrote the program on a piece of paper and gave it to the robot to run. It took several attempts of trial and error to get the right number of steps. Then I picked two new students and assigned them the roles of ‘engineer’ and ‘robot’. This time, the engineer had to write a program for the robot to pick up another ball from the other side of the classroom, but this time there was an obstacle in the way! The engineer had to instruct the robot to navigate its way around a chair in order to reach the ball. This one took a lot more trial and error, but our engineer solved it in the end.
Step 3: Design your own program
Once students were understood the concept of writing programs for each other to run, I paired them up and gave each pair a clipboard, a ball, and a set of obstacles. I made obstacles such as ‘mountain’, ‘black hole’ and ‘lake’ out of shapes of colored paper. Each pair took it in turns to act as the robot or the engineer, and program each other to navigate their way through the classroom to pick up and retrieve objects. I was amazed that within only ten minutes, students started thinking ahead and asking me about the ways they could improve their code, leading us straight onto step 4….
Step 4: Develop your code to tackle different problems
After several turns of playing ‘engineer’ and ‘robot’, my first graders were hungry for more. One student wanted to know if she could add to the robot language by including a command to turn around. Another student wanted to know if there was a way to avoid writing the ‘step forward’ symbol 10 times. We re-grouped to discuss ways to further develop our code. The students came up with new commands for ‘turn around’, ‘reach up’, ‘reach down’, ‘jump’, and ‘speak’, so we added them to our list of robot commands. We also decided that instead of writing the command ‘step forward’ ten times, we would just write the number 10, followed by the step forward command. This made it much easier for students to write more complex programs for their robots to follow. Before long, student robots were not only retrieving objects, but were dancing, jumping, and spinning around. We were all sad when it was time to tidy up for the day!
In our next session, we will be taking what we’ve learned and applying it to Kodable, a great free iPad app that teaches children the basics of coding. Kodable follows many of the same principles that we learned in our engineers and robots lesson, by having students use visual blocks to write instructions to move a character through a maze. Continue to Computer Science for first grade part 2: Kodable and Fuzzes!