Course Offerings

Introductory and advanced topics

AI: Prompts, Pixels, and Power

AI tools can now write your essays, generate images from a sentence, and hold conversations that feel disturbingly human. You’ve probably already used them. But do you know how they actually work? Do you know who built them, what data they were trained on, and who benefits when you use them? This course takes AI seriously in three ways: technically, critically, and creatively.


Computability and Logic

In 1936, Alan Turing wrote a paper that invented computer science. Not a piece of computer science, not a contribution to it. The whole thing. On Computable Numbers, with an Application to the Entscheidungsproblem asked a question that nobody had thought to formalize: what does it mean to compute something? And in answering it, Turing proved something that most people find shocking.

CS2: Designing Worlds

How do you design a world when you don’t know in advance how much is in it? A snake eats and grows longer, segment by segment. A fleet of alien invaders fills the screen, each one tracking its own position and trajectory. A dictionary contains a quarter of a million words, and your program needs to search through all of them. This course teaches you to build programs that work correctly no matter how much data shows up.


Introduction to CS 2: Algorithms and Application

Embark on a deeper exploration of computer science, where the focus shifts from programming and foundations of computer science, to the intricacies of algorithms and their real-world applications. This course reinforces and builds upon the concepts introduced in Introduction to CS 1, and provides an introduction to algorithm design, data analysis, and the practical application of computational techniques.

Systems 1: Hardware Architecture and Design

Have you ever wondered what a computer is and how it actually works? In this course, we’ll answer the hardware half of this question. Working from the ground up, we will start with basic circuits and develop elementary logic gates. Taking these gates as our building blocks, we will construct the core components of a modern computer. Our journey will culminate in using machine code to control the computer we have designed.

Introduction to CS 1: Programming and Computer Science

Have you ever imagined speaking in the language of computers, and transforming your ideas into actions that computers can perform? This course is a gateway to discovering the art and science of program design, a skill that serves as the backbone of computer science. But computer science transcends mere program design. Our actual aim is to nurture your ability to think like a computer scientist.

Data Structures and Algorithms

How do we organize data to solve complex problems efficiently? This course studies the fundamental structures and algorithms that form the cornerstone of computational problem-solving. Building upon the programming foundations established in CS1, we will explore how algorithmic thinking and sophisticated data organization enables us to tackle increasingly challenging computational problems.

Modern Logic

Formal logic is the study of the structure of reasoning itself—how arguments are built, when they succeed, and why they fail. In an age of information overload, knowing how to dissect an argument, detect reasoning errors, and construct rigorous proofs is a superpower. This course introduces the foundations of formal logic, with an emphasis on precision, clarity, and critical thinking tools. From everyday statements to abstract puzzles, you will learn how to translate ideas into symbolic form and test their validity.

AI and Ethics

If you had a robot who always tied your shoes for you, would you ever have learned how to tie your shoes yourself? What about if that same agent did all your arithmetic and all your writing, and eventually shaped all your decisions? The promise of AI is fraught with ethical questions that strike at the very heart of what it means to be human and to act as a moral agent in society. It reveals a fundamental tension between what AI can do and what AI should do. In the modern world, that tension is growing.

Introduction to CS 2: Algorithms and Application

Embark on a deeper exploration of computer science, where the focus shifts from programming and foundations of computer science, to the intricacies of algorithms and their real-world applications. This course reinforces and builds upon the concepts introduced in Introduction to CS 1, and provides an introduction to algorithm design, data analysis, and the practical application of computational techniques.

Computability and Logic

This is not your typical class in computer science, or in formal logic; but you will learn a lot about both by taking it. Our subject will be one of the most important and influential papers that has ever been written—“On Computable Numbers, with an Application to the Entscheidungsproblem,” by Alan Turing. This is the paper that birthed computer science as a discipline. Understanding it requires that you be comfortable with some mathematical concepts (powers and roots) and with thinking abstractly; but the most important prerequisite for understanding this paper is determination. What is the best way to characterize Turing’s paper? Simple. It changed the world.

Introduction to CS 1: Programming and Computer Science

Have you ever imagined speaking in the language of computers, and transforming your ideas into actions that computers can perform? This course is a gateway to discovering the art and science of programming, a crucial skill that serves as the backbone of computer science. But computer science transcends mere programming. Our actual aim is to nurture your ability to think like a computer scientist.

Systems 2: Software Architecture and Design

Have you ever wondered what a computer is and how it actually works? In this course, we’ll answer the software half of this question. We will start with virtual machines and develop a high-level language, write a compiler, and an operating system. By the end, we will have developed software heirarchy that makes the hardware we developed in Systems 1 useable.

Systems 1: Hardware Architecture and Design

Have you ever wondered what a computer is and how it actually works? In this course, we’ll answer the hardware half of this question. Working from the ground up, we will start with basic circuits and develop elementary logic gates. Taking these gates as our building blocks, we will construct the core components of a modern computer. Our journey will culminate in using machine code to control the computer we have designed.

Functional Programming and Computation

What is computation? This is the question that birthed Computer Science as a discipline, and serves as the focal point of this course. Our plan for answering it is twofold. First, we will introduce functional programming through Scheme (a dialect of Lisp). Second, we will use our understanding of functional programming to explore the nature of computation itself. This will involve reading parts of Alonzo Church’s revolutionary article, “An Unsolvable Problem of Elementary Number Theory.” We will see how the notion of computation emerges from his understanding of functions, and engage with the fundamental conjecture of Computer Science (the Church-Turing Thesis).