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

Alan Kaplan, Kevin Wayne

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 class, 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

Gillat Kol, 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

Martin Helmut Wühr, Thomas Gregor

--

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

An Integrated, Quantitative Introduction to the Natural Sciences I

Professor/Instructor

Jennifer Claire Gadd-Reum, Brittany Adamson, Ben Xinzi Zhang

--

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

An Integrated, Quantitative Introduction to the Natural Sciences II

Professor/Instructor

Martin Helmut Wühr, Gregory D. Scholes, Stanislav Yefimovic Shvartsman

--

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

An Integrated, Quantitative Introduction to the Natural Sciences II

Professor/Instructor

Brittany Adamson, Jennifer Claire Gadd-Reum, Ben Xinzi Zhang

--

COS 240

Reasoning About Computation

Professor/Instructor

Ran Raz, Mark Braverman

An introduction to mathematical topics relevant to computer science. Combinatorics, probability and graph theory will be covered in the context of computer science applications. The course will present a computer science approach to thinking and modeling. Students will be introduced to fundamental concepts in theoretical computer science, such as NP-completeness and cryptography that arise from the world view of efficient computation.

COS 302 / SML 305 / ECE 305

Mathematics for Numerical Computing and Machine Learning

Professor/Instructor

Ryan P. Adams

This course provides a comprehensive and practical background for students interested in continuous mathematics for computer science. The goal is to prepare students for higher-level subjects in artificial intelligence, machine learning, computer vision, natural language processing, graphics, and other topics that require numerical computation. This course is intended students who wish to pursue these more advanced topics, but who have not taken (or do not feel comfortable) with university-level multivariable calculus (e.g., MAT 201/203) and probability (e.g., ORF 245 or ORF 309).

ECE 206 / COS 306

Contemporary Logic Design

Professor/Instructor

Sharad Malik, Hossein Valavi

Introduction of the basic concepts in logic design that form the basis of computation and communication circuits. This course will start from scratch and end with building a working computer on which we will run small programs.

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 316

Principles of Computer System Design

Professor/Instructor

Amit Aryeh Levy, Ravi Arun Netravali

This course teaches students the design, implementation, and evaluation of computer systems, including operating systems, networking, and distributed systems.The course will teach students to evaluate the performance and study the design choices of existing systems. Students will also learn general systems concepts that support design goals of modularity, performance, and security. Students will apply materials learned in lectures and readings to design and build new systems components.

COS 318

Operating Systems

Professor/Instructor

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

Amir Ali Ahmadi

An introduction to several fundamental and practically-relevant areas of modern optimization and numerical computing. Topics include computational linear algebra, first and second order descent methods, convex sets and functions, basics of linear and semidefinite programming, optimization for statistical regression and classification, 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 and machine learning, economics, control theory, and engineering.

COS 324

Introduction to Machine Learning

Professor/Instructor

Jia Deng, Ruth Catherine Fong, Sanjeev Arora

This course is a broad introduction to different machine learning paradigms and algorithms and provides a foundation for further study or independent work in machine learning and data science. Topics include linear models for classification and regression, support vector machines, clustering, dimensionality reduction, deep neural networks, Markov decision processes, planning, and reinforcement learning. The goals of this course are three-fold: to understand the landscape of machine learning, how to compute the math behind techniques, and how to use Python and relevant libraries to implement and use various methods.

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., David P. Walker

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

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.

COS 343

Algorithms for Computational Biology

Professor/Instructor

Ben Raphael

This course introduces algorithms for analyzing DNA, RNA, and protein, the three fundamental molecules in the cell. Students will learn algorithms on strings, trees, and graphs and their applications in: sequence comparison and alignment; molecular evolution and comparative genomics; DNA sequencing and assembly; recognition of genes and regulatory elements; and RNA structure and protein interaction networks. Students will also implement algorithms and apply them to biological data.

MAE 345 / COS 346 / ECE 345

Introduction to Robotics

Professor/Instructor

Anirudha Majumdar

Robotics is a rapidly-growing field with applications including unmanned aerial vehicles, autonomous cars, and robotic manipulators. This course will provide an introduction to the basic theoretical and algorithmic principles behind robotic systems. The course will also allow students to get hands-on experience through project-based assignments. Topics include inverse kinematics, motion planning, localization, mapping, vision, and reinforcement learning. Prerequisites: MAT 201 or 203, MAT 202 or 204, COS 126. Recommended ORF 309 and MAE 305. A.B. students ST requirement; B.S.E. students 1st-year science requirement. Two 90-minute lectures.

COS 351 / SPI 351 / SOC 353

Information Technology and Public Policy

Professor/Instructor

This course surveys recurring, high-profile issues in technology policy and law. Each session will explore a challenging topic, including consumer privacy, data security, electronic surveillance, net neutrality, online speech, algorithmic fairness, cryptocurrencies, election security, and offensive operations. The seminar will also cover foundational technical concepts that affect policy and law, including internet architecture, cryptography, systems security, privacy science, and artificial intelligence. Materials and discussion will draw extensively from current events and primary sources.

COS 375 / ECE 375

Computer Architecture and Organization

Professor/Instructor

David I. August

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.

ECE 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.