## Computer Science

- CEE 520/COS 520: Advanced Topics in Network ScienceNetworks matter! This holds for technical infrastructures, information systems and social media in the WWW, but also for various social, economic and biological systems. What can we learn from data that capture the topology of such complex systems? How can we discover significant patterns in the structure of networks? This course equips you with the analysis techniques needed to answer such questions based on network data across different disciplines. You learn how networked systems can be modeled, how patterns in their topology can be characterized quantitatively, and how complex macroscopic features emerge from simple processes.
- COS 126/EGR 126: Computer Science: An Interdisciplinary ApproachWeekly: two lectures, 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 skills for composing large programs, including modularity, abstraction, programming style, and best practices for code development, testing, debugging, and performance tuning. Additionally, an overview of computing environments and architectures, through the C programming language, 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 and data structures for sorting, searching, and graphs. Advanced topics include randomization, intractability, and multiplicative weights. 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 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. The goals of this course are three-fold: to understand the landscape of ML, how to compute the mathematics behind techniques, and how to use Python and relevant libraries to implement and use various methods.
- 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 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 398: Junior Independent Work (B.S.E. candidates only)This course provides an opportunity for a student to pursue Independent Work in Computer Science driven by a student's interests and skills. The work must be conducted under the supervision of a faculty member, and must result in a final paper. 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 417: Operating SystemsAn introduction to operating systems. Emphasis is on the fundamentals of how to design and implement an operating system. Topics include operating system structure, processes, threads, synchronizations, concurrent programming, interprocess communications, virtual memory, and file systems.
- 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, 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.
- COS 435/ECE 433: Introduction to Reinforcement LearningReinforcement learning (RL) is a machine learning technique that teaches agents how to make decisions that lead to good outcomes. This course will introduce fundamental concepts, important RL algorithms, and key challenges (e.g., exploration and generalization). The course will also highlight applications of RL to real-world problems, including health care and molecular science. Assignments will entail implementation of RL algorithms and mathematical analysis of these algorithms. Students will complete an open-ended final group project.
- 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: matching, 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 MarketplacesThis course introduces computer science and technology-oriented students to issues tackled by Chief Technology Officers: the technical visionaries and managers innovating at the boundaries of technology and business. These individuals are partners to the business leaders of the organization, not merely implementers of business goals. The course covers companies from ideation and early-stage startup, to growth-stage startup, to mature company, covering the most relevant topics at each stage, including ideation, financing, product-market fit, go-to-market approaches, strategy, execution, and management. Exciting industry leaders guest lecture.
- 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 485: Neural Networks: Theory and ApplicationsOrganization of synaptic connectivity as the basis of neural computation and learning. Perceptrons, convolutional nets, transformers, and diffusion models. Engineering applications including computer vision and natural language processing.
- COS 498: Senior Independent Work (B.S.E. candidates only)This course provides an opportunity for a student to pursue Independent Work in Computer Science driven by a student's interests and skills. The work must be conducted under the supervision of a faculty member, and must result in a final paper. 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 513/SML 513: Foundations of Probabilistic ModelingThis course covers fundamental topics in probabilistic modeling, an important area of machine learning research. We learn how to model data and develop algorithms to learn the structure underlying these data for the purpose of prediction and decision-making. We cover several model classes--conditional and unconditional models--and several inference algorithms, including variational inference, the algorithm behind variational auto-encoders. At the end of the course, students should be well-equipped to come up with a probabilistic model and inference algorithm for their data, and use the fitted model for tasks of interest.
- 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 explores the boundaries of efficient computation. This course introduces some of the most engaging ideas in complexity theory, showcasing how advanced mathematical methods can address profound philosophical questions. We explore the significance of the P vs NP problem, analyzing approaches like diagonalization and circuit lower bounds, while also examining why progress has been slow. Topics include proof systems such as zero-knowledge proofs, interactive proofs, and probabilistically checkable proofs
- COS 526/ECE 576: Neural RenderingRecent advances in neural rendering have made it possible to generate novel photo-realistic views of real-world 3D scenes just from a set of regular images. The most successful approaches combine ideas from computer graphics, machine learning, and optimization. Specifically, neural rendering methods such as NeRF or DeepFusion combine conventional volumetric rendering methods with a coordinate-based neural networks trained to predict continuous density and radiance estimates. These learned scene representations also have broad application across a wide set of domains, including virtual reality, robotics, health, and computer vision.
- 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 557/QCB 557: Artificial Intelligence for Precision HealthIntroduces students to the promise and challenges of AI and machine learning methods, including large language models, in precision health. Topics covered will include analysis of genomes, omics, and clinical data, as well as learning from multiple data sources. No prior knowledge of biology or medicine is required; an introduction to these topics and the nature of biological data will be provided. In depth knowledge of AI is not required, but students should have basic familiarity with coding and computer science.
- COS 583/ECE 583: Great Moments in ComputingCourse covers pivotal developments in computing, including hardware, software, and theory. Material will be covered by reading seminal papers, patents, and descriptions of highly-influential architectures. Course emphasizes a deep understanding of the discoveries and inventions that brought computer systems to where they are today, and class is discussion-oriented. Final project or paper required. Graduate students and advanced undergraduates from ELE, COS, and related fields welcome.
- 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: Verification and SynthesisThis seminar explores research advances in automated reasoning with applications in formal verification and synthesis. We study recent papers from a variety of application domains - networks, distributed systems, systems-on-chip, machine learning. Students are expected to lead class discussions and do a class project of their choice.
- COS 598B: Advanced Topics in Computer Science: Machine BehaviorAutomated systems powered by artificial intelligence are ubiquitous in our everyday lives, and their role in society may increase as LLMs grow more popular and powerful. At the same time, recent work has shown that LLMs can simulate and predict human behavior. Thus, understanding and steering the behavior of such systems can amplify their benefits, mitigate their harms, and increase our understanding of human behavior. This seminar course aims to facilitate publishable student research on the emerging field of machine behavior. Coursework is a mix of reading and empirical work tailored to make students catch up with research in the field.
- COS 598C: Advanced Topics in Computer Science: Clifford Analysis and ApplicationsClifford algebras provide powerful abstractions for reasoning about geometry. In the setting of analysis, they make it possible to reason about properties of manifolds and flows using multivector derivatives. This flexible derivative subsumes many of the useful properties of differential forms, along with further generalizations of, e.g., Stokes' theorem. In this seminar we learn about these mathematical tools and explore how they can be applied to problems in computer science, physics, and engineering.
- COS 598D: Advanced Topics in Computer Science: Cryptographic Proof SystemsThe notion of a proof in computer science has been radically re-imagined over the last forty years, now allowing for "proof systems" that make crucial use of the following resources:(1) randomization (2) interaction, and (3) computational intractability.We study proof systems in the cryptographic setting, focusing on two fundamental properties: "zero-knowledge," which is the ability to prove a statement without conveying any information beyond its validity, and "succinctness," which is the ability to provide extremely short (and easy-to-check) proofs of long and complex statements.
- COS 598I: Advanced Topics in Computer Science: Matrix Concentration and ApplicationsThis course is about the applications of matrix or non-commutative concentration inequalities in theoretical computer science. We establish non-commutative Khintchine and the Chernoff bounds and then develop various applications, including undirected and directed graph sparsification, various rainbow girth problems in extremal combinatorics (e.g., the rainbow cycle conjecture and variants), and average-case analysis of algorithms, e.g., spectral clustering, connections to problems in discrepancy theory (e.g, the matrix Spencer conjecture and the Kadison Singer problem), and to free probability.
- ECE 346/COS 348/MAE 346/ROB 346: Intelligent Robotic SystemsRobotic systems are quickly becoming more capable and adaptable, entering new domains from transportation to healthcare. To reliably carry out complex tasks in changing environments and around people, these systems rely on increasingly sophisticated artificial intelligence. This course covers the core concepts and techniques underpinning modern robot autonomy, including planning under uncertainty, imitation and reinforcement learning, multiagent interaction, and safety. The lab component introduces the Robot Operating System (ROS) framework and applies the learned theory to hands-on autonomous driving assignments on 1/16-scale robot trucks.
- ECE 432/COS 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.
- ECE 473/COS 473: Elements of Decentralized FinanceBlockchains are digital platforms whose consistency and liveness are maintained by a decentralized set of participants. The combination of programmability, permissionless access and the financial nature of the underlying token (e.g., ETH in the Ethereum blockchain) has led to tremendous innovation in financial products on the blockchain, broadly covered under the rubric of decentralized finance or simply DeFi. The purpose of this course is to introduce these developments classified as "elements" of DeFi, from a computer science point of view. Periodic programming assignments provide a hands-on instruction to the technical material.
- 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.
- 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.
- QCB 311/MOL 311/COS 311: GenomicsAdvances in molecular biology and computation have propelled the study of genomics forwards. A hallmark of genomics is the production and analysis of large datasets. This course will pair an overview of genomics with practical instruction in the analytical techniques required to use it in research and medicine. Topics include single-cell genomics, RNA-seq, epigenetics, genome engineering including CRISPR, and clinical genomics. We start with a genetics primer and an intro to programming using Python. Our goal is to provide a foundation for understanding the design and analysis of data-heavy experiments common in biomedical research.
- TRA 301/COS 401/LIN 304: Introduction to Machine TranslationThis course will provide an in-depth understanding of Machine Translation from computational and linguistic perspectives, spanning classical to Generative AI paradigms. We will discuss techniques for automated processing of human language (morphological, syntactic and semantic analysis, tagging, and language generation) with in-class programming exercises. We will cover latest techniques for scalable language technologies in production-scale applications. Projects will involve implementing components of speech/text technologies, identifying limitations, developing improvements, or any other topic relevant to human language processing.