## Computer Science

- COS 126/EGR 126: Computer Science: An Interdisciplinary ApproachWeekly: two recorded video lectures, one class meeting, two preceptorials. An introduction to computer science in the context of scientific, engineering, and commercial applications. The goal of the course is to teach basic principles and practical issues, while at the same time preparing 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.
- 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, graphs, and strings. The course concentrates on developing implementations, understanding their performance characteristics, and estimating their potential effectiveness in applications.
- COS 240: 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 302/SML 305/ECE 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 316: Principles of Computer System DesignThis 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 320: Compiling TechniquesUnderstand the design and construction of compilers. Concepts include syntax analysis, semantics, code generation, and optimization. Translation of imperative languages (such as C), functional languages (such as ML), and object-oriented languages (such as Java) will be studied. Students will implement a complete compiler for a small language.
- 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 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 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/ECE 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 495: Special Topics in Computer Science: Web3: Blockchains, Cryptocurrencies, and DecentralizationThis course serves as an introduction to the fast-developing world of Web3, focused on the applications of blockchains, cryptocurrencies, and decentralization through technology. Students will learn about blockchains and the decentralization of trust and power through technology, launch a cryptocurrency token, create non-fungible tokens, and build an application on a blockchain. We will also discuss applications, ethical implications, and policy questions around decentralization. See "Other Information" below.
- 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 511: Theoretical Machine LearningCan the mechanism of learning be automated and implemented by a machine? In this course we formally define and study various models that have been proposed for learning. The course presents and contrasts the statistical, computational and game-theoretic models for learning. Likely topics include: intro to statistical learning theory and generalization; learning in adversarial settings and the on-line learning model; using convex optimization to model and solve learning problems; learning with partial observability; boosting; reinforcement learning and control; introduction to the theory of deep learning.
- COS 513/SML 513: Foundations of Probabilistic ModelingThis course covers fundamental topics in probabilistic modeling and allows you to contribute to this important area of machine learning and apply it to your work. We learn how to model data arising from different fields and devise algorithms to learn the structure underlying these data for the purpose of prediction and decision making. We cover several model classes--including deep generative models--and several inference algorithms, including variational inference and Hamiltonian Monte Carlo. Finally, we cover evaluation methods for probabilistic modeling as well as tools to challenge our models' assumptions.
- COS 518: Advanced Computer SystemsCOS 518 is a graduate course in computer systems. Its goals are: (1) To understand the core concepts of computer systems, rather than particular implementation details. (2) To understand the state of the art in distributed, storage, mobile, and operating systems. (3) To understand how to engage in cutting-edge systems research and development. This course assumes a basic familiarity with computer systems and networking concepts.
- COS 522/MAT 578: Computational ComplexityComputational complexity theory is a mathematical discipline that studies efficient computation. The course covers some of the truly beautiful ideas of modern complexity theory such as: approaches to the famous P vs NP question and why they are stuck; complexity classes and their relationship; circuit lower bounds; proof systems such as zero knowledge proofs, interactive proofs and probabilistically checkable proofs; hardness of approximation; de-randomization and the hardness vs randomness paradigm; quantum computing.
- COS 585: Information Theory and ApplicationsThe notions of entropy and information, originated in statistical physics and electrical engineering, have become central in almost all branches of modern science. The course gives an introduction to information theory and its applications, from the perspective of math, computer science and theoretical computer science. The course is intended for students from all areas of computer science, as well as math, physics, bio-informatics and electrical engineering.
- 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: Machine Learning (ML)-Driven Video SystemsVideo applications are pervasive, ranging from streaming and virtual reality to real-time conferencing and analytics. As these applications evolve, however, they face an increasing tension between the rich experiences and strict performance objectives that users demand. For instance, many services require increasingly data-dense videos or high-accuracy (expensive) neural networks for analytics, but must operate smoothly in resource-constrained mobile settings. This research-driven class explores a range of systems and machine learning optimizations that improve the performance, efficiency, and robustness of modern video applications.
- 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 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.
- ECE 346/COS 348/MAE 346: Intelligent Robotic SystemsRobotic systems are quickly becoming more capable and adaptable, entering new domains from transportation to healthcare. To operate in dynamic environments, interact with other agents, and accomplish complex tasks, these systems require sophisticated decision-making. This course delves into the core concepts and techniques underpinning modern autonomous robots, including planning under uncertainty, active perception, learning-based control, and multiagent decision-making. Lectures cover the theoretical foundations and the practical component introduces the Robot Operating System (ROS) framework through hands-on assignments with mobile robots.
- ECE 475/COS 475: Computer ArchitectureAn in-depth study of the fundamentals of modern computer processor and system architecture. Students will develop a strong theoretical and practical understanding of modern, cutting-edge computer architectures and implementations. Studied topics include: Instruction-set architecture and high-performance processor organization including pipelining, out-of-order execution, as well as data and instruction parallelism. Cache, memory, and storage architectures. Multiprocessors and multicore processors. Coherent caches. Interconnection and network infrastructures.
- 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); S. Biswas, J. Gadd, A., Kalra, O. Kimchi, A. Mayer, H. McNamara, C. Yuste (LSI). Five hours of lecture, one three-hour experimental lab, one three-hour computational lab.
- 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); J. Gadd, B. Husic, O. Kimchi, A. Mayer, H. McNamara (LSI). Five hours of lecture, one three-hour experimental lab, one three-hour computational lab.
- 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 409/COS 409: Critical Approaches to Human Computer InteractionCan we design computing systems based on virtues like data stewardship, anti-racism, or sustainability? Would that help us to avoid the problems of contemporary systems like surveillance, data financialization, racial bias, and speed, while still engaging novice users, keeping data secure, and producing sustainable solutions? This seminar draws on interpretative social sciences, critical humanities, and computing to explore alternative, socially-responsible designs for future sociotechnical systems.
- SPI 586F/COS 586: Topics in STEP: Technology Policy and LawThis course examines a range of infotech policy issues, including privacy, intellectual property, free speech, competition, regulation of broadcasting and telecommunications, cross-border and jurisdictional questions, broadband policy, spectrum policy, management of the Internet, computer security, education and workforce development, and research funding. Assignments consist of weekly reading, weekly writing assignments, and a final project. This course is suitable for students without any special technical background.
- TRA 301/COS 401/LIN 304: Introduction to Machine TranslationThis course will provide an in-depth study of Machine Translation paradigms 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 with hands-on, in-class exercises. Linguistic variation and its impact on computational models will be presented. Term projects will involve implementing speech/text translation components, identifying their limitations and suggesting improvements or any topic of relevance to language processing.