Academic Program
Upper School

Computer Science

Computer Science

Believing in the strength, intellect, and vitality of women in computing, the Computer Science Department teaches students how to leverage the power of the computer to implement algorithms for solving problems and engage in creative self-expression.
Through the iterative process of design, experimentation, and revision, students develop resilience, computational expertise, and innovative thinking. We offer a semester-long elective, as well as a sequence of rigorous, yearlong courses in computer science and engineering.

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, inheritance and polymorphism

    Students will explore various algorithms for searching and sorting data. Algorithms will be constructed to solve problems from a variety of applications such as geographic path routing, operations research, and games. Students will develop a technical definition for what it means for an algorithm to be efficient and also understand the limitations of what can be computed. Data structures - such as linked-lists, stacks, queues, and trees - 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. Grades 10-12. Prerequisite: Computer Science I or equivalent experience. Yearlong course.
  • 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