COS 109 / EGR 109

Computers in Our World

Professor/Instructor

Brian W. Kernighan

Computers are all around us. How does this affect the world we live in? This course is a broad introduction to computing technology for humanities and social science students. Topics will be drawn from current issues and events, and will include discussion of how computers work, what programming is and why it is hard, how the Internet and the Web work, security and privacy. Two 90-minute lectures. Self-scheduled computer laboratory.

COS 126 / EGR 126

Computer Science: An Interdisciplinary Approach

Professor/Instructor

David I. August, Adam Finkelstein

An introduction to computer science in the context of scientific, engineering, and commercial applications. The course will teach basic principles and practical issues, and will prepare students to use computers effectively for applications in computer science, physics, biology, chemistry, engineering, and other disciplines. Topics include: hardware and software systems; programming in Java; algorithms and data structures; fundamental principles of computation; and scientific computing, including simulation, optimization, and data analysis. No prior programming experience required. Video lectures, one or two classes, two preceptorials.

COS 217

Introduction to Programming Systems

Professor/Instructor

Christopher M. Moretti, Szymon M. Rusinkiewicz

An introduction to computer organization and system software. The former includes topics such as processor and memory organization, input/output devices, and interrupt structures. The latter includes assemblers, loaders, libraries, and compilers. Programming assignments are implemented in assembly language and C using the UNIX operating system. Three lectures. Prerequisite: 126 or instructor's permission.

COS 226

Algorithms and Data Structures

Professor/Instructor

Kevin Wayne

This course surveys the most important algorithms and data structures in use on computers today. Particular emphasis is given to algorithms for sorting, searching, and string processing. Fundamental algorithms in a number of other areas are covered as well, including geometric algorithms, graph algorithms, and some numerical algorithms. The course will concentrate on developing implementations, understanding their performance characteristics, and estimating their potential effectiveness in applications. Two online lectures, two class meetings, one precept.

ISC 231 / CHM 231 / COS 231 / MOL 231 / PHY 231

An Integrated, Quantitative Introduction to the Natural Sciences I

Professor/Instructor

Thomas Gregor, Joshua Akey, Martin Helmut Wühr

An integrated, mathematically and computationally sophisticated introduction to physics, chemistry, molecular biology, and computer science. Alternative to the combination of PHY 103-104, CHM 201-202, MOL 214 and COS 126. Students must enroll in ISC231 and ISC232 in the fall and ISC233 and ISC234 in the spring. Prerequisites: familiarity with calculus at the level of MAT103/104 or Advanced Placement Calculus BC, solid high school physics and chemistry courses. Five lectures, one three-hour laboratory, one three-hour computational laboratory, one evening problem session.

ISC 232 / CHM 232 / COS 232 / MOL 232 / PHY 232

An Integrated, Quantitative Introduction to the Natural Sciences I

Professor/Instructor

Thomas Gregor, Joshua Akey, Martin Helmut Wühr

An integrated, mathematically and computationally sophisticated introduction to physics, chemistry, molecular biology, and computer science. Alternative to the combination of PHY 103-104, CHM 201-202, MOL 214 and COS 126. Students must enroll in ISC 231 and ISC 232 in the fall and ISC 233 and ISC 234 in the spring. Prerequisites: familiarity with the calculus at the level of MAT 103-104 or Advanced Placement Calculus BC, solid high school physics and chemistry courses. Five lectures, one three-hour laboratory, one three-hour computational laboratory, one evening problem session.

ISC 233 / CHM 233 / COS 233 / MOL 233 / PHY 233

An Integrated, Quantitative Introduction to the Natural Sciences II

Professor/Instructor

Joshua William Shaevitz, Olga G. Troyanskaya, Martin Helmut Wühr

An integrated, mathematically and computationally sophisticated introduction to physics and chemistry, drawing on examples from biological systems. Alternative to the combination of PHY 103-104, CHM 201-202, MOL 214, and COS 126. Students must enroll in ISC 231 and ISC 232 in the fall and ISC 233 and ISC 234 in the spring. Prerequisites: familiarity with the calculus at the level of MAT 103-104 or Advanced Placement Calculus BC, solid high school physics and chemistry courses. Five lectures, one three-hour laboratory, one three-hour computational laboratory, one evening problem session.

ISC 234 / CHM 234 / COS 234 / MOL 234 / PHY 234

An Integrated, Quantitative Introduction to the Natural Sciences II

Professor/Instructor

Joshua William Shaevitz, Olga G. Troyanskaya, Martin Helmut Wühr

An integrated, mathematically and computationally sophisticated introduction to physics and chemistry, drawing on examples from biological systems. Alternative to the combination of PHY 103-104, CHM 201-202, MOL 214 and COS 126. Students must enroll in ISC 231 and ISC 232 in the fall and ISC 233 and ISC 234 in the spring. Prerequisites: familiarity with the calculus at the level of MAT 103-104 or Advanced Placement Calculus BC, solid high school physics and chemistry courses. Five lectures, one three-hour laboratory, one three-hour computational laboratory, one evening problem session.

ELE 206 / COS 306

Contemporary Logic Design

Professor/Instructor

Sharad Malik

Logic circuits are at the heart of modern computing and communication chips. These deliver valuable societal solutions in several key areas: in information retrieval and processing using smart phones and cloud computing; in smart sensing and control as in emerging chips for human health care; and in critical security applications such as protecting infrastructures like the internet and energy production/distribution systems. Foundational aspects of logic design; contemporary design principles and practices. Three lectures, one laboratory. Prerequisite: an introductory programming course, or equivalent programming experience.

MUS 314 / COS 314

Computer and Electronic Music through Programming, Performance, and Composition

Professor/Instructor

Daniel Laurence Trueman, Jeffrey Owen Snyder

An introduction to the fundamentals of computer and electronic music in the context of the Princeton Laptop Orchestra (PLOrk). The music and sound programming language ChucK, developed here at Princeton, will be used in conjunction with Max/MSP, another digital audio language, to study procedural programming, digital signal processing and synthesis, networking, and human-computer interfacing.

COS 318

Operating Systems

Professor/Instructor

Jaswinder Pal Singh

A study of the design and analysis of operating systems. Topics include: processes, mutual exclusion, synchronization, semaphores, monitors, deadlock prevention and detection, memory management, virtual memory, processor scheduling, disk management, file systems, security, protection, distributed systems. Two 90-minute lectures. Prerequisites: 217 and 226 or instructor's permission.

COS 320

Compiling Techniques

Professor/Instructor

Zachary Kincaid

The principal algorithms and concepts associated with translator systems. Topics include lexical analysis, syntactic analysis, parsing techniques, symbol table management, code generation and optimization, run time system design, implementation issues related to programming language design. Course will include a large-scale programming project utilizing the above topics. Three lectures. Prerequisites: 217 and 226 or instructor's permission.

ORF 363 / COS 323

Computing and Optimization for the Physical and Social Sciences

Professor/Instructor

An introduction to several fundamental and practically-relevant areas of numerical computing with an emphasis on the role of modern optimization. Topics include computational linear algebra, descent methods, basics of linear and semidefinite programming, optimization for statistical regression and classification, trajectory optimization for dynamical systems, and techniques for dealing with uncertainty and intractability in optimization problems. Extensive hands-on experience with high-level optimization software. Applications drawn from operations research, statistics, finance, economics, control theory, and engineering. A. Ahmadi,

COS 326

Functional Programming

Professor/Instructor

Andrew Wilson Appel

An introduction to the principles of typed functional programming. Programming recursive functions over structured data types and informal reasoning by induction about the correctness of those functions. Functional algorithms and data structures. Principles of modular programming, type abstraction, representation invariants and representation independence. Parallel functional programming, algorithms and applications.

COS 333

Advanced Programming Techniques

Professor/Instructor

Robert M. Dondero Jr.

The practice of programming. Emphasis is on the development of real programs, writing code but also assessing tradeoffs, choosing among design alternatives, debugging and testing, and improving performance. Issues include compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop skills in these areas by working on their own code and in group projects. Two 90-minute lectures. Prerequisites: 217 and 226 (as corequisite).

COS 340

Reasoning about Computation

Professor/Instructor

Ran Raz

An introduction to mathematical topics relevant to computer science. Combinatorics and probability will be covered in the context of computer science applications. The course will present a computer science approach to thinking and modeling through such topics as dealing with uncertainty in data and handling large data sets. Students will be introduced to fundamental concepts such as NP-completeness and cryptography that arise from the world view of efficient computation. Prerequisites COS 126 and 226 (or sufficient mathematical background), and MAT 202 or MAT 204 or MAT 217. COS 226 can be taken along with COS 340 in the same term.

MAT 375 / COS 342

Introduction to Graph Theory

Professor/Instructor

Paul Seymour

The fundamental theorems and algorithms of graph theory. Topics include: connectivity, matchings, graph coloring, planarity, the four-color theorem, extremal problems, network flows, and related algorithms. Prerequisite: MAT202 or 204 or 217 or equivalent.

SPI 351 / SOC 353 / COS 351

Information Technology and Public Policy

Professor/Instructor

Edward William Felten

New technologies have changed the way we communicate with each other and learn about our world. They have also raised public policy dilemmas in every area they touch: communications, regulation, privacy, national security, intellectual property and many others. This course is predicated on the belief that we can only productively address the social and policy dimensions of the Internet if we understand the technology behind the Internet; the social-science concepts and research that illuminate the likely effects of policy options; and tradeoffs among fundamental values that different policy options imply. Two ninety-minute seminars.

COS 375 / ELE 375

Computer Architecture and Organization

Professor/Instructor

An introduction to computer architecture and organization. Instruction set design; basic processor implementation techniques; performance measurement; caches and virtual memory; pipelined processor design; design trade-offs among cost, performance, and complexity. Two 90-minute classes, one self-scheduled hardware laboratory. Prerequisites: COS 217.

ELE 381 / COS 381

Networks: Friends, Money and Bytes

Professor/Instructor

This course is oriented around 20 practical questions in the social, economic, and technological networks in our daily lives. How does Google sell ad spaces and rank webpages? How does Netflix recommend movies and Amazon rank products? How do I influence people on Facebook and Twitter? Why doesn't the Internet collapse under congestion, and does it have an Achilles heel? Why does each gigabyte of mobile data cost $10, but Skype is free? How come Wi-Fi is slower at hotspots than at home, and what is inside the cloud of iCloud? In formulating and addressing these questions, we introduce the fundamental concepts behind the networking industry.

ELE 396 / COS 396

Introduction to Quantum Computing

Professor/Instructor

Jeffrey Douglas Thompson

This course will introduce the matrix form of quantum mechanics and discuss the concepts underlying the theory of quantum information. Some of the important algorithms will be discussed, as well as physical systems which have been suggested for quantum computing. Three lectures. Prerequisite: Linear algebra at the level of MAT 202, 204, 217, or the equivalent.

COS 397

Junior Independent Work (B.S.E. candidates only)

Professor/Instructor

David Paul Dobkin, Robert S. Fish

Offered in the fall, juniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.

COS 398

Junior Independent Work (B.S.E. candidates only)

Professor/Instructor

Aarti Gupta, Robert S. Fish

Offered in the spring, juniors are provided with an opportunity to concentrate on a "state-of-the-art" project in computer science. Topics may be selected from suggestions by faculty members or proposed by the student. B.S.E. candidates only.

COS 402

Machine Learning and Artificial Intelligence

Professor/Instructor

This course will provide a basic introduction to the core principles, algorithms and techniques of modern artificial intelligence and machine learning research and practice. Main topics will include: 1. Problem solving using search, with applications to game playing 2. Probabilistic reasoning in the presence of uncertainty 3. Hidden Markov models and speech recognition 4. Markov decision processes and reinforcement learning 5. Machine learning using decision trees, neural nets and more. 6. Basic principles of mathematical optimization for learning. Prerequisites- COS 226 and COS 340

COS 423

Theory of Algorithms

Professor/Instructor

Robert Endre Tarjan

Design and analysis of efficient data structures and algorithms. General techniques for building and analyzing algorithms. Introduction to NP-completeness. Two 90-minute lectures. Prerequisites: 226 and 340 or instructor's permission.