Interest-Driven Projects in Computer Science
“Computer science is a good place to try out failure,” Laura Manor explained at lunch one day recently. In leading computer science at Long-View, Ms. Manor teaches an academic discipline that’s much newer than math, literacy, and other sciences. Consequently, the field has fewer well-defined benchmarks and task sequences for primary-aged learners than others, and a wealth of opportunities for all ages of learners to attempt ambitious projects that may or may not reach their targets or result in a polished end product.
As we described more fully in a post from last year, in the sequence of CS content at Long-View, newer learners begin with exploring computational thinking – the concepts and practices that underlie computer science – sometimes without even opening a laptop until months into the school year. As they gain experience in the discipline, Long-View learners build a flexible understanding of computational thinking and gain more experience with the mindsets that prepare them to take on extended projects in a variety of programming languages, for a variety of purposes. These extended projects — sometimes tackled individually and sometimes collaboratively — are ripe with opportunities to “try out failure.”
The projects pursued over the last months by learners in Crimson Band – generally, this year’s most experienced Long-View learners – exemplify this spirit of intellectual risk-taking. Crimson Band learners designed these projects themselves from start to finish. The process went from a brainstorming stage, to a proposal (with feedback cycles), and then into seven work weeks. Throughout, learners broke down their projects into discrete tasks by utilizing a scrum board. This management system provided a learning opportunity in itself, as those who thought through larger problems and separated them into smaller parts experienced less struggle during the seven weeks working to bring the project to completion.
Since Ms. Manor is not dictating topics for the advanced learners to pursue, she doesn’t always have a deep background in every problem they face. “And that’s okay,” she said, “because I am learning with them and showing them what it is to learn. They’ll come to me with a problem and I don’t know the answer, so we’ll do the debugging together.” This work is often complex: “it’s not going to take two minutes, it’s going to take some time.” When learners see that there’s usually not a formula for solving all the problems they encounter, it changes the way they view computer science.
Here on the blog, we’re featuring three of these projects to demonstrate the range that Crimson Band learners have explored. As with any group at Long-View, choice means that learners can explore complexity in different areas according to their interests and skill sets. While one learner’s CS project might be mathematically more complex, another might be more concerned with creating a public-facing product that accomplishes a clear-cut, real-world goal, and still others lean in to how a team of designers can break down a project into interlocking tasks.
Project 1: Individual work on two different aspects of a Python-based platformer game, initially developed in collaboration
Last spring, Reese and Euan developed a Python-based platformer game together. The duo had become increasingly aware of the time they were spending simply copying and pasting lines of code to design the placement of blocks in each level.
For his individual project this fall, Reese addressed this problem by creating a program with a graphic interface where the user uses a mouse to ‘draw’ different elements of the game onto the grid. When the user saves their creation, a CSV file is created with a numerical value associated with each square of the grid. The user can also upload a certain level back into the application to edit in the future. His code can be found here and a short video of the program’s functionality can be found here.
Euan also decided to iterate the game for his individual project. The experience gained last year was evidenced by his ability to immediately jump back into the code and add new features. This is a credit to the organization and readability of his previous code, as well as his deepening familiarity with the Pygame library. His goal for this iteration was to add new features to the game, such as portals and enemies. As he adeptly explained when presenting his code to the class, the idea for the implementation of the portal came from an existing respawn feature. Similar to how the character respawns after dying, the portal simply respawns the character next to a different portal.
Project 2: A website to promote emerging artists
Combining her love of art and her budding interest in web design, Amelia chose to build a website dedicated to emerging artists in Texas. Amelia began the project with a small amount of experience with HTML, the standard markup language used on the internet, but no background in CSS, which is used to style the HTML. To ensure success, Amelia took the time to find tutorials and resources that would support her in completing each of the features she planned to include in her website. Amelia’s finished product foregrounds the art itself through its simplicity of design and user-friendly navigation.
Project 3: Analyzing and editing code to understand the mathematics of ray tracing
Margot had her eye out for a project that was mathematically interesting and chose to work on a project involving ray tracing. Initially, Margot had very little background knowledge in linear algebra or image generation, but as she moved toward completion, her newfound understandings were evident both in her program as well as her succinct description of her project:
“Ray tracing is a method of generating an image where the camera, the light source, and the objects are all given a set position in your scenario. Next, to calculate the light and shadows, the program sorts through each pixel on the screen to calculate if a ray going from the camera through that pixel will hit an object on the scene. If that ray does hit an object, the program will calculate whether that ray would bounce off the object and hit the light source. When this is the case, that part of the object is in light. If not, it will be in shadow. This makes for a more efficient image rendering, since only the light that will intersect the scene is taken into account instead of all the light created by the light source. The program will calculate the color of each pixel on the screen depending on factors including whether or not it is in shadow.”
Margot began by studying a working example of ray tracing in Python that she found during the research phase of the project. Once she had a grasp of the code, she made edits to test her understanding. For example, she added the ability to edit the background color of the code in addition to adding some terminal-based user input for certain variables. When reflecting on her experience, she named learning the math as the most interesting part of the project.
As these projects demonstrate, computer science is not a set of preordained problems; it’s a set of tools that learners can wield to meet objectives as diverse and ambitious as their imaginations will permit them to envision. And as Laura Manor often says in Crimson Band and in other classes, “Let’s use this tool to DO something.”