From coding puzzles to interest-driven projects

Author: Jared O’Leary

Coding environments and curricula with puzzles and challenges often utilize engaging platforms which guide young coders to learn fundamental coding concepts and practices. These environments and curricula often progress from simple through complex algorithmic sequences with clearly defined solutions. This approach not only provides useful resources for young coders new to coding, but for adults new to teaching, facilitating, or evaluating coding classes.

Although approaches with clearly defined solutions are useful, they may give the impression that coding involves finding the right solution rather than understanding there are many potential solutions for most problems. For example, think about how many different messaging apps each of our phones might have. Looking at the messaging apps currently installed on my phone, I can send direct or group messages via Hangouts, Messages, Messenger, PS Messages, RingCentral, or Twitter. Each messaging app solves the problem of sending text and media messages to other people, but each app does so with different features and limitations.

Unfortunately, most puzzle-based coding platforms lack creative applications of code to solve problems with many potential solutions. Instead, creative applications of understanding are confined to dedicated spaces at the end of a sequence of puzzles with one “correct” answer, or are omitted entirely. Further, these platforms often use popular characters or themes from movies and video games to entice kids into learning how to code. While this approach can work for a while, it relies on external motivation as a carrot on a stick rather than allowing a space for kids to use their own interests to drive learning. In addition, it tends to encourage surface level understanding without potential for application of understanding in meaningful coding projects.

While approaches with predetermined sequences and little opportunity for creative outlets can work well for learners who elect to attend a class (e.g., AP Computer Science electives), these approaches do not always work well in a mandated class for learners with no preexisting interest in the subject area. When a class is mandated, a teacher often uses grades as a motivating factor for active participation; however, this approach does not motivate everyone to participate and can often lead to merely completing the minimum criteria.

At Avondale Elementary School District, I designed and facilitated coding classes mandated for all grades K-8. Because the district requires everyone to participate in roughly 48 coding classes each year, I adopted an approach which centered on creating and remixing interest-driven coding projects to create a space for a variety of interests to drive deep learning. Young coders engaged with projects using a variety of programming languages to create music, art, animation, games, stories, or even iPad apps using professional software such as Xcode. Although I developed hundreds of coding projects and resources (which are freely shared on my website), young coders were encouraged to design and propose their own projects of interest. I would often say, “Pick something that’s interesting to you and we’ll find a way to explore that interest with code.”


Image 1: Using Sonic Pi, this young coder recreated her favorite songs from her band method book and was able to combine her passion for music with learning coding fundamentals. Photo used with permission by Jared O’Leary.

Through this approach, coders determine when a project is completed, or switch projects if they lose interest. Although some fear this encourages kids to give up when a challenge is presented, I found the opposite is true. Because coders do not have to worry about solving a problem or creating a product within a fixed timeframe, they can instead focus on taking their time and engaging in something they are interested in. This approach leads coders to work on projects for several classes, while others spend multiple years creating and refining projects of interest.

Facilitating a class with four different programming languages, with upwards of thirty different individual or group projects without fixed deadlines, was tricky; however, seeing the projects young coders created justified the approach. The potential for chaos within such a space can be managed through peer-to-peer coaching and by walking around to ask questions and encourage deeper learning. This approach to interest-driven, self-paced projects without fixed deadlines allowed a space for everyone to learn at their own pace, guided by their own interests.

Playlist 1: This playlist includes a wide range of videos from some of the K-8 classes I worked with. Videos by Jared O’Leary.

Because interest-driven projects have no fixed deadlines, coders who are absent can simply resume their work when they return without fear of missing vital information delivered through lectures on a topic. If a coder joined our district midway through a school year, or multiple years into our coding initiative, they can begin working on projects with complexity relative to their prior experiences. This approach encourages a mixed range of expertise with multiple points of entry at any time throughout a school year.

Facilitating interest-driven projects in K-8 coding classes is a lot of fun, and can lead to more creative expressions and depth of understanding than puzzle-based coding. However, creating and remixing hundreds of projects and resources to support these classes meant I worked seven days a week and through most holiday “breaks.” Fortunately, if you’re interested in project-based learning but don’t have the time to develop a lot of projects and resources, you’re in luck.

This summer I joined a nonprofit as the lead coding curriculum developer and consultant to support more educators and young coders through free projects, lessons, and resources that assist the facilitation of interest-driven, project-based coding classes. We currently have 10 projects for grades K-2 using Scratch Jr. and 10 projects for grades 3 and up using Scratch; however, we have an outline of hundreds of additional projects for future release. Each project includes several days of resources directly aligned with CSTA’s Computer Science Standards as well as the concepts and practices within the K-12 Computer Science Framework. If you’re interested in using the free, interest-driven projects and resources I have developed, or would like to sign up for in-person, customized professional development, click here to visit our website.

Puzzle-based coding environments and curricula often provide valuable resources for a variety of stakeholders new to coding. However, if you are interested in coding curricula which focuses on creative applications of understanding in a variety of interest-driven projects, consider experimenting with the resources mentioned in this post and elsewhere. By finding ways to learn fundamental concepts and practices through the interests of the kids we work with, we may achieve the goal of providing high quality computer science education for all kids in Arizona.

Some resources to get started with interest-driven projects:


  1. Thanks for breaking down the idea of “puzzle-based” approaches to learning introductory coding, Jared! I’ve actually been looking for a way to broadly classify the sequences that provides in some of their Hour of Code challenges, and I hope you don’t my citing you here!

    I’m also impressed by the resources you’ve shared – both through your personal site and your non-profit work – and I’m excited to dig in a little deeper as we continue to tweak our own offerings at the Tempe Public Library.

    I’m curious, though, as someone who’s taken on the role of “slightly-more-knowledgeable” facilitator, rather than CS expert or programming teacher: What have you found to be the 2 or 3 biggest biggest challenges you’ve faced in implementing your approach, and what advice would you give for emerging educators in the area who might face similar challenges?

    1. Thank you, Earl, and sorry for delayed response! I just happened to visit this post today and noticed your comment.

      The biggest challenge for me was having enough resources available for each of the four programming languages available for the coders I worked with to work independently. To get to the point where it worked, I had to not only have the expertise to quickly help in each of the languages/platforms, but needed a wide variety of content for a diverse range of expertise and grade levels. Initially I began by curating resources from others; however, I found the resources were either not engaging for the kids or lacked creativity . . . so I created my own. Because I freely share everything I’ve created, I hope to alleviate the problem I had.

      Which leads to answering your question:

      1) I would say the number one problem is having the time to learn the languages and platforms. I spent many weeknights, weekends, and “breaks” learning the ins and outs of each language/platform as there are little bugs or tricks that are only knowable through extended engagement with a platform. For example, many coders will have their sprites disappear from their screen on Scratch. They’ll try to use show blocks and the sprite still doesn’t appear. For novice coding facilitators, this is perplexing unless you know to look at the XY coordinates of the sprite. Odds are the sprite is simply off the screen boundaries (beyond -240/240 X or -180/180 Y), so setting the coordinates of a “go to” block to 0/0 can quickly fix that problem; however, you won’t know that unless you have a firm understanding of Scratch.

      The best advice I can give for this is to plan to spend a lot of time learning before implementing a new language or platform. The invested time is worth the efforts as it limits frustration for yourself and the coders you work with.

      2) Breaking the initially ingrained habit of coders asking me for help the moment they encounter a bug or have a question. Although there were moments I could have said one simple statement to save a coder a few minutes of problem solving, it was better in the long run to have them work things out on their own or with a peer than to immediately give answers. I would display on the screen the process everyone had to take before they could ask me questions: 1) use the help resources; 2/3) ask two friends for help; 4) If I’m not working with anyone, ask me (otherwise, repeat steps 1-3). If they got to the point where they asked me a question, I would either point them to a peer who I knew could help with their particular question, or use guiding questions to help them work through their problem while encouraging them think through problem solving processes. In time, this wasn’t a problem; however, newer coding facilitators I’ve observed will often have several kids with their hands raised waiting for help rather than figuring things out on their own or collaborating with their peers.

      The best advice I can give for breaking this habit is to create a system where coders work together when they need help, review and practice processes for debugging (for example, debugging exercises – ), and use guiding questions to assist with developing processes for figuring things out.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: