We at U Prep are partway through the redesign of the school’s computer science program, to reimagine it as the study of foundational principles of computational thinking, accessible to all students regardless of prior background, and inclusive of highly engaging specialities such as robotics and website development.
The full plan includes three computer science elective classes, the integration of computer science activities into required middle school classes, and advising student clubs in robotics and other technical pursuits. This way, we will give all students the opportunity to do computer science and also provide those interested in further study an array of engaging opportunities at more and less technical levels.
While we put the full plan into place, we decided to offer a computer science course to students this year, even though our new model was not yet fully developed. Student interest was very high, and teaching a class would give us first-hand experience with developing curricula around these new principles. We staffed the course by hiring a subject-matter expert to partner with me as the experienced teacher. At the same time, we began the search for a full-time computer science teacher for next year.
We designed the course to teach fundamental concepts in algorithmic processing and data structure design through programming activities, so that students would receive explicit instruction in foundational principles of computer science while also learning programming skills. Programming was the most common learning activity, and key concepts included use of functions to repeatedly perform tasks, thinking logically and sequentially, breaking a problem into smaller parts, and figuring out how to organize real world data into structured elements. We made explicit links between the problems students were solving and the underlying concepts and thinking skills that are used throughout computer science.
Most class time was spent writing code to solve specific problems, small ones at first and larger ones later. Students analyzed grade level enrollments, Sounders FC player salaries, and animated bouncing balls and streaming bubbles. Each activity built up students’ understanding of programming constructs, input and output, functions, parameters, and return values, conditionals and loops, arrays and objects, speed and memory usage, and more.
Students completed both a substantial individual project and a self-designed group project. In each, we explored how to analyze a real-world problem and design a solution, how to create, test, and refine software, and how to bring a project to completion. The group project introduced new dynamics: how to share, divide, and reconcile project design and development tasks among team members, and how to use an online, collaborative development environment to work on a project within a team.
Students also completed an individual research activity, in which they found and interview a computer science professional and made a short presentation to their classmates. This helped broaden students’ concept of what it means to do computer science work. Not all interview subjects were software developers, and a number applied computer science to other fields. Students learned that computer science is useful in all pursuits.
Practice with arrays, objects, Canvas, loops, and functions