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.

  • Computer Programming Principles

    This semester-long course explores a subset of the Computer Science I curriculum, with a focus on the fundamental concepts and skills needed to compose computer programs. Students will learn how to work with variables, conditional statements, loops, and functions in the Python programming language. In addition to developing proficiency with computer program implementation, students will build skill at testing and debugging the computer programs they compose. To bridge theoretical concepts with physical application, students compose programs for the Micro:bit, a microcontroller equipped with various sensors and output components. Furthermore, the curriculum addresses the role of emerging technologies; students will engage with a generative AI model to critique machine-generated code and develop effective prompting strategies.
  • Computer Science I

    This semester-long course explores a subset of the Computer Science I curriculum, with a focus on the fundamental concepts and skills needed to compose computer programs. Students will learn how to work with variables, conditional statements, loops, and functions in the Python programming language. In addition to developing proficiency with computer program implementation, students will build skill at testing and debugging the computer programs they compose. To bridge theoretical concepts with physical application, students compose programs for the Micro:bit, a microcontroller equipped with various sensors and output components. Furthermore, the curriculum addresses the role of emerging technologies; students will engage with a generative AI model to critique machine-generated code and develop effective prompting strategies.
  • Computer Science II

    Computer Science II (CS II) builds on the foundational principles and practices explored in CS I. In particular, CS II is about computational problem-solving with a focus on low-level representation of data, recursion, object-oriented programming, computational complexity, and data structures. To better understand how computers work, students learn how all data is represented in binary and discover how boolean logic allows for computational decisions to be made. Investigations into recursion reveal how breaking down problems into self-similar ones can yield concise and elegant algorithmic solutions. Students formalize what it means for an algorithm to be efficient and observe the limitations of what can be computed. Data structures such as linked-lists, stacks, queues, and graphs are studied in the abstract and different implementations of each data structure are analyzed in order to explore performance tradeoffs. Introducing the object-oriented programming paradigm allows 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.
  • 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. 
  • Advanced Computer Science: Artificial Intelligence

    How does a computer learn to play chess, sometimes better than an expert human opponent? How does ChatGPT answer your questions (or produce nonsense)? This course explores foundational principles and algorithms in modern artificial intelligence. Students will study topics such as search problems, machine learning, neural networks, large language models, and natural language processing. Students will complete programming projects that build on their foundation in Python. In addition to computational projects, students will have opportunities to study ethical considerations and current events regarding AI.

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.

212-289-5940


© 2025 Spence School