Academic Program
Upper School

Computer Science

Computer Science

The Computer Science Department believes that all students can become proficient computational problem solvers. Borrowing from George Pólya’s seminal book, How to Solve It, we teach students a computational problem solving process involving four steps: understanding the problem, formulating an approach to solve the problem, implementing a solution to the problem with a computer program, and verifying that the computer program performs as expected.
A computer program is a pattern of rules specifying a process to be carried out by a computer. We view functions—transformations of input values to an output value—as the building blocks of computer programs. Given the centrality of the function, we teach students how to plan out and develop functions systematically. We gradually introduce new programming language vocabulary so that students can more fully express their thinking and solve increasingly complex problems. To this end, we engage in the iterative practice of writing, testing, and debugging computer programs.
Students build proficiency through small, targeted assignments and apply their knowledge and skills on larger projects, which are done in both collaborative and individual configurations. It is our hope that the projects students complete serve as digital artifacts they are proud of, find meaning in, and use to deepen their understanding.

Upper School Computer Science Curriculum

List of 5 items.

  • Data, Algorithms, and Us

    We live in a digital age where we regularly interface with systems that collect and process data. This course equips students to ask questions about data. How is data collected? How can it be manipulated to benefit some groups of people and disadvantage others? How can it be used to effect positive change? In this course, each student forms their own questions about the world around them, analyzes relevant data using computational techniques, and reports on their findings. Key programming concepts, including algorithms, functions, conditional statements, and loops are studied. Students will program in Pyret, a language designed for learners that facilitates computation on tabular data. We also explore emerging technologies that often pose as objective or scientific and interrogate the outcomes we see in practice along the dimensions of bias, equity, and privacy. Grades 9-12. Semester-long course.
  • Computer Science I

    Computer Science I is a technical introduction to computational problem-solving and computer programming. Students learn how to design algorithms for solving problems and implement them using the Python programming language. Foundational programming constructs are explored, including variables, decisions, loops, and functions, which enable students to construct programs of increasing sophistication. Students also learn how to manage the complexity of the programs they write by employing the fundamental principles of modularity and abstraction. Programming projects provide students with opportunities to apply their learning to problems that naturally arise in data analysis, simulations, and robotics. Grades 9-12. Yearlong course.
  • Computer Science II

    Computer Science II builds on the foundational principles and practices explored in Computer Science I. In particular, this course is about computational problem-solving and is focused on three primary themes in computer science:

    1. the design, implementation, and performance of algorithms
    2. the implementation and use of data structures for storing, retrieving, and manipulating data
    3. object-oriented programming, including the concepts of abstraction, encapsulation, and inheritance

    Students will construct algorithms to solve problems from a variety of applications such as games, simulations, path finding, and closest location finding. Students will explore various algorithms for searching and sorting data, and they will learn ways to compare different algorithms which solve the same problem. In particular, students will develop a technical definition for what it means for an algorithm to be efficient. Data structures - such as linked-lists, stacks, and queues - will be studied in the abstract, and different implementations of each data structure will be analyzed in order to explore performance trade-offs. Introducing the object-oriented programming paradigm will allow students to build complex software in a modular fashion. By the end of the course, students will possess a rich toolset of concepts and techniques for designing, implementing, and analyzing solutions to computational problems.

    Prerequisite: Computer Science I
  • Advanced Computer Science: Computing Systems

    Computing Systems explores the enduring computer science principles that govern the interactions between the hardware and software components of a modern computer. Starting with elementary logic gates, students will build a general-purpose computer that can compile and run their own software. Along the journey, students will learn how to break down complex problems into manageable components and develop large-scale hardware and software systems. Through the hands-on process of constructing their own computer from the ground up, students obtain a deep, integrated understanding of how a computer works. Grades 11-12. Prerequisite: Computer Science II or equivalent experience. Yearlong course.
  • Advanced Computer Science: Algorithm Design

    How does GPS navigation software find the quickest route between two locations? How are online purchases made secure? How do biologists determine genetic similarity between two species? The answers to each of these questions reside in algorithms: recipes that describe computational processes. In this year-long course, students learn how to approach and solve messy problems with algorithmic solutions. This involves getting to the mathematically clean core of a problem and identifying the appropriate algorithm design techniques based on the problem’s structure. It involves analyzing the performance of a solution and proving its correctness. Students also learn how to identify problems that are computationally intractable, providing an invitation to explore approximation algorithms, heuristics, or tractable special cases. Grades 11-12. Prerequisite: Computer Science II or equivalent experience. Yearlong course.

Explore Our Curriculum

A K-12 independent school in New York city, The Spence School prepares a diverse community of girls and young women for the demands of academic excellence and responsible citizenship.


© 2023 Spence School