Computer Science

Related disciplines

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, “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.

2015-2016 Courses

Computer Science

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

Open , FYS

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 somehow emerges 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 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

Introduction to Computer Programming

Open , Seminar—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 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 intellgence, the importance of algorithmic efficiency to computer security, 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

Introduction to Web Programming

Open , Lecture—Spring

This lecture introduces the fundamental principles of computer science via their application to the design and implementation of interactive websites. We will focus on the core triumvirate of Web technologies: HTML for content, CSS for layout, and—most important to us—JavaScript for interactivity. Examples of the kinds of Web applications that we will build include a virtual art gallery, an arcade-style game, and a mobile messaging app. We will learn JavaScript 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. 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 to 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. We will strive to make the design of our websites reflect the spirit of their content. Weekly hands-on laboratory sessions will reinforce the programming concepts covered in lecture. No prior experience with programming or Web design is necessary (or expected or even desirable).

Faculty

Digital Zeitgeist

Open , Seminar—Fall

From Facebook, Twitter, and YikYak to massively multiplayer online games, to the Internet of Things, and to disruptive technologies ranging from Bitcoin to Uber, computer networks play an ever-increasing role in our daily lives. Where may this phenomenon be taking us in the immediate and not-so-immediate future? Is there (or should there be) anything we can (or should) do about it? The miniaturization of electronic computers and the resulting increase in computing power, decrease in short-term cost to harness that power, and ubiquity of computer networks bring people and places together, making distances formerly thought of as insurmountable ever more trivial. With the advent of gigabit fiber-optic networks, smart phones, and wearable computers, information of all kinds can flow, in an instant, between people and objects around the world and back again. In many ways, the plethora of smaller, cheaper, faster networked devices improves our quality of life; but we will also consider the dark side of a highly connected society: the more smart phones, the more workaholics; the more text messages and e-mails exchanged, the less privacy; the greater reach of the Internet, the more piracy, spam, and pornography. The nature of a course entitled Digital Zeitgeist is to move with the times, and those times move ever more rapidly. So even this description might seem outdated by the time you read it. Never fear, we will steer our discussion to the “bleeding edge,” as necessary. Consider these news stories (to name but a few) that would not have made it into this description were it written only a year earlier: the Gamergate controversy, “Citizen Four” (and its adoration), the Sony hack, the trial and conviction of the Silk Road founder, and the arrival of the Apple Watch. This is not a technical course, although at times we will discuss some details that lie behind certain crucial technologies—in particular, the Internet and the World Wide Web.

Faculty
Related Disciplines

Principles of Programming Languages

Intermediate , Seminar—Fall

This course explores the principles of programming language design through the study and implementation of computer programs called interpreters, which process other programs as input. A famous computer scientist once remarked that if you don't understand interpreters, you can still write programs and 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 see how to design our own languages by starting from a high-level description and systematically deriving a low-level implementation through the application of a series of program transformations. Along the way, we will become acquainted with the lambda calculus (the basis of modern programming language theory), scoping mechanisms, continuations, lazy and nondeterministic evaluation, 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.

Faculty

Computer Organization

Intermediate , Seminar—Spring

The focus of this course is on the selection and interconnection of components that make up a computer. 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 Java, Python, and C down to the basic zeroes and ones of machine code. Topics include Boolean logic, circuit design, computer arithmetic, assembly and machine languages, memory hierarchies, and parallel processing. Special attention will be given to the ARM family of instruction—set architectures, now the world's most common, general-purpose microprocessors. Time permitting, we will investigate the relationship between energy consumption and the rise of multicore and mobile architectures.

Faculty

Data Structures and Algorithms

Intermediate , Seminar—Spring

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. We will use Java—a strongly typed, object-oriented programming language—throughout the course. Topics covered will include types and polymorphism, arrays, linked lists, stacks, queues, priority queues, heaps, dictionaries, balanced trees, and graphs, along with several important algorithms for manipulating these 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

Discrete Mathematics: A Gateway 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 continuous rates of change. 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 the discrete mathematics literature and in 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.

Faculty
Related Disciplines

Related Visual Arts Courses

Interactive Objects: Extensions of the Body

Open , Seminar—Spring

This course will explore the technical and conceptual fundamentals of interactivity in the broader context of a sustained studio practice. In addition to teaching basic use of motors and sensors, along with programming skills from the ground up, the course will focus on the social and political implications of interactions and behaviors of art objects and how their relations with audience may be extended as a further critique of our media culture, daily communication, identity, and hidden social issues. We will examine both work and theory in fields of art, design, technology, and philosophy. Students will be expected in their studio work to engage with physical computing and related technologies either conceptually or technically. The course will consist of introductory workshops on electronics and computer programming, discussions of critical theories and works by artists and designers from related fields, hands-on prototyping, and projects that push the boundaries of interactivity. Artists surveyed include Krzysztof Wodiczko, Rebecca Horn, U-ram Choe, and Nick Cave.

Faculty
Related Disciplines

Interactive Objects: War Machine

Open , Seminar—Fall

This course focuses on war, conflict, and destruction as resources for creative perspectives and practices. War has been a part of human activity across history and constantly changes our world. The violent and destructive power of the war machine is manifested not only in war but also in daily human relationships. It protects the utopia in which we live; however, it is intended to be hidden outside of the social apparatus. In this course, we will inspect different types of war machines in metaphorical or nonmetaphorical forms, investigate how this irresistible mechanism and system generate power, and how that power impacts us. Students will design and build their own “machines” as artistic expressions on related topics of their choosing, with their own expertise, and in any form. On a practical side, we will learn how to use motors and sensors to create interactive objects and installations. Technical training on programming and Arduino prototyping will be included. Prior experience is not required, but an interest in new media art, technology, and politics is recommended.

Faculty
Related Disciplines

The Role of Technology in Trauma Care

Open , Seminar—Fall

This course will use group problem solving to answer the question: How can technology help us improve trauma assessment, counseling, and care? The technologies to be examined include voice recognition, audio analysis, data visualization, and tablet and smartphone applications. The course will focus on real clinical and advocacy problems faced by a New York-based nongovernmental organization dedicated to assisting survivors of torture. The course is primarily about improving the services provided by this organization, not about technology per se. As a result, we will critically analyze the role of technology in the clinical context and examine both technological and nontechnological solutions to the care and advocacy problems that we will be studying. The course is comprised of three units of four weeks each. In the first unit, we will examine ways in which technology can and cannot be used to improve the process for interviewing clients who have suffered trauma. Intake interviews are a significant part of their assessment and care. The second unit will address the same problem but from a research, rather than a clinical, perspective. The final unit will focus on documenting and publishing the results using multiple media, including text, video, audio, and interactive graphics. Academically, the class will feature concurrent streams related to five different disciplines: clinical psychology, software application development, data visualization, user-experience design, and communications. Although students will be exposed to all of these disciplines, they will not be expected to master them all. The class will have individual, group, and collective components. Individually, students will be responsible for one in-class presentation, relevant both to the general goals of the class and the individual learning goals of the student. Students may choose from a list provided by the instructor or focus on another relevant topic. Each presentation will have an audio-visual and written component and will be published on the class website. There will be one group problem-solving exercise for each of the three units. Each group assignment will be published on the class website. The ultimate goal of the class is to publish, collectively, one multimedia research paper focused on the problem and based on the in-class presentations. The entire class will be responsible for achieving this goal together. This class is a “Tech Third,” which means it has a central workshop and additional components featuring other faculty who help with the interdisciplinary nature of the problem solving. There will be additional workshops by Professors Adam Brown and Angela Ferraiolo, as well as presentations by subject matter experts and torture survivors.

Faculty
Related Disciplines