This past semester, I took an introductory Python course with roughly fifty undergraduate and a handful of graduate peers. The course—“COMP 10: Computer Science For All”—was designed specifically for non-computer science majors. As a researcher exploring coding and robotic technologies for young children, I hoped the experience could provide me with perspective on foundational principles of computer science (CS) and how students from different disciplines approach this topic.
Novice-friendly courses like COMP 10 are popular at higher education institutions. Some students need the course credits to fulfill a degree requirement. Others are interested in the topic and enroll to decide whether to pursue it further. And many students feel it’s a necessary rite of passage in their pursuit of learning because the course, while discipline-specific, uncovers a fundamental set of concepts and skills that everyone can and should learn. As a researcher, I find this last reason particularly interesting.
In my doctoral work with the Tufts University DevTech Research Group—a research lab focused on how new technologies that engage children in coding, robotics and making can play a positive role in their development and learning—I explore how parents and teachers introduce these technologies to young children. Before enrolling in this Python course, I tinkered with simple block-based programming tools, such as ScratchJr and KIBO robotics, and guided parents and teachers through using them with children. I was intrigued to learn whether the practices and approaches used to teach CS in grades K-2, which is my area of focus, would be in any way similar to those at the university level.
With the increasing push to create and adopt K-12 CS standards across the country and the growing popularity of CS courses in higher education, I wondered whether taking COMP 10 would make me think differently about what it means to teach and learn coding. Though the motivations and tools used to introduce computer science concepts in kindergarten differ significantly from those at the undergraduate level, I was surprised to find three key takeaways that are universally compelling for CS education across all ages and especially for our early learners.
1. The social-emotional aspects of programming are as important as the content knowledge.
As a COMP 10 student, I spent many hours furiously staring at my screen, wondering why my program wasn’t working or why I lost multiple points for missing one little piece in my code. The frustration of not being able to debug an error was very real. At the same time, the joy I experienced from finally getting it right was just as emotional.
In addition to providing coding instruction, computer science curricula—especially for children—should be designed to support character and identity development and should provide opportunities to build and reinforce character attributes such as persistence, patience and collaboration. For example, teachers should encourage students to talk to one another about different debugging strategies, reframe frustrating moments as a time for critical thinking and build classroom culture by sharing and celebrating student work.
At DevTech, we use the Positive Technological Development (PTD) Framework, which leverages decades of research on positive youth development and offers clarity on how technology, such as coding and robotics programs, can be used in the classroom to promote positive behaviors.
In my Python course, there were a variety of strategies my professor used to promote these behaviors. During in-class activities, we often collaborated in pairs or small groups. Teaching assistants moderated an online discussion forum through Piazza, an online community building and discussion platform, and held recitations, which enabled students to ask questions and ponder ideas. There were also a number of online communities where Python users could post excerpts of code and answer each other’s questions. These strategies helped me feel less alone during periods of frustration or struggle.
2. Thinking about thinking is hard, but it’s a skill that can be developed.
Programming goes beyond telling a computer what to do. It involves complex cognitive processes of understanding the task at hand, making a plan for delivering instructions to the computer that will be carried out systematically, executing the plan and reflecting on whether the produced output matches the initial goal. This iterative process of thinking, planning, executing and reflecting is then repeated until that goal is met.
Though the process became easier as the course progressed, it was challenging for me and pushed me to reflect on how we teach young children to think in these ways. Although it may seem like this level of thinking is too much to grasp for a 6-year-old, young children can and do engage in similarly complex ways of thinking. For instance, children work on identifying patterns in math lessons, engage in iterative writing and revising activities during writer’s workshops, and break down multi-step directions to play games in gym class. This thinking can be further enhanced with programming environments that are well-designed and developmentally appropriate for young children.
Part of what makes computer programming so daunting is the misconception that things happen “magically” or “under the hood.” That just isn’t the case—different parts of a computer system have different purposes and work together to make the machine function. Tangible tools such as robotics kits can help young learners link these seemingly abstract concepts to the real world. Manipulatives or programming blocks enable children to visualize their thinking by physically laying their ideas out in front of them. Put simply, what you see is what you get. Seeing and touching the blocks and assembling them in a particular sequence helps foster algorithmic and modular thinking, among other important skills. Even more importantly, it develops an understanding of how to communicate with a computer using its language, not our own.
3. The art and power of coding resembles the art and power of literacy.
There are various reasons for teaching computer science, but one approach that has gained traction is the idea of coding as a literacy. Annette Vee, an associate professor and the director of the Composition Program at the University of Pittsburgh, researches the various intersections among literacy, composition and technology. In her presentation of the history of treating programming as a mass literacy, she suggests that programming and literacy have faced similar historical trajectories and questions what aspects might be lost when they are framed as professional activities, accessible to only a few.
My Tufts advisor Marina Bers, who co-developed ScratchJr and KIBO robotics programming platforms, has similarly challenged the narrative of coding as solely being a problem-solving activity. Alongside the members of our research lab, she has been exploring how teaching CS in early childhood can extend beyond STEM and parallel the educational process of teaching foundational literacy skills. What resonates from our lab’s research, and from my Python course, is that coding and literacy are artistic and powerful forms of communication and creative expression.
In 2018, Kira Baker-Doyle, an associate professor and the director of the Center for Literacy at the University of Illinois-Chicago, wrote an essay on her experience taking a Java course. She reflects on her final project, saying, “I no longer felt I was learning to read and write commands and scripts. I felt that I was learning how to make tools for social change.” I admit that my reactions were not nearly as strong when I submitted my own final project. However, after spending over 15 hours to create a Python flashcard deck (a task that would’ve taken 15 minutes to create with markers and paper), I could still relate. There was a level of satisfaction I felt about having attained the knowledge with which I could create meaningful artifacts, and a sense of curiosity about what else I could make. If I felt this way, then what might young children experience when they are learning to code? Imagine the excitement in a classroom where young children watch their robots dance on their classroom floor, moving the exact way they had programmed them to do. It’s pretty powerful.
In the last decade, learning computer science has shifted from a “nice-to-have” to a “must-have,” but there is a lot to consider about teaching CS starting in kindergarten. In her book “Coding as a Playground,” Bers writes, “In today’s world, those who can produce digital technologies will do better than those who can only consume them.” Although this statement isn’t as dramatic as author and documentarian Douglas Rushkoff’s “Program or Be Programmed,” it does beg the question of what level of priority CS should take in our education system.
For students, is learning to code simply a means of checking off a box for degree requirements? For educators, is teaching CS simply a means of fulfilling state-mandated standards? Or are we trying to get at something bigger, something more universally applicable and accessible? If so, then I’ve definitely learned one thing from this course: I should have started coding earlier.