Intro to Computer Science Gives Students the Freedom to Struggle
In our Upper School introduction to computer science classes, students learn the basics of Processing, a programming language similar to Java. But more than that specific language, they learn the developer mindset; a way of thinking that welcomes struggle as part of the process. Students tackle open-ended challenges without a prescribed path to follow, working at their own pace and in their own style. For the final assignment of the quarter, teacher Mr. Alan Kraut gives his students the freedom to design and build their own programs.
What is Processing?
Processing is open source software often used by schools and self-taught students. Designed as a first programming language, it is geared toward creating visual, interactive media. Because of its similarity to Java, a language used by professional developers worldwide, it is a true building block for learning more complex languages.
“The difference between two programming languages is often smaller than the difference between English and French. Learning your first language is much harder than learning the second and once you understand patterns and have a reference point, you can use that knowledge to more quickly learn the next.” — Mr. Kraut
Fundamentals of Programming for Every Ability Level
The goal of this course is to teach students the basics of programming with an overall understanding of computer logic and capabilities. This class also prepares students for success in the advanced placement program for those who are interested in pursuing computer science further. They learn:
Variables and conditionals: elements of procedural logic, “if this, then this” thinking
Methods: organizational techniques for more efficient processes
Arrays: aggregate data structures that are designed to store groups of items — these are like variables that can hold hundreds of thousands of numbers
Although every student in class learns the same concepts, Mr. Kraut emphasizes choice in every assignment. This is critical to successfully teach a class in which some students are learning to code for the first time and others have been building programs on their own for years.
“Even for our normal problem sets, I give students a number of different options to choose from. They can choose to work on a bunch of easier problems or a few harder problems. It’s really about what’s right for them and what they are interested in. It gives them the ability to learn the same things, but in ways that match their style and where they are coming from.” — Mr. Kraut
Putting It All Together
For the final project of the quarter, students synthesize everything they’ve learned thus far and build a program of their choosing. This can be anything from a game to an interactive graphic. And although students have complete freedom in what they choose to create, Mr. Kraut requires a detailed proposal prior to the project start. Proposals include:
A description of what the deliverable will look like
Strategies to scale back if the concept is too difficult
Strategies to augment if the concept is too easy
Beginning, intermediate and final steps for accomplishing the work
Mr. Kraut reviews every proposal and makes suggestions as needed based on each student’s submitted strategies. In this way, he acts as facilitator during the learning process — students develop their own ideas and methods for improving them. It is expected that students struggle through each of these steps. There are no guarantees that their ideas will work. Missteps are a given as they code their designs and each step has an effect on the next.
“This kind of work demonstrates the higher levels of thinking in Bloom's Taxonomy. We are always creating new things; there is very little memorization. It’s all about how fluidly students can use the tools we are learning and how well can they come up with solutions to new problems. That’s something I tell them at the beginning of the class. It’s going to be a struggle, that is just part of programming.”— Mr. Kraut
Collaboration Fosters Innovation
Mr. Kraut’s students have about six class days to develop their programs, with a final day to talk to each other about their work. They talk about the steps they followed, how to program a particular sequence or how to manipulate a piece of code to get the desired outcome. Not only do our students challenge themselves through these projects, they learn from one another.Although there are best practices to follow, there is no single, correct way to complete these projects. Our students share their ideas in much the same way that developers do in the professional world today. In any industry, collaboration moves innovation forward — our students are learning just how powerful this type of cooperation can be.