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

## 2017-2018 Courses

### Computer Science

#### 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 intellgence, 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.

###### Faculty

#### The Interactive Web

##### Open , Seminar—Spring

*No prior experience with programming or Web design is necessary (nor expected nor even desirable).*

This seminar explores the impact and import of the Web by examining its underlying technologies and the theory behind those technologies. In particular, we focus on the interactive nature of the Web: how users consume content but, more importantly, create it. We consider both intentional creations (e.g., bespoke Web sites, status updates, message-board posts, Instagram feeds) and unintentional (e.g., the trail of a user's search history). The class combines discussion and debate with a hands-on, tutorial introduction to constructing interactive Web pages. Discussions include a brief history of the Web, the difference between the Internet and the Web, net neutrality and open source, the challenge of establishing standards, and the evolution of tools and techniques that drive the Web's success. From the technical side, we introduce basic programming concepts such as variables, conditionals, loops, functions, recursion, arrays, objects, and event handling. We develop programs using tools and languages (e.g., Pencil Code and CoffeeScript) that emphasize ease of use and allow us to focus on meaning rather than weighing us down with syntax. We leverage the power of the browser to create multimedia applications with sound and animation. We use tools that enable the collaborative creation of digital art and simple, yet entertaining, games. We learn about the core technologies of interactive Web programming: how JavaScript communicates with HyperText Markup Language (HTML) via the Document Object Model (DOM) and the relationship between HTML, JavaScript and Cascading Style Sheets (CSS). We also consider when it makes sense to design from the ground up and when it is more prudent to make use of existing libraries and frameworks rather than reinvent the wheel. We discuss user experience (UX) and the aesthetics of Web design: Why are some pages elegant (even art) when others are loud, awkward to use, or—worse yet—boring.

###### Faculty

#### Computer Organization

##### Intermediate , Seminar—Fall

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

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

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

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 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 Bridge to Advanced Mathematics

##### Intermediate , Seminar—Fall

*Some prior study of calculus is highly recommended.*

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.

###### Faculty

###### Related Disciplines

#### Mathematical Modeling I: Multivariable Calculus

##### Intermediate , Seminar—Fall

*Prerequisite: successful completion of Calculus II or the equivalent (a score of 4 or 5 on the Calculus BC Advanced Placement exam).*

It is difficult to overstate the importance of mathematics for the sciences. Twentieth century polymath John von Neumann even declared that the “sciences do not try to explain, they hardly even try to interpret, they mainly make models. By a model is meant a mathematical construct which…describes observed phenomena.” This two-semester sequence will introduce students to the basic mathematical ingredients that constitute models in the natural and social sciences. This first course in the sequence will concentrate on extending the concepts and tools developed in single-variable calculus to work with multiple variables. Multivariable calculus is a natural setting for studying physical phenomena in two or three spatial dimensions. We begin with the notion of a vector, a useful device that combines quantity and direction, and proceed to vector functions, their derivatives (gradient, divergence, and curl), and their integrals (line integrals, surface integrals, and volume integrals). The inverse relationship between derivative and integral appearing in single-variable calculus takes on new meaning and depth in the multivariable context, and a goal of the course is to articulate this through the theorems of Green, Gauss, and Stokes. These results will be of particular interest to students pursuing physics, engineering, or economics, where they are widely applicable. Students will gain experience developing mathematical models through conference work, which will culminate in an in-depth application of seminar ideas to a mathematical model in the natural, formal, or social sciences, based on student interest.

###### Faculty

###### Related Disciplines

#### Mathematical Modeling II: Differential Equations and Linear Algebra

##### Intermediate , Seminar—Spring

*Prerequisite: Mathematical Modeling I or the equivalent (college-level course in multivariable calculus).*

At the center of many mathematical models, one often finds a differential equation. Newton’s laws of motion, the logistic model for population growth, and the Black-Scholes model in finance are all examples of models defined by a differential equation; that is, an equation in terms of an unknown function and its derivatives. Most differential equations are unsolvable; however, there is much to learn from the tractable examples, including first-order equations and second order linear equations. Since derivatives are themselves linear approximations, an important approach to differential equations involves the algebra of linear transformations, or linear algebra. Building on the study of vectors begun in Mathematical Modeling I, linear algebra will occupy a central role in the course, with topics that include linear independence, Gaussian elimination, eigenvectors, and eigenvalues. Students will gain experience developing mathematical models through conference work, which will culminate in an in-depth application of seminar ideas to a mathematical model in the natural, formal, or social sciences, based on student interest.

###### Faculty

###### Related Disciplines

#### Abstract Algebra: Theory and Applications

##### Advanced , Seminar—Spring

*Prerequisite: Calculus I and Discrete Mathematics or other evidence of successful preparation for advanced study in mathematics; permission of the instructor is required.*

In pre-college mathematics courses, we studied the underlying methodology, concepts, and applications of basic algebra. We appointed letters of the alphabet to abstractly represent unknown quantities and translated real world (and often complicated) problems into simple equations whose solutions, if they could be found, held the key to greater understanding of the situation at hand. Fine, but algebra does not end there. Advanced algebra examines sets of various types of objects (matrices, polynomials, functions, rigid motions, etc.) and the operations that exist on these sets. The approach is axiomatic: One assumes a small number of basic properties, or axioms, and attempts to deduce all other properties of the mathematical system from these few properties. Such abstraction allows us to study, simultaneously, all of the various structures satisfying a given set of axioms and identify both their commonalties and their differences. Specific topics to be covered include groups, actions, isomorphisms, symmetries, permutations, rings, and fields and their various applications.