Curriculum Guide

STEM and Computer Science

Computer Science Electives

Minor electives are meant to be taken in addition to a full course load of five major courses. Students who would like to take two minor courses in the same semester must submit a petition for an additional minor course (see appendix for petition process).

Introduction to Computer Programming in Python (0.25 credits, minor, spring, pass/fail)

This course provides students with a strong foundation in the basics of computer programming and algorithmic thinking. Through a series of exercise sets, activities, and programming projects (both group and individual), students will learn the fundamentals of mathematical operations, boolean logic, binary and hexadecimal number systems, data types, variables, functions, conditionals, iterations, objects, user input, graphics, and other programming constructs. Students will also consider the role of computer science in society and be exposed to various applied domains of computer science, as their interests dictate. Time permitting, a brief module on web development may also be included. This course is intended for students with no background in programming or students with a little experience who wish to learn the basics of programming syntax through the Python language. Open to students in Classes VVII. 

Object-Oriented Design Patterns (0.5 credits, minor, fall)

This course introduces students to the organizing principles behind large-scale programming endeavors. Based on the concept of “design patterns,” the common structures which serve as the basis for building large object models, this course builds skills necessary for implementing software solutions at a scale needed for the large data sets that emerge in real-world settings. Emphasis will be placed on the relationships and coordination between individual components of a more substantial project. Topics will include objects, classes, inheritance, interfaces, and polymorphism. Students will work both independently and collaboratively on projects which provide context for the more abstract programming skills as well as contribute to a larger collaborative final project. Context for projects is guided by student interest, while involving working with publicly available data and building applications to interact with that data and solve a problem. This course is intended for students with some experience in programming but not familiarity with any particular programming language. Open to students in Classes VI–VIII. Prerequisite: Coding For Embedded Systems (Class II) or Introduction to Computer Programming in Python, or permission of the instructor. 

Algorithmic Thinking for Functional Design (0.5 credits, minor, spring)

In this semester elective, students will learn the fundamentals of modern Computer Science through the lens of a cross-platform programming language. Students will learn the syntax of the language by reviewing the basic concepts of variables, data types, flow-control, and method abstraction. Alongside the coding syntax, students will also practice project planning using pseudocode and flow-charts to describe algorithms and then translate between those algorithms and computer-code. Once foundations are established, students will learn modern computer science paradigms, leveraging internet-connected data sources and parallel processing. Open to students in Classes VI–VIII. Prerequisite: Coding For Embedded Systems (Class II) or Introduction to Computer Programming in Python, or permission of the instructor.

STEM Electives

Minor courses are meant to be taken in addition to a full course load of five major courses. Major courses are meant to be taken as one of five major courses in a student’s course load each semester. Students who would like to take two minor courses in the same semester or six major courses in the same semester must submit a petition for an additional minor course (see appendix for petition process).

Minor Electives

Coding For Interaction (uncredited, minor, fall, pass/fail)

“Interactive Computing” means coding the programs that you want to use, so you can do things better—in your daily life, for your research, in your career, to make your art, and in almost any pursuit. Students will learn to write code to process inputs ranging from the text of the book they’re reading to the data spreadsheets from a science project, from the images on a camera to the clicks of a customer. Then, students will gain experience in analyzing and manipulating (or creating) such sources, with the power and speed of a computer. Students will learn to write code for GUIs (the interfaces which a user sees and uses), media, visualization/experience, web connectivity, etcetera so that they are prepared to write the applications that help them do more. This class will follow the interests of the students and work with real-world parameters, according to the needs of a researcher, gamer, patient, accountant, student, traveler, artist, etcetera—any person who could benefit from having a computational tool in their life. Open to students in Class V. This course meets one period per cycle and is uncredited. 

Class VII & VIII Major Electives

Information Science: Data, Computation, and (Artificial) Intelligence (0.5 credits, major, fall)

With the advent of modern AI, we are witnessing the receding boundary between human imagination and computation. Information science is the lens through which we can understand “thought” and “meaning” in relation to algorithms and data, tackling that which comprises the fabric of our experiences, enabling us with the tools to model observations and to generate new insights, and reframing other sciences as the physically manifested interplay of information systems. The course begins with topics like Turing machines, entropy, signals, logic, statistics, and boolean networks; it continues to model dynamic systems in biology, chemistry, and physics; and then it culminates with neural networks, machine learning, and artificial intelligence. Cognitive science, philosophy of mind, and the history of brain evolution guide us with questions and frame our goals. Along the way, a lab component gives students a chance to apply concepts and produce a final product in machine learning, artificial intelligence, or a synthesis of earlier course topics.

Engineering Design I (0.5 credits, major, spring)

Students will collaborate to engage the principles and methods of engineering design through a variety of projects that emphasize rapid prototyping with embedded systems, electronics, CAD, programming, and mechanical actuation. They will also learn methods of fabrication—including 3D printing, laser cutting, and machining—and explore design thinking. Tasks involve constructing and optimizing special-purpose machines or devices in a cycle of prototyping, construction, and evaluation. Course projects revolve around a new central topic each year. Class VII students will be given priority for enrollment in this course; however, Class VIII students may enroll, pending its ability to be scheduled. This course meets at the same time as Engineering Design II. 

Engineering Design II (.5 credits, major, spring)

An extension of Engineering Design I, this course emphasizes the integration of hardware and software to further student experience with programming, microcontrollers, electronic circuitry, sensors, motors, and methods of prototype fabrication in a systems context, while engaging more deeply in the process of design thinking. Engineering II students also take on greater responsibilities in project management and coordinating team logistics. Assignments result in the construction of intelligent machines to address practical, scientific, and social challenges. Each year, the course revolves around a new central topic. The world is subtly teeming with such machines, and it is the goal of this course to empower students with the methods for understanding and shaping such a world. Prerequisite: Engineering Design I. This course meets at the same time as Engineering Design I.