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.
Computers in Our World
Professor/Instructor
Brian W. KernighanComputer Science: An Interdisciplinary Approach
Professor/Instructor
Alan Kaplan, Kevin WayneAn 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.
Introduction to Programming Systems
Professor/Instructor
Christopher M. Moretti, Szymon M. RusinkiewiczAn 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.
Algorithms and Data Structures
Professor/Instructor
Gillat Kol, Kevin WayneThis 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.
An Integrated, Quantitative Introduction to the Natural Sciences I
Professor/Instructor
Martin Helmut Wühr, Thomas Gregor--
An Integrated, Quantitative Introduction to the Natural Sciences I
Professor/Instructor
Jennifer Claire Gadd-Reum, Brittany Adamson, Ben Xinzi Zhang--
An Integrated, Quantitative Introduction to the Natural Sciences II
Professor/Instructor
Martin Helmut Wühr, Gregory D. Scholes, Stanislav Yefimovic Shvartsman--
An Integrated, Quantitative Introduction to the Natural Sciences II
Professor/Instructor
Brittany Adamson, Jennifer Claire Gadd-Reum, Ben Xinzi Zhang--
Reasoning About Computation
Professor/Instructor
Ran Raz, Mark BravermanAn 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.
Mathematics for Numerical Computing and Machine Learning
Professor/Instructor
Ryan P. AdamsThis 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).
Contemporary Logic Design
Professor/Instructor
Sharad Malik, Hossein ValaviIntroduction 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.
Computer and Electronic Music through Programming, Performance, and Composition
Professor/Instructor
Daniel Laurence Trueman, Jeffrey Owen SnyderAn 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.
Principles of Computer System Design
Professor/Instructor
Amit Aryeh Levy, Ravi Arun NetravaliThis 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.
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.
Compiling Techniques
Professor/Instructor
Zachary KincaidThe 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.
Computing and Optimization for the Physical and Social Sciences
Professor/Instructor
Amir Ali AhmadiAn 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.
Introduction to Machine Learning
Professor/Instructor
Jia Deng, Ruth Catherine Fong, Sanjeev AroraThis 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.
Functional Programming
Professor/Instructor
Andrew Wilson AppelAn 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.
Advanced Programming Techniques
Professor/Instructor
Robert M. Dondero Jr., David P. WalkerThe 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).
Introduction to Graph Theory
Professor/Instructor
Paul SeymourThe 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.
Algorithms for Computational Biology
Professor/Instructor
Ben RaphaelThis 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.
Introduction to Robotics
Professor/Instructor
Anirudha MajumdarRobotics 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.
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.
Computer Architecture and Organization
Professor/Instructor
David I. AugustAn 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.
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.