Sarah Lawrence College

Undergraduate Academics

Computer Science

What is computer science? Ask a hundred computer scientists, and you will likely receive a hundred different answers. One possible, fairly succinct answer is that computer science is the study of algorithms: step-by-step procedures for accomplishing tasks formalized into very precise, atomic (indivisible) instructions. An algorithm should allow a task to be accomplished by someone who—or something that—does not even understand the task. In other words, it is a recipe for an automated solution to a problem. Computers are tools for executing algorithms. (Not that long ago, a “computer” referred to a person who computed!)

What are the basic building blocks of algorithms? How do we go about finding algorithmic solutions to problems? What makes an efficient algorithm in terms of the resources (time, memory, energy) that it requires? What does the efficiency of algorithms say about major applications of computer science such as cryptology, databases, and artificial intelligence? Computer science courses at Sarah Lawrence College are aimed at answering questions such as those. Sarah Lawrence computer science students also investigate how the discipline intersects other fields of study, including mathematics, philosophy, environmental science, biology, and physics.

Computer Science 2025-2026 Courses

  • First-Year Studies—Year | 10 credits

    COMP 1025

    What do TikTok, Bitcoin, ChatGPT, self-driving vehicles, and Zoom have in common? The answer lies in this course, which focuses on how digital technologies have rapidly altered (and continue to alter) daily life. In this course, we will develop a series of core principles that attempt to explain the rapid change and forge a reasoned path to the future. We will begin with a brief history of privacy, private property, and privacy law. Two examples of early 20th-century technologies that required legal thinking to evolve are whether a pilot (and passengers) of a plane are trespassing when the plane flies over someone's backyard and whether the police can listen to a phone call from a phone booth (remember those?) without a warrant. Quickly, we will arrive in the age of information and can update those conundrums: A drone flies by with an infrared camera. A copyrighted video is viewed on YouTube via public WiFi. A hateful comment is posted on reddit. A playful TikTok is taken out of context and goes viral for all to see. An illicit transaction involving Bitcoin is made between seemingly anonymous parties via Venmo. A famous musician infuriates their fanbase by releasing a song supporting an authoritarian politician—but it turns out to be a deepfake. A core tension in the course is whether and how the internet should be regulated and how to strike a balance among privacy, security, and free speech. We will consider major US Supreme Court cases that chart slow-motion government reaction to the high-speed change of today's wired world. In fall, students will meet weekly with the instructor for individual conferences; in spring, individual conferences will be biweekly. 

    Faculty

  • Open, Seminar—Fall | 5 credits

    COMP 3213

    In recent years, the field of artificial intelligence (AI) has made astonishing technical progress and has begun to assume an increasingly widespread and important role in society. AI systems can now (at least to some extent) drive cars; recognize human faces, speech, and gestures; diagnose diseases; control autonomous robots; converse fluently in English; instantly translate text from one language to another; beat world-champion human players at chess, Go, and other games; and perform many other amazing feats that just a few decades ago were only possible within the realm of science fiction. This progress has led to extravagant expectations, claims, hopes, and fears about the future of AI technology and its potential impact on society. In this course, we will attempt to peer beyond the hype and to come to grips with both the promise and the peril of AI. We will consider AI from many angles, including historical, philosophical, ethical, and public-policy perspectives. We will also examine many of the technical concepts and achievements of the field in detail, as well as its many failures and setbacks. Throughout the course, students will be asked to read texts, write responses, do follow-up research, and participate in classroom discussions. This is not a programming course, and no background in computer programming is expected or required.

    Faculty

  • Open, Small Lecture—Fall | 5 credits

    COMP 2012

    This lecture will be a rigorous introduction to computer science and the art of computer programming, using the elegant, eminently practical, yet easy-to-learn programming language Python. We will learn the principles of problem solving with a computer while gaining the programming skills necessary for further study in the discipline. We will emphasize the power of abstraction and the benefits of clearly written, well-structured programs, beginning with imperative programming and working our way up to object-oriented concepts such as classes, methods, and inheritance. Along the way, we will explore: the fundamental idea of an algorithm; how computers represent and manipulate numbers, text, and other data (such as images and sound) in binary; Boolean logic; conditional, iterative, and recursive programming; functional abstraction; file processing; and basic data structures, such as lists and dictionaries. We will also learn introductory computer graphics, how to process simple user interactions via mouse and keyboard, and some principles of game design and implementation. All students will complete a final programming project of their own design. Weekly hands-on laboratory sessions will reinforce the concepts covered in class through extensive practice at the computer.

    Faculty

  • Intermediate/Advanced, Seminar—Fall | 5 credits

    COMP 3867

    Prerequisite: Introduction to Computer Programming (COMP 2010) or equivalent and permission of the instructor

    Note: Programming experience is required. Familiarity with computer organization is recommended.

    Compilers are often known as translators—and for good reason: Their job is to take programs written in one language and translate them to another language (usually assembly or machine language) that a computer can execute. It is, perhaps, the ideal meeting between the theoretical and practical sides of computer science. Modern compiler implementation offers a synthesis of: 1) language theory: how languages (both natural languages and programming languages) can be represented on, and recognized by, a computer; 2) software design and development: how practical software can be developed in a modular way—for example, how components of one compiler can be connected to components of another compiler to form a new compiler; and 3) computer architecture: understanding how modern computers work. In this course, we will write a program implementing a nontrivial compiler for a novel programming language (partly of our own design). Topics covered will include the difference between interpreters and compilers, regular expressions and finite automata, context-free grammars and the Chomsky hierarchy, type checking and type inference, contrasts between syntax and semantics, and graph coloring as applied to register allocation. Conference work will allow students to pursue different aspects of compilers, such as compilation of object-oriented languages, automatic garbage collection, compiler optimizations, just-in-time compilation, WebAssembly, and applications of compiler technology to natural-language translation.

    Faculty

  • Open, Small Lecture—Spring | 5 credits

    COMP 2055

    This course will explore the concepts of emergence and complexity within natural and artificial systems. Simple computational rules interacting in complex, nonlinear ways can produce rich and unexpected patterns of behavior and may account for much of what we think of as beautiful or interesting in the world. Taking this as our theme, we will investigate a multitude of topics, including: fractals and the Mandelbrot set; chaos theory and strange attractors; cellular automata, such as the Wolfram rules and Conway’s Game of Life; self-organizing and emergent systems; formal models of computation, such as Turing machines; artificial neural networks; genetic algorithms; and artificial life. The central questions motivating our study will be: How does complexity arise in nature? Can complexity be quantified and objectively measured? Can we capture the patterns of nature as computational rules in a computer program? What is the essence of computation, and what are its limits? Throughout the course, we will emphasize mathematical concepts and computer experimentation rather than programming, using the computer as a laboratory in which to design and run simulations of complex systems and observe their behaviors.

    Faculty

  • Open, Seminar—Spring | 5 credits

    COMP 3112

    This course will be an introduction to computer programming through the lens of old-school, arcade-style video games such as Pong, Adventure, Breakout, Pac-Man, Space Invaders, and Tetris. We will learn programming from the ground up and demonstrate how it can be used as a general-purpose, problem-solving tool. The course will emphasize the power of abstraction and the benefits of clearly written, well-structured code, covering topics such as variables, conditionals, iteration, functions, lists, and objects. We will focus on event-driven programming and interactive game loops. We will consider when it makes sense to build software from scratch and when it might be more prudent to make use of existing libraries and frameworks rather than reinventing the wheel. Some of the early history of video games and their lasting cultural importance will also be discussed. Students will design and implement their own low-res, but fun-to-play, games. No prior experience with programming or web design is necessary (nor expected, nor even desirable).

    Faculty

  • Intermediate, Seminar—Spring | 5 credits

    COMP 3214

    Prerequisite: at least one semester of programming experience in a high-level, object-oriented language such as Python, Java, or C++

    The field of artificial intelligence (AI) is concerned with reproducing in computers the abilities of human intelligence. In recent years, exciting new approaches to AI have been developed, inspired by a wide range of biological processes and structures that are capable of self-organization, adaptation, and learning. These sources of inspiration include biological evolution, neurophysiology, and animal behavior. This course is an in-depth introduction to the algorithms and methodologies of biologically-inspired AI and is intended for students with prior programming experience. We will focus primarily on machine-learning techniques—including genetic algorithms, reinforcement learning, artificial neural networks, and deep learning—from both a theoretical and a practical perspective. Throughout the course, we will use the Python programming language to implement and experiment with these algorithms in detail. Students will have many opportunities for extended exploration through open-ended, hands-on lab exercises and conference work.

    Faculty

© Sarah Lawrence College. All rights reserved.