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!)

## Computer Science 2024-2025 Courses

### Introduction to Computer Science: The Way of the Program

Open, Small Lecture—Fall | 5 credits

COMP 2012

This lecture course is 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 also 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

### Privacy, Technology, and the Law

Open, Seminar—Fall | 5 credits

COMP 3207

What do Bitcoin, ChatGPT, self-driving vehicles, and Zoom have in common? The answer lies in this course, which focuses on how a few digital technologies are dramatically altering daily life. In this course, we will develop a series of core principles that attempt to explain the rapid change and to forge a reasoned path into 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: 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 phonebooth (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 his or her 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.

#### Faculty

### Computer Networks

Open, Seminar—Fall | 5 credits

COMP 3065

Note: There is no formal prerequisite for this course, but the content is technical in nature. Registration interviews are required.

This course is a rigorous introduction to digital communication networks from a liberal-arts perspective. The main question that we will address is how information of all kinds can be transmitted efficiently, between two points at a distance, in such a way that very little assumption need be made about the physical mode of transport and how the route the information travels need not be known in advance. We emphasize the importance of abstraction and the use of redundancy to establish error-free transmission even in the face of significant noise. We study protocol stacks from the application layer (canonical example: web browser) down to the physical transmission medium. We analyze how high-level information (for instance, a message including an image attachment being sent via email) is translated to bits, broken into discrete packets, sent independently using the basic building blocks of the Internet—and then how those packets are reassembled, seemingly instantaneously, in the correct order. We will attempt to demystify the alphabet soup of networking terminology, including TCP/IP, HTTP, HTTPS, VPN, NFC, WiFi, Bluetooth, and 5G. We will consider major shifts in technology that have transformed communication networks from the telegraph to the telephone to radio, from copper wire to fiberoptics and satellite, and the ubiquity of cellular networks. We also will consider the close relationship between the open-source movement and the rise of the Internet and web.

#### Faculty

### Principles of Programming Languages

Intermediate, Seminar—Fall | 5 credits

COMP 3816

Prerequisite: one semester of programming experience

This course explores the principles of programming language design through the study and implementation of computer programs called interpreters, which are programs that process other programs as input. A famous computer scientist once remarked that, if you don’t understand interpreters, you can still write programs and can even be a competent programmer—but you can’t be a master. We will begin by studying functional programming using the strangely beautiful and very recursive programming language Scheme. After getting comfortable with Scheme and recursion, we will develop an interpreter for a Scheme-like language of our own design—gradually expanding its power in a step-by-step fashion. Along the way, we will become acquainted with lambda functions, environments, scoping mechanisms, continuations, lazy evaluation, nondeterministic programming, and other topics as time permits. We will use Scheme as our “meta-language” for exploring these issues in a precise, analytical way—similar to the way in which mathematics is used to describe phenomena in the natural sciences. Our great advantage over mathematics, however, is that we can test our ideas about languages, expressed in the form of interpreters, by directly executing them on the computer. No prior knowledge of Scheme is necessary.

#### Faculty

### Games Computers Play

Open, Seminar—Spring | 5 credits

COMP 3112

This is 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. Throughout the course, we will emphasize the power of abstraction and the benefits of clearly written, well-structured code. We will cover 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. We will also discuss some of the early history of video games and their lasting cultural importance. 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

### Data Structures and Algorithms

Intermediate, Seminar—Spring | 5 credits

COMP 3865

Prerequisite: Inrtoduction to Computer Programming

In this course, we will study a variety of data structures and algorithms that are important for the design of sophisticated computer programs, along with techniques for managing program complexity. Throughout the course, we will use Java, a strongly typed, object-oriented programming language. Topics covered will include types and polymorphism, arrays, linked lists, stacks, queues, priority queues, heaps, dictionaries, balanced trees, and graphs, as well as several important algorithms for manipulating those structures. We will also study techniques for analyzing the efficiency of algorithms. The central theme tying all of these topics together is the idea of abstraction and the related notions of information hiding and encapsulation, which we will emphasize throughout the course. Weekly lab sessions will reinforce the concepts covered in class through extensive hands-on practice at the computer.

#### Faculty

### Related Mathematics Courses

#### Modern Mathematics: Logic, Probability, and Statistics

Intermediate, Seminar—Year

A mathematical structure is a set of objects along with certain relations among them. Examples of structures include: the corners of a cube related by the property of adjacency; a times table of integers related by multiplication; a family tree of individuals related by genealogy. Mathematical modernism contends that all mathematics is unified through the comparative study of structure. “The common character of the different concepts designated by this generic name,” according to Nicolas Bourbaki, “is that they can be applied to sets of elements whose nature has not been specified.” This seminar aims to come to terms with this radically abstract viewpoint and its theoretical and practical implications through a combined study of elementary mathematical logic, discrete mathematics, and group theory. Additional readings in the scientific application of these topics, as well as their history and philosophy, will provide context. The notion of symmetry will play a central role throughout. Students benefit from a prior study of calculus—whether in high school or college.

##### Faculty

#### Multivariable Mathematics: Linear Algebra, Vector Calculus, and Differential Equations

Intermediate, Seminar—Year

Rarely is a quantity of interest—tomorrow’s temperature, unemployment rates across Europe, the cost of a spring-break flight to Fort Lauderdale—a simple function of just one primary variable. Reality, for better or worse, is mathematically multivariable. This course introduces an array of topics and tools used in the mathematical analysis of multivariable functions. The intertwined theories of vectors, matrices, and differential equations and their applications will be the central themes of exploration in this yearlong course. Specific topics to be covered include the algebra and geometry of vectors in two, three, and higher dimensions; dot and cross products and their applications; equations of lines and planes in higher dimensions; solutions to systems of linear equations, using Gaussian elimination; theory and applications of determinants, inverses, and eigenvectors; volumes of three-dimensional solids via integration; spherical and cylindrical coordinate systems; and methods of visualizing and constructing solutions to differential equations of various types. Conference work will involve an investigation of some mathematically-themed subject of the student’s choosing.

#### Calculus I: The Study of Motion and Change

Open, Seminar—Fall

Our existence lies in a perpetual state of change. An apple falls from a tree; clouds move across expansive farmland, blocking out the sun for days; meanwhile, satellites zip around the Earth transmitting and receiving signals to our cell phones. The calculus was invented to develop a language to accurately describe the motion and change happening all around us. The ancient Greeks began a detailed study of change but were scared to wrestle with the infinite, and so it was not until the 17th century that Isaac Newton and Gottfried Leibniz, among others, tamed the infinite and gave birth to this extremely successful branch of mathematics. Though just a few hundred years old, the calculus has become an indispensable research tool in both the natural and social sciences. Our study begins with the central concept of the limit and proceeds to explore the dual processes of differentiation and integration. Numerous applications of the theory will be examined. For conference work, students may choose to undertake a deeper investigation of a single topic or application of the calculus or conduct a study of some other mathematically-related topic. This seminar is intended for students interested in advanced study in mathematics or sciences, students preparing for careers in the health sciences or engineering, and any student wishing to broaden and enrich the life of the mind.

##### Faculty

#### An Introduction to Statistical Methods and Analysis

Open, Lecture—Spring

Variance, correlation coefficient, regression analysis, statistical significance, and margin of error—you’ve heard these terms and other statistical phrases bantered about before, and you’ve seen them interspersed in news reports and research articles. But what do they mean? How are they used? And why are they so important? Serving as an introduction to the concepts, techniques, and reasoning central to the understanding of data, this lecture course focuses on the fundamental methods of statistical analysis used to gain insight into diverse areas of human interest. The use, misuse, and abuse of statistics will be the central focus of the course; and specific topics of exploration will be drawn from experimental design theory, sampling theory, data analysis, and statistical inference. Applications will be considered in current events, business, psychology, politics, medicine, and many other areas of the natural and social sciences. Statistical (spreadsheet) software will be introduced and used extensively in this course, but no prior experience with the technology is assumed. Group conferences, conducted in workshop mode, will serve to reinforce student understanding of the course material. This lecture is recommended for anybody wishing to be a better-informed consumer of data and strongly recommended for those planning to pursue advanced undergraduate or graduate research in the natural sciences or social sciences. Enrolled students are expected to have an understanding of basic high-school algebra and plane coordinate geometry.

##### Faculty

### Related Physics Courses

#### Time to Tinker

Open, Small Lecture—Fall

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 microcontrollers; 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 create a display of your work that will be exhibited on campus and provide a description reflecting on the design, desired functionality, and individual contributions that led to the finished product. Let’s get tinkering!

##### Faculty

#### General Physics I (Classical Mechanics)

Open, Small Lecture—Fall

General physics is a standard course at most institutions; as such, this course will prepare you for more advanced work in physical science, engineering, or the health fields. Lectures will be accessible at all levels, and through group conference you will have the option of either taking an algebra-based or calculus-based course. This 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, through problem solving, as well as in weekly laboratory meetings. *Students enrolling in the calculus-based section are encouraged to have completed at least one semester of calculus as a prerequisite. It is strongly recommended that students who still need to complete a second semester of calculus enroll in Calculus II, as well. Calculus II, or equivalent, is highly recommended to take the calculus-based section of General Physics II (Electromagnetism and Light) in the spring.*

##### Faculty

#### General Physics II (Electromagnetism and Light)

Open, Small Lecture—Spring

General physics is a standard course at most institutions; as such, this course will prepare you for more advanced work in physical science, engineering, or the health fields. Lectures will be accessible at all levels, and through group conference you will have the option of either taking an algebra-based or calculus-based course. This course will cover waves, geometric and wave optics, electrostatics, magnetostatics, and electrodynamics. We will use the exploration of the particle and wave properties of light to bookend our discussions and ultimately finish our exploration of classical physics with the hints of its incompleteness. 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, through problem solving, as well as in weekly laboratory meetings. *Students enrolling in the calculus-based section are encouraged to have completed Calculus II as a prerequisite. It is highly recommended to have taken the first semester of General Physics I in the fall prior to enrolling in this course.*

##### Faculty

#### Resonance and Its Applications

Intermediate, Seminar—Fall

This lab-based course is designed to teach students critical advanced laboratory skills while exploring the fascinating phenomenon of resonance and its many applications. The course will be broken into three main units: mechanical resonators, electronic resonators, and quantum mechanical resonators. Resonators are physical systems that undergo periodic motion and react quite dramatically to being driven at particular frequencies (like the opera singer hitting just the right note to break a wine glass). These systems are very common in everyday life, as well as inside many important technological devices. Each unit will explore a particular application of resonance (e.g., building RLC tank circuits for electronic resonance and utilizing our benchtop NMR spectrometer to explore quantum mechanical resonance). Although some class time will be spent going over the relevant theory, the majority of the class time will be spent designing and doing experiments using advanced lab equipment, analyzing data using Jupyter (iPython) notebooks, and reporting the results using LaTeX. For conference work, students are encouraged to develop an experimental research question, design an experiment to answer that question, perform the experiment, analyze the data, present their findings at the Science Poster Session, and write up their results in the form of a short journal article.

##### Faculty

#### Chaos

Open, Seminar—Spring

Learn to appreciate the complex order that can be found in chaos! This course introduces the beautiful world of nonlinear and chaotic dynamics and also provides the mathematical and numerical tools to explore the astounding patterns that can arise from these inherently unpredictable systems. We shall see how chaos emerges from fairly simple nonlinear dynamical systems; utilize numerical methods to simulate the dynamics of chaotic systems; and explore characteristics of chaos using iterated maps, bifurcation diagrams, phase space, Poincaré sections, Lyapunov exponents, and fractal dimensions. Class time will oscillate between the presentation of new material and workshops for hands-on exploration. Students are encouraged to build and/or analyze their own chaotic system as potential conference projects. No previous programming experience is required, and all relevant mathematical concepts will be introduced.

##### Faculty

#### Quantum Mechanics and Quantum Information

Intermediate, Seminar—Spring

This course will cover the fundamentals of the theory that governs the smallest scales of our universe: quantum mechanics. Throughout the semester, we’ll take a deep dive into the formalism behind, and physical predictions of, the theory. We’ll start by analyzing an experiment that can only be explained by a quantum theory and then dive into the mathematics that underlie quantum mechanics. We’ll then discuss matter waves along with the Schrödinger wave equation, as well as a variety of example problems, as we build intuition for the theory. We will conclude the course with a study of entanglement and quantum information. Familiarity with complex numbers, vector calculus, and matrices will be useful but not required.

##### Faculty

### Related Psychology Courses

#### The Origins of Language: Animals, Babies, and Machines

Open, Small Lecture—Fall

Why is linguistic communication so important to us? Do other primates have language? How do humans understand messages from one another despite uncertainty, distraction, and ever-changing environments? In this course, we will consider central questions about language: Are we the only ones who have it? When did we learn it? What does artificial intelligence (AI) like ChatGPT actually learn? And what exactly is the point of so-called “small talk”? In this course, we will start with an introduction to comparative research with animals, allowing us to consider other forms of communication. Next, we’ll turn to our own species, examining what findings from studies with babies and children can tell us about the nature and goals of communication. Finally, we’ll confront the artificial elephant in the room: neural networks. What kind of language have they learned, and how can we study it? In class, we will discuss the advances and consequences of AI. Students should come prepared to engage with the topic of communication from multiple perspectives. Through small-group conferences each week, students will develop projects that relate the course to their collective interests, such as learning and communicating in Toki Pona (a philosophical artistic-constructed language), researching the limits of AI language models, observing and analyzing children’s communication, or designing a behavioral intervention study that implements different communication practices for their peers.

##### Faculty

### Related Visual and Studio Arts Courses

#### Introduction to Rhino and 3D Fabrication

Open, Seminar—Spring

This course is a comprehensive introduction to Rhino7 for Mac OS X and additive digital fabrication. 3D software and digital fabrication have a variety of uses in contemporary art and the real world. The course covers basic model manipulation, rendering operations, and 3D printing; we will also explore ways of adapting more advanced 3D modeling techniques. In the first half of the semester, students will gain the technical knowledge needed for a rigorous exploration of 3D modeling in Rhino through a series of small projects. The second half of the course will focus on working toward the student’s approved project of their choosing. By course end, students will have the opportunity to output their work via 3D printing, 2D rendered visualization, and more. This multidisciplinary digital sculpture studio is open to interdisciplinary projects. Although not required, students are welcome to pursue the digital fabrication of the whole or part/s of their final projects.