Computer Science

What is computer science? Ask 100 computer scientists, and you will likely receive 100 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.

2018-2019 Courses

Computer Science

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

Open , FYS—Year

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 self-awareness emerges, 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 those 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, mathematical logic and formal systems, the limits of computation, and the future prospects for artificial intelligence.

Faculty
Related Disciplines

Introduction to Computer Programming

Open , Lecture—Fall

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 of programming languages and programming style. Weekly hands-on laboratory sessions will reinforce the programming concepts covered in class.

Faculty
Related Disciplines

Introduction to Web Programming

Open , Lecture—Spring

This lecture introduces the fundamental principles of computer science via the creation of interactive Web pages. We will focus on the core triumvirate of Web technologies: HTML for content, CSS for layout, and—most important for us—JavaScript for interactivity. Examples of the kinds of Web applications that we will build include a virtual art gallery; a password generator and validator; and an old-school, arcade-style game. 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, loops, functions, recursion, arrays, objects, JSON notation, and event handling. We will also discuss how JavaScript communicates with HyperText Markup Language (HTML) via the Document Object Model (DOM) and the relationship of HTML, JavaScript, and Cascading Style Sheets (CSS). Along the way, we will discuss the history of the Web, the challenge of establishing standards, and the evolution of tools and techniques that drive the Web’s success. We will learn about client-server architectures and the differences between client-side and server-side Web programming. We will consider when it makes sense to design from the ground up and when it might be more prudent to make use of existing libraries and frameworks rather than reinvent the wheel. We will also discuss the aesthetics of Web design: Why are some pages elegant (even art) when others are loud, awkward to use, or—worse yet—boring. Weekly hands-on laboratory sessions will reinforce the programming concepts covered in lecture. No prior experience with programming or Web design is necessary (nor expected nor even desirable).

Faculty
Related Disciplines

Privacy, Technology, and the Law

Open , Seminar—Fall

What do digital currency, 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 lecture, we will develop a series of core principles that explain the rapid change and 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 that required legal thinking to evolve are: 1) whether a pilot (and passengers) of a plane are 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 can update those conundrums to, for example: 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 tweet 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. 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 ourselves up 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 makes 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.

Faculty
Related Disciplines

Principles of Programming Languages

Intermediate , Seminar—Fall

No prior knowledge of Scheme is needed, but at least one semester of prior programming experience is expected.

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 you 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 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 the lambda calculus (the basis of modern programming language theory), scoping mechanisms, continuations, lazy evaluation, nondeterministic programming, and other topics if time permits. We will use Scheme as our "meta-language" for exploring those 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.

Faculty
Related Disciplines

Databases

Intermediate , Seminar—Spring

Permission of the instructor is required. Students should have at least one semester of programming experience.

A modern database system is a collection of interrelated facts recorded on digital media and a set of computer programs that efficiently access those facts. In the 21st century, databases have become ubiquitous via the Web and {cloud computing” to the point that users may not even realize where their data is stored, how it is accessed, and who has access to it. This course attempts to shed light on why and how our society has become so dependent on information processing by examining software (and, to a lesser extent, hardware) techniques that lead to the efficient storage and retrieval of information. We will illustrate core principles by designing databases using open-source platforms (such as PostgreSQL, SQLite and MySQL) and designing websites to manipulate those databases using client-side technologies (such as HTML, CSS, JavaScript and a bit of AJAX) and server-side programming languages (such as PHP, Python and Node.js). Major topics include relational database design, query languages (e.g., SQL, its relatives, and lower-level embedded query languages), the object-relational model, ACID properties, and the client-server paradigm. We will also consider how the era of big data has challenged the supremacy of the ACID/SQL model and given rise to NoSQL database systems such as MongoDB, Cassandra, and Neo4J. Each student will be responsible for designing and implementing a Web-accessible database application of their own choosing, using open-source database software and a Web-application programming language such as Node, PHP, Python, or Ruby. Students will work on their projects throughout the course and will demonstrate them to rest of the class at the close of the semester. In addition to regular reading assignments, there will be several problem sets and short programming assignments. There will also be a more substantial programming assignment used to illustrate issues pertaining to the practical implementation of database systems. Example conference topics include data mining, database privacy and access control, geographic information systems (GIS), logic databases, and the implementation of a miniature database system.

Faculty
Related Disciplines

Bio-Inspired Artificial Intelligence

Intermediate , Seminar—Spring

At least one semester of prior programming experience is expected. Students should be very comfortable programming 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 variety of biological processes and structures that are capable of self-organization, adaptation, and learning. Examples of those new approaches include evolutionary computation, artificial neural networks, autonomous robots, and swarm intelligence. This course will provide a hands-on introduction to the algorithms and techniques of biologically-inspired AI—focusing primarily on genetic algorithms, neural networks, deep learning, reinforcement learning, and robotics—from both a theoretical and practical perspective. We will use the Python programming language to implement and experiment with those techniques in detail and test them out using both simulated and real robots. Students will have many opportunities for extended exploration through open-ended, hands-on, lab exercises and conference work.

Faculty
Related Disciplines

Calculus I: The Study of Motion and Change

Open , Seminar—Fall

Prerequisites: the minimum required preparation for study of the calculus is successful completion of study in trigonometry and precalculus topics. Students concerned about meeting the course prerequisites are encouraged to contact the instructor as soon as possible. This course is also being offered in the spring semester of this academic year.

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 and study the motion and change happening around us. The Ancient Greeks began a detailed study of change but were scared to wrestle with the infinite; 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
Related Disciplines

Calculus II: Further Study of Motion and Change

Open , Seminar—Spring

Prerequisites: one year of high-school calculus or one semester of college-level calculus. Students concerned about meeting the course prerequisites are encouraged to contact the instructor as soon as possible. This course is also being offered in the fall semester of this academic year.

This course continues the thread of mathematical inquiry following an initial study of the dual topics of differentiation and integration (see Calculus I course description). Topics to be explored in this course include the calculus of exponential and logarithmic functions, applications of integration theory to geometry, alternative coordinate systems, infinite series, and power series representations of functions. 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. The theory of limits, differentiation, and integration will be briefly reviewed at the beginning of the term.

Faculty
Related Disciplines

Game Theory: The Study of Conflict and Strategy

Open , Lecture—Spring

The minimum required preparation for successful study of game theory is one year each of high-school algebra and geometry. No other knowledge of mathematics or social science is presumed.

Warfare, elections, auctions, labor-management negotiations, inheritance disputes, even divorce—these and many other conflicts can be successfully understood and studied as games. A game, in the parlance of social scientists and mathematicians, is any situation involving two or more participants (players) capable of rationally choosing among a set of possible actions (strategies) that lead to some final result (outcome) of typically unequal value (payoff or utility) to the players. Game theory is the interdisciplinary study of conflict, whose primary goal is the answer to the single, simply-stated, but surprisingly complex question: What is the best way to “play”? Although the principles of game theory have been widely applied throughout the social and natural sciences, their greatest impact has been felt in the fields of economics, political science, and biology. This course represents a survey of the basic techniques and principles in the field. Of primary interest will be the applications of the theory to real-world conflicts of historical or current interest.

Faculty
Related Disciplines

Discrete Mathematics: A Bridge to Advanced Mathematics

Intermediate , Seminar—Fall

Your voice will produce a mostly continuous sound signal when you read this sentence out loud. As it appears on the page, however, the previous sentence is composed of 79 distinct characters—including letters and a punctuation mark. Measuring patterns—whether continuous or discrete—is the raison d'être of mathematics, and different branches of mathematics have developed to address the two sorts of patterns. Thus, a course in calculus treats motion and other continuously changing functions. In contrast, discrete mathematics addresses problems of counting, order, computation, and logic. We will explore these topics and their implications for mathematical philosophy and computer science. The form of this seminar will be that of a (mathematical) writing workshop. We will work collaboratively to identify and reproduce the key formal elements of mathematical exposition and proof as they appear in both mathematical literature and each other's writing. This seminar is designed for students interested in advanced mathematical study and highly recommended for students with an interest in computer science, law, logic, or philosophy. Some prior study of calculus is highly recommended.

Faculty
Related Disciplines

Time to Tinker

Open , Seminar—Spring

Do you enjoy designing and building things? Do you have lots of ideas about things that you wished existed but do not feel you have enough technical knowledge to create it yourself? This course is meant to give an introduction to tinkering, with a focus on learning the practical physics behind basic mechanical and electronic components and providing the opportunity to build things yourself. We will have weekly, three-hour workshops in the physics lab, along with individual biweekly conference meetings. The course will be broken down into multiple units, including tools of the trade, mechanics, 3D printing, simple electronics, introduction to Arduino, and the engineering design process. Each unit will include a small group project to demonstrate the new skills that you have acquired. In addition, there will be weekly homework assignments, where you will need to create or bring in something related to the topic at hand. For your individual conference project, you will be developing your own engineered piece, with a report on its design and desired function, as well as any necessary material required for others to replicate the results (within desired copyright restrictions).

Faculty
Related Disciplines

3D Modeling

Open , Seminar—Spring

This course introduces students to the process of constructing digital objects and environments in the virtual space of the computer. Emphasis will be on a strong grasp of form, space, and composition. Fundamentals of hard-edge and organic surface modeling will be thoroughly exercised, while further exploration of the digital tools will cover shading and texturing, lighting, and rendering with the virtual camera. Over the course of the semester, students will be challenged to create increasingly complex objects, environments, and imagery. Through readings and discussion, students will also be encouraged to consider the conceptual ramifications of working in computer space. Contemporary examples of computer-generated imagery in art, film, and media—juxtaposed with historical views on visual illusion from art and philosophy—will form a broader context in which to examine the medium.

Faculty
Related Disciplines

Introduction to Digital Imaging

Open , Seminar—Fall

This course covers contemporary digital practice, with an emphasis on Photoshop skills and imaging techniques from scanning to printing. Proper digital workflow is the focus, while working through the basics of image manipulation tools, color correction, and retouching. The skills covered will build a solid basis for further exploration of photography, fine-art printing, and more radical digital experiments. The broader classroom discussion emphasizes computer-generated and -manipulated imagery as a new paradigm in contemporary art, photography, and culture in general. Students are encouraged to explore the potential of digital tools in the context of their personal work—visual arts-related or otherwise—stressing open-ended visual possibilities, as well as technical and conceptual rigor.

Faculty
Related Disciplines