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, biology, and physics.

Computer Science 2022-2023 Courses

First-Year Studies: Achilles, the Tortoise, and the Mystery of the Undecidable

FYS—Year | 10 credits

In this course, we will take an extended journey through Douglas Hofstadter’s Pulitzer Prize-winning book, Gödel, Escher, Bach, which has been called “an entire humanistic education between the covers of a single book.” The key question at the heart of the book is: How can minds possibly arise from mere matter? Few people would claim that individual neurons in a brain are “conscious” in anything like the normal sense in which we experience consciousness. Yet, consciousness and self-awareness emerge, somehow, out of a myriad of neuronal firings and molecular interactions. How can individually meaningless physical events in a brain, even vast numbers of them, give rise to meaningful awareness, to a sense of self? And could we duplicate such a process in a machine? Considering these questions will lead us to explore a wide range of ideas—from the foundations of mathematics and computer science to molecular biology, art, and music and to the research frontiers of modern-day cognitive science and neuroscience. Along the way, we will closely examine Gödel's incompleteness theorem, the drawings of M. C. Escher, the music of J. S. Bach, mathematical logic and formal systems, the limits of computation, and the past history and future prospects of artificial intelligence. During the fall semester, students will meet with the instructor weekly for individual conferences. In the spring, we will meet weekly or every other week, depending on students’ needs.


Introduction to Computer Programming

Open, Small Lecture—Fall | 5 credits

This lecture presents 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, the theory of algorithms, and the benefits of clearly written, well-structured programs. Fundamental topics include: how computers represent and manipulate numbers, text, and other data (such as images and sound); variables and symbolic abstraction; Boolean logic; conditional, iterative, and recursive computation; functional abstraction (“black boxes”); and standard data structures, such as arrays, lists, and dictionaries. We will learn introductory computer graphics and how to process simple user interactions via mouse and keyboard. We will also consider the role of randomness in otherwise deterministic computation, basic sorting and searching algorithms, how programs can communicate across networks, and some principles of game design. Toward the end of the semester, we will investigate somewhat larger programming projects and, so, will discuss file processing; modules and data abstraction; and object-oriented concepts such as classes, methods, and inheritance. As we proceed, we will debate the relative merits of writing programs from scratch versus leveraging existing libraries of code. Discussion topics will also include the distinction between decidable and tractable problems, the relationship between programming and artificial intelligence, the importance of algorithmic efficiency to computer security, and Moore’s Law and its impact on the evolution on programming languages and programming style. Weekly hands-on laboratory sessions will reinforce the programming concepts covered in class.


Computer Organization

Intermediate, Seminar—Year | 10 credits

This course investigates how computers are designed “underneath the hood” and how basic building blocks can be combined to make powerful machines that execute intricate algorithms. There are two essential categories of components in modern computers: the hardware (the physical medium of computation) and the software (the instructions executed by the computer). As technology becomes more complex, the distinction between hardware and software blurs. We will study why this happens, as well as why hardware designers need to be concerned with the way software designers write programs and vice versa. Along the way, we will learn how computers work from higher-level programming languages such as Python and JavaScript, to system-level languages C and Java, down to the basic zeroes and ones of machine code. Topics include Boolean logic, digital-circuit design, computer arithmetic, assembly and machine languages, memory hierarchies, and parallel processing. Special attention will be given to the RISC architectures—now the world’s most common, general-purpose microprocessors. In particular, we will focus on the ARM architecture and Apple’s new M1 processors. Time permitting, we will investigate the relationship between energy consumption and the rise of multicore and mobile architectures.


Quantum Computing

Intermediate, Seminar—Fall | 5 credits

Physicists and philosophers have been trying to understand the strangeness of the subatomic world as revealed by quantum theory since its inception back in the 1920s, but it wasn’t until the 1980s—more than a half-century after the development of the theory—that computer scientists first began to suspect that quantum physics might hold profound implications for computing, as well, and that its inherent weirdness might possibly be transformed into a source of immense computational power. This dawning realization was followed soon afterward by key theoretical and practical advances, including the discovery of several important algorithms for quantum computers that could potentially revolutionize (and disrupt) the cryptographic systems protecting practically all of our society’s electronic banking, commerce, telecommunications, and national security systems. Around the same time, researchers succeeded in building the first working quantum computers, albeit on a very small scale. Today, the multidisciplinary field of quantum computing lies at the intersection of computer science, mathematics, physics, and engineering and is one of the most active and fascinating areas in science, with potentially far-reaching consequences for the future. This course will introduce students to the theory and applications of quantum computing from the perspective of computer science. Topics to be covered will include bits and qubits, quantum logic gates and reversible computing, Deutsch’s algorithm, Grover’s search algorithm, Shor’s factoring algorithm, quantum teleportation, and applications to cryptography. No advanced background in physics, mathematics, or computer programming is necessary beyond a basic familiarity with linear algebra. We will study the quantitative, mathematical theory of quantum computing in detail but will also consider broader philosophical questions about the nature of physical reality, as well as the future of computing technologies.


Privacy, Technology, and the Law

Open, Seminar—Spring | 5 credits

What do Bitcoin, NFTs, Zoom, self-driving vehicles, and Edward Snowden have in common? The answer lies in this course, which focuses on how a few very specific computer technologies are dramatically altering daily life. In this course, we will develop a series of core principles that explain the rapid change and will help us chart a reasoned path to the future. We begin with a brief history of privacy, private property, and privacy law. Two examples of early 20th-century technologies required legal thinking to evolve: 1) whether a pilot (and passengers) of a plane is trespassing when the plane flies over someone’s backyard; and 2) whether the police can listen to a phone call from a phone booth (remember those?) without a warrant. Quickly, we will arrive at the age of information and will be able to update these 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. To get a better handle on the problem, we will consider the central irony of the internet: It was developed at the height of the Cold War, as a way to maintain a robust communication system in the event of a nuclear attack, and now its open nature puts us at risk of 21st-century security threats such as electronic surveillance, aggregation and mining of personal information, and cyberterrorism. We will contrast doomsday myths popularized by movies such as War Games with more mundane scenarios such as total disruption of electronic commerce. Along the way, we will address questions such as: Does modern technology allow people to communicate secretly and anonymously? Can a few individuals disable the entire internet? Can hackers launch missiles or uncover blueprints for nuclear power plants from remote computers on the other side of the world? We will also investigate other computer-security issues, including spam, computer viruses, and identity theft. Meanwhile, with our reliance on smart phones, text messages, and electronic mail, have we unwittingly signed up ourselves to live in an Orwellian society? Or can other technologies keep “1984” at bay? Our goal is to investigate if and how society can strike a balance so as to achieve computer security without substantially curtailing rights to free speech and privacy. Along the way, we will introduce the science of networks and describe the underlying theories that make the internet and its related technologies at once tremendously successful and so challenging to regulate. A substantial portion of the course will be devoted to introductory cryptology—the science (and art) of encoding and decoding information to enable private communication. We will conclude with a discussion of how cutting-edge technologies, such as blockchains, are impacting commerce today and how quantum cryptography and quantum computing may impact the privacy of communications tomorrow.


Bio-Inspired Artificial Intelligence

Intermediate, Seminar—Spring | 5 credits

The field of artificial intelligence (AI) is concerned with reproducing the abilities of human intelligence in computers. 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—such as evolutionary computation and 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 techniques in detail. Students will have many opportunities for extended exploration through open-ended, hands-on lab exercises and conference work.


Critical Cartography and GIS

Open, Seminar—Fall

At first glance, the map is a pretty straightforward document. Its sole purpose (allegedly) is to orient us in our world. Orientation, however, is a big task; and when we trace the evolution of the map from the Tabula Rogeriana of the 12th century to the medieval mappa mundi and through the 3D landscapes rendered by the US military, we not only see the evolving ways in which we orient ourselves but also our evolving judgment of the worlds that we inhabit. Maps are historical documents unto themselves. For geographers, the map communicates the history of our discipline from tools of empire to Marxist counter-topography. Maps have never been value-free or objective. This course follows the evolution of the map, geographic thought, and Geographic Information Systems (GIS) through the following disciplinary moments: critical geography and GIS, feminist geography and GIS, queering the map, indigenous mapping, mapping environmental (in)justice, and urban geography, among others. At the same time, students will learn the basics of the mapping software ArcGIS. Our seminars inform the critical geographic work that we will do in these lab sessions, and the sessions give us the opportunity to practically understand the social and political tensions of mapping. Students will not only source, manage, and analyze data to create maps of their choosing for their conference project but also ground their research, as a whole, in one of the subdisciplines covered in class. Students will also be encouraged to continue their research by adding a GIS/spatial component to their conference work in the second semester.


Abstract Algebra

Intermediate/Advanced, Seminar—Spring

In pre-college mathematics courses, we learned the basic methodology and notions of algebra. We appointed letters of the alphabet to abstractly represent unknown or unspecified quantities. We discovered how to translate real-world (and often complicated) problems into simple equations whose solutions, if they could be found, held the key to greater understanding. But algebra does not end there. Advanced algebra examines sets of objects (numbers, matrices, polynomials, functions, ideas) and operations on those sets. The approach is typically axiomatic: One assumes a small number of basic properties, or axioms, and attempts to deduce all other properties of the mathematical system from those. Such abstraction allows us to study, simultaneously, all structures satisfying a given set of axioms and to recognize both their commonalties and their differences. Specific topics to be covered include groups, actions, isomorphism, symmetry, permutations, rings, fields, and applications of these algebraic structures to questions outside of mathematics. The pace and level of discussion is aimed at students who have experience reading and writing proofs.


Proof and Paradox

Intermediate, Seminar—Fall

One of the remarkable ironies of modern mathematics is that the success of its methodology has exposed its own limitations. In particular, the advances in mathematical foundations and logic of the early 20th century precipitated Kurt Gödel's incompleteness theorems—which establish that, for any effective axiomatic system of mathematics, there are mathematical truths that mathematics cannot prove. Gödel's proof is remarkable for both its philosophical implications and its very ingenuity. To prepare our study of the proof, the seminar will review basic logic, set theory, elementary number theory and the standard techniques of mathematical proof. Having completed a close reading of Gödel's proof, we will then explore the relationship between proof and understanding in more recent mathematical practice. Students will have an opportunity to strengthen their mathematical reading and writing abilities while engaging contemporary mathematical issues concerning the progress of the discipline, the role of computers in proof, and best practices in mathematical exposition. This seminar is recommended not only for the mathematically inclined but also for students interested in computer science, law, or philosophy.


Classical Mechanics (Calculus-Based General Physics)

Open, Small Lecture—Fall

Calculus-based general physics is a standard course at most institutions; as such, this course will prepare you for more advanced work in the physical science, engineering, or health fields. The course will cover introductory classical mechanics, including kinematics, dynamics, momentum, energy, and gravity. Emphasis will be placed on scientific skills, including problem solving, development of physical intuition, scientific communication, use of technology, and development and execution of experiments. The best way to develop scientific skills is to practice the scientific process. We will focus on learning physics through discovering, testing, analyzing, and applying fundamental physics concepts in an interactive classroom, as well as in weekly laboratory meetings.


Time to Tinker

Open, Small Lecture—Spring

Do you enjoy designing and building things? Do you have lots of ideas of things that you wished existed but do not feel you have enough technical knowledge to create yourself? Do you wish you could fix some of your favorite appliances that just stopped working? Do you want to help find solutions to problems in our community? This course is meant to give an introduction to tinkering, with a focus on learning the practical physics behind basic mechanical and electronic components while providing the opportunity to build things yourself. The course will have one weekly meeting with the whole class and three smaller workshop sessions to work on team-based projects. (You are expected to choose one of the three workshop sessions to attend weekly.) The course will be broken down into four primary units: design and modeling; materials, tools, and construction; electronics and Arduino; and mechanics. There will be weekly readings and assignments, and each unit will include both individual and small-group projects that will be documented in an individual portfolio to demonstrate the new skills that you have acquired. For a semester-long, team-based conference project, your team will be creating an engineered piece based on the needs of a community partner. At the end of the semester, your team will exhibit and present your work and write a report reflecting on the design, desired functionality, and individual contributions that led to the finished product. Let’s get tinkering!


Technology and Social Identity

Open, Seminar—Spring

In this course, we will explore the nature of agency—or the motivation behind and responsibility for action—and the role of technology in shaping personal social identity. We begin by discussing how to treat nonhumans as actors in their own right before exploring key concepts that include Donna Haraway’s cyborg and Bruno Latour’s hybrid agent—concepts that allow us to consider how humans utilize nonhumans in their environment (assistive technologies for people with disabilities, animals, clothing, etc.) to enact social identity and become inseparable from them. This lays a foundation for us to explore how social identities like race, gender, ability, and socioeconomic status are made and unmade in interactions with technology. We will consider how identities are shaped by institutions, embodied in individuals, and conceived as lifelong projects. In past conference projects, students have explored deaf identity and cochlear implants, responsible pet ownership and leashes, bicycles in urban space, and hacking culture on video-game servers.