## Computer Science

- COS 126/EGR 126: Computer Science: An Interdisciplinary ApproachAn 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. Lectures, with labs and precepts.
- COS 217: Introduction to Programming SystemsDeveloping programming skills for systems building, including modular program design, programming style, testing, debugging, and performance tuning. Additionally, an introduction to ARM assembly language and machine language.
- COS 226: Algorithms and Data StructuresThis 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.
- COS 302/SML 305: Mathematics for Numerical Computing and Machine LearningThis 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). See "Other Information"
- COS 324: Introduction to Machine LearningProvides a broad introduction to different machine learning paradigms and algorithms, providing a foundation for further study or independent work in machine learning, artificial intelligence, and data science. Topics include linear models for classification and regression, support vector machines, neural networks, clustering, principal components analysis, Markov decision processed, planning, and reinforcement learning.
- COS 333: Advanced Programming TechniquesThis is a course about the practice of programming. Programming is more than just writing code. Programmers must also assess tradeoffs, choose among design alternatives, debug and test, improve performance, and maintain software written by themselves & others. At the same time, they must be concerned with compatibility, robustness, and reliability, while meeting specifications. Students will have the opportunity to develop these skills by working on their own code and in group projects.
- COS 333I: Advanced Programming Techniques (Non-credit)COS 333I offers AB COS concentrators an option for completing one semester of independent work. As such, it does not carry course credit but it does follow the structure and format of the course COS 333. By taking this course not-for-credit, students in COS 333I will have the opportunity to develop their programming skills by working on their own code and in group projects to satisfy the JIW requirement for the semester in which they are enrolled. The cumulative grade for this work will be reflected on students' transcripts as COS 981.
- COS 340: Reasoning about ComputationAn 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 343: Algorithms for Computational BiologyThis 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.
- COS 375/ELE 375: Computer Architecture and OrganizationAn 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.
- COS 398: Junior Independent Work (B.S.E. candidates only)Provides an opportunity for a student 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. The final choice must be approved by the faculty advisor.
- COS 418: Distributed SystemsThis course covers the design and implementation of distributed systems. Students will gain an understanding of the principles and techniques behind the design of modern, reliable, and high-performance distributed systems. Topics include server design, network programming, naming, concurrency and locking, consistency models and techniques, and fault tolerance. Modern techniques and systems employed at some of the largest Internet sites (e.g., Google, Facebook, Amazon) will also be covered. Through programming assignments, students will gain practical experience designing, implementing, and debugging real distributed systems.
- COS 423: Theory of AlgorithmsDesign and analysis of efficient data structures and algorithms. General techniques for building and analyzing algorithms. Introduction to NP-completeness.
- COS 424/SML 302: Fundamentals of Machine LearningComputers have made it possible, even easy, to collect vast amounts of data from a wide variety of sources. It is not always clear, however, how to use those data, and how to extract useful information from them. This problem is faced in a tremendous range of business and scientific applications. This course will focus on some of the most useful approaches to the problem of analyzing large complex data sets, exploring both theoretical foundations and practical applications. Students will gain experience analyzing several types of data, including text, images, and biological data.
- COS 426: Computer GraphicsThis course will study topics in computer graphics, covering methods in image processing, 3D modeling, rendering, and animation. The course is mainly project based and encourages hands-on programming experience.
- COS 432/ELE 432: Information SecurityCourse goals: learn how to design a secure system, probe systems for weaknesses, write code with fewer security bugs, use crypto libraries correctly, protect (or breach!) privacy, and use your powers ethically. Main topics: basic cryptography, system security, network security, firewalls, malware, web security, privacy technologies, cryptocurrencies, human factors, physical security, economics, and ethics of security.
- COS 445: Economics and ComputingComputation and other aspects of our lives are becoming increasingly intertwined. We will study topics on the cusp between economics and computation. The focus will be on the mathematical and computational tools involved in the interaction of economics and computation. Topics: games on networks, auctions, mechanism and market design, computational social choice. The aim of the course is: (1) to understand the game-theoretic issues behind systems involving computation such as online networks, (2) to learn how algorithms and algorithmic thinking can help with designing better decision and allocation mechanisms in an offline world.
- COS 448/EGR 448: Innovating Across Technology, Business, and MarketplacesCourse teaches engineering students about issues tackled by leading Chief Technology Officers: the technical visionaries and/or managers who innovate at the boundaries of technology and business by understanding both deeply, and who are true partners to the CEO, not just implementers of business goals. Focus will be on thinking like a CTO (of a startup and a large company) from technology and business perspectives, and on software and Internet-based businesses. Industry-leading guest speakers provide perspectives too.
- COS 484: Natural Language ProcessingRecent advances have ushered in exciting developments in natural language processing (NLP), resulting in systems that can translate text, answer questions and even hold spoken conversations with us. This course will introduce students to the basics of NLP, covering standard frameworks for dealing with natural language as well as algorithms and techniques to solve various NLP problems, including recent deep learning approaches. Topics covered include language modeling, rep. learning, text classification, sequence tagging, syntactic parsing, and machine translation. The course will have programming assignments, a mid-term and a final project.
- COS 488/MAT 474: Introduction to Analytic CombinatoricsAnalytic Combinatorics aims to enable precise quantitative predictions of the properties of large combinatorial structures. The theory has emerged over recent decades as essential both for the scientific analysis of algorithms in computer science and for the study of scientific models in many other disciplines. This course combines motivation for the study of the field with an introduction to underlying techniques, by covering as applications the analysis of numerous fundamental algorithms from computer science. The second half of the course introduces Analytic Combinatorics, starting from basic principles.
- COS 498: Senior Independent Work (B.S.E. candidates only)Provides an opportunity for a student 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. The final choice must be approved by the faculty advisor.
- COS 510: Programming LanguagesLogic and formal reasoning about software, treating programs and programming languages as mathematical objects about which precise claims can be made. Basic concepts and techniques such as operational semantics and axiomatic semantics for specifying programming languages; structure, definition and properties of type systems; invariants and assertions for specifying programs. Use of automated tools such as interactive proof assistants, model checkers, and/or satisfiability-modulo-theories solvers.
- COS 524: Fundamentals of Machine LearningComputers have made it possible to collect vast amounts of data from a variety of sources. It is not always clear, however, how to use those data, and how to extract useful information from them. This course focuses on some of the most useful approaches to the problem of analyzing large complex data sets, exploring both theoretical foundations and practical applications of machine learning. Course covers classification, regression, clustering, dimension reduction, and time series models. Students gain experience analyzing a variety of data. Prerequisites are introductory linear algebra and statistics.
- COS 529: Advanced Computer VisionAdvanced topics in computer vision, with a focus on recent methods and current research. Topics include 3D vision, recognition, and the intersection of computer vision and other fields. Appropriate for students who have taken COS 429 or equivalent and would like further exposure to computer vision.
- COS 533: Advanced CryptographyThis course covers a selection of advanced topics in cryptography, including some or all of the following: fully homomorphic encryption, zero knowledge proofs, traitor tracing, identity-based encryption, private information retrieval, garbled circuits, secret sharing, multiparty computation, lattice-based cryptography, and elliptic curve-based cryptography.
- COS 534: Fairness in Machine LearningMachine learning discovers and reproduces patterns in existing data. Thus, unthinking application of ML risks perpetuating societal biases including racial and gender bias. This course is about the emerging science of fairness in ML. Topics include: sources of bias in ML; methods for detecting, measuring, and mitigating bias; comparison of fairness criteria; data modeling versus algorithmic modeling; causal inference and fairness; other topics in AI ethics including privacy, accountability, transparency, power, and justice. Students take on hands-on empirical projects of their choosing.
- COS 563: Wireless NetworksThis course is a graduate-level class that explores recent developments in wireless networks and wireless sensing systems. The class aims to develop students' taste in research: what constitutes a good research problem, and what constitutes convincing scientific evidence that a design solves a problem. Students conduct a semester-long project that reproduces research or creates new research, and read/discuss papers in small groups. Topics include abstracting underlying and overlying hardware/layers in the networking stack, integration with overlying applications, and concurrency, performance, and resource allocation in wireless networks.
- COS 584: Advanced Natural Language ProcessingNatural Language Processing (NLP) is witnessing exciting developments in core technologies and applications to a wide variety of domains. This graduate-level course focuses on an advanced study of frameworks, algorithms and methods in NLP -- including state-of-the-art techniques for problems such as language modeling, text classification, machine translation, and question answering. The course contains multiple programming assignments, paper readings, a mid-term and a final project. Students are expected to have taken at least one introductory course in machine learning prior to this class, and be comfortable with programming in Python.
- COS 590: Extramural Research InternshipOne-term full time research internship at a host institution to perform scholarly research directly relevant to a student's dissertation work. Research objectives are determined by the student's advisor in consultation with the outside host. Monthly progress reports and a final paper are required. Enrollment limited to post-generals students. Students are permitted to enroll in this one-semester course at most twice. Participation is considered exceptional.
- COS 598A: Advanced Topics in Computer Science: Operating System Trade-Offs: Performance, Extensibility, and SecurityThis special topics course aims to make you a better system builder, researcher, and paper reader. Systems need to balance how much flexibility, safety, and performance they provide applications. We practice identifying which of these properties a particular research project optimizes. We discuss how the literature treats it. We explore techniques to improve all three. Finally, we discuss open research problems and opportunities in this space. This course is targeted at graduate students with a focus on systems research, as well as non-systems students interested in becoming better system builders.
- COS 598B: Advanced Topics in Computer Science: Mathematical Understanding of Deep LearningThe course focuses on the ongoing quest for mathematical understanding of deep learning. We touch upon various ways to understand dynamics of training and how it affects generalization and other properties of the net. Of special interest is using theoretical insights to understand applications of deep learning to vision, language, self-supervised learning and other domains. We also cover robustness and privacy. The instructor gives most of the lectures. Coursework includes 3 homeworks, scribing lecture notes, and a course project. Not open to undergraduates except for very advanced students approved by the instructor.
- COS 598C: Advanced Topics in Computer Science: Deep Learning for Natural Language ProcessingThis course aims to cover cutting-edge deep learning techniques for natural language processing. The topics include question answering, information extraction, machine translation, summarization, semantic parsing/semantic role labeling, dialogue systems, discourse & coreference etc. We cover each topic in depth and discuss recent important papers on each topic, including background, approaches, evaluation, current limitations & promising future directions. Students are expected to routinely read and present research papers and complete a research project at the end.
- COS 598D: Advanced Topics in Computer Science: Systems and Machine LearningIn this graduate seminar, we plan to read and discuss recent research papers in the intersection between systems and machine learning (ML). We plan to focus on two types of research papers: systems for ML and ML for systems. The first category includes papers about building efficient hardware (e.g. CPU, GPU, FPGA, ASICs) and software (parallel, distributed, secure, privacy-preserving systems for ML. The second category includes papers about how to use ML in systems software and hardware designs including new data structures and optimization methods.
- ELE 475/COS 475: Computer ArchitectureModern computer processor architecture. I/O Architecture. Instruction-set architecture and high-performance processor organization including pipelining and data and instruction parallelism. Cache, memory, and storage architectures. Multiprocessors and multicore processors. Coherent caches. Interconnection and network infrastructures.
- ELE 539/COS 512: Special Topics in Data and Information Science: Optimization for Machine LearningThe course is a graduate level course, focusing on the optimization theory (algorithms and complexity analysis) that arise in machine learning. It covers topics such as convex/nonconvex optimization, gradient methods, accelerations, stochastic algorithms, variance reduction, minimax optimization, etc. The course is proof-based, and mathematical oriented. A similar version of this course has been previously given by Prof. Elad Hazan in CS department on Spring 2019. Prior knowledge on calculus, linear algebra, and probability/statistics is required.
- ISC 233/CHM 233/COS 233/MOL 233/PHY 233: An Integrated, Quantitative Introduction to the Natural Sciences IIAn integrated, mathematically and computationally sophisticated introduction to physics and chemistry, drawing on examples from biological systems. This year long, four course sequence is a multidisciplinary course taught across multiple departments with the following faculty: T. Gregor, J. Shaevitz (PHY); O. Troyanskaya (COS); J. Akey (EEB); E. Wieschaus, M. Wuhr (MOL); B. Bratton, J. Gadd, A. Mayer, Q. Wang (LSI). Five hours of lecture, one experimental lab, one three-hour precept.
- ISC 234/CHM 234/COS 234/MOL 234/PHY 234: An Integrated, Quantitative Introduction to the Natural Sciences IIAn integrated, mathematically and computationally sophisticated introduction to physics and chemistry, drawing on examples from biological systems. This year long, four course sequence is a multi-disciplinary course taught across multiple departments with the following faculty: T. Gregor, J. Shaevitz (PHY); O. Troyanskaya (COS); J. Akey (EEB); E. Wieschaus, M. Wuhr (MOL); B. Bratton, J. Gadd, A. Mayer, Q. Wang (LSI). Five hours of lecture, one three-hour lab, one three-hour precept.
- MAT 375/COS 342: Introduction to Graph TheoryThe 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.
- ORF 363/COS 323: Computing and Optimization for the Physical and Social SciencesAn 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.
- SOC 414/COS 415: Can We Build Anti-Racist Technologies?From soap dispensers that don't see dark skin, to facial recognition tools that misidentify black faces, scholars and citizens have documented how the devices and tools we use compound inequalities in society. This Princeton Challenge intervenes in this trend by asking what would it look like to build explicitly anti-racist systems? Students will work in teams to design, build and test systems that embrace anti-racism as a core value, drawing on sociology of race, technology, and Human-Computer Interaction, and scholarship on anti-racism. Students from all sectors of campus, with or without technical backgrounds welcome.
- TRA 301/COS 401/LIN 304: Introduction to Machine TranslationThis course will provide an in-depth study of the Machine Translation paradigms (direct, transfer, statistical/example, interlingua and neural network) used in state-of-the-art speech-to-speech and text-based MT systems, from computational and linguistic perspectives. Techniques for processing human languages (morphological analysis, tagging, syntactic and semantic parsing, and language generation) will be discussed. Linguistic variation across languages and its impact on computational models will be presented. Projects will involve implementing speech/text translation components, identifying their limitations and suggesting improvements.