## 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 205: Nand to Tetris: Building a Modern Computer from First PrinciplesA hands-on synthesis of key topics from digital architectures and software engineering in one course. Starting with the most elementary logic gate, Nand, students build a general-purpose computer system that can run Tetris, and any other program. You will learn how computers work, how they are constructed, and how to plan and build large-scale systems. The hardware platform (logic gates, RAM, CPU) is built in a simple Hardware Description Language, learned in the course; The software hierarchy (assembler, compiler, basic OS) is built in Java. Assignments are done in pairs and are supported by extensive scaffolding and partial implementations.
- 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 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 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 351/SPI 351/SOC 353: Information Technology and Public PolicyThis 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 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 429: Computer VisionThis course is an introduction to the concepts of 2D and 3D computer vision. It surveys a wide range of topics from level-level vision to high-level recognition. We will discuss concepts such as filtering and edge detection; cameras and shape reconstruction; segmentation and clustering; optical flow and tracking; object recognition; motion recognition; statistical modeling of visual data, etc. Throughout the course, there will also be examination of aspects of human vision and perception that guide and inspire computer vision techniques.
- 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 433/MAT 473: CryptographyAn introduction to the theory and practice of modern cryptography, with an emphasis on the fundamental ideas. Topics covered include private key and public key encryption schemes, digital signatures, pseudorandom generators and functions, chosen ciphertext security, and some advanced topics.
- 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 461: Computer NetworksSurvey of computer networks covering end-to-end principle, multiplexing, virtualization, packet switching vs. circuit switching, router design, network protocols, congestion control, internet routing architecture, network measurement, network management, and overlay networks. Survey of research papers from classic literature through contemporary research.
- COS 471: 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 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. Multilayer perceptrons, convolutional networks, and recurrent networks. Backpropagation and Hebbian learning. Models of perception, language, memory, and neural development.
- 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 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.
- 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 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 528: Data Structures and Graph AlgorithmsAdvanced topics in data structures and algorithms for graph and network problems. The intent of the course is to examine the most efficient algorithms known for a variety of combinatorial problems and to discover the principles underlying the design and analysis of these algorithms. The emphasis is on asymptotic worst-case and amortized analysis. We discuss both sequential and concurrent data structures and algorithms.
- COS 561: Advanced Computer NetworksSurvey of computer networks covering end-to-end principle, multiplexing, virtualization, packet switching vs. circuit switching, router design, network protocols, congestion control, internet routing architecture, network measurement, network management, and overlay networks. Survey of research papers from classic literature through contemporary research.
- 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: Principles of Programming LanguagesThis course offers an introduction to principles of programming languages through the definition of little languages such as Kleene algebra, the lambda calculus, and the pi calculus. It covers topics in denotational and operational semantics of programming languages, techniques for reasoning about programming languages, type systems, logics, and programs, principles of programming language design such as compositionality, orthogonality, soundness, and completeness, proof techniques such as logical relations, and the relationship between programming languages and formal logic.
- COS 598B: Advanced Topics in Computer Science: Ethics in Computer Systems Research and PracticeThis course explores what implications computer systems have in the real world, whether systems researchers and practitioners have an ethical obligation to consider those implications, as well as what those ethical obligations might be. We discuss readings and other media from in and outside Computer Science that deal with ethics in systems for AI/ML, "Big Data," privacy, security, and anonymity, peer-to-peer systems, cryptocurrencies (and, so-called, "Web 3").
- COS 598C: Advanced Topics in Computer Science: Artificial Mechanical IntelligenceMechanical intelligence, also referred to as "morphological computation", is the idea that the physical dynamics of an actuator may interact with a control system to effectively reduce the computational burden of solving the control task. Biological systems exhibit mechanical intelligence in a variety of ways, from the compliance of digits in primate grasping, to the natural frequencies of legged locomotion to dead fish being able to "swim" in vortices. How can we build artificial systems that exhibit these traits?
- COS 598D: Advanced Topics in Computer Science: Systems and Machine LearningIn this graduate seminar, we plan to read and discuss two types of recent research papers at the intersection between systems and machine learning (ML): systems for ML and ML for systems. The first category includes papers about building efficient hardware and software for ML, including parallel, distributed, secure, privacy-preserving systems. The second category includes papers about how to apply ML in designing hardware and software systems, 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 368/COS 368: Introduction To Wireless Communication SystemsCommunication systems have become a ubiquitous part of modern life. This course introduces students to the basics of digital communication and wireless systems. Topics include concepts from signal modulation and radio propagation to wireless networks and mobile systems. Students will also gain hands-on experience through working with software-defined radios and will learn about the implementation aspects of practical systems. Additionally, students will learn data analysis and learning techniques relevant to perceiving wireless signals.
- 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.
- ECE 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 in Spring 2019.
- 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: G. Scholes (CHM), T. Gregor, J. Shaevitz (PHY); Britt Adamson, John Storey, M. Wuhr (MOL); J. Gadd-Reum, H. McNamara, S. Ryabichko, B. Zhang (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 multidisciplinary course taught across multiple departments with the following faculty: G. Scholes (CHM), T. Gregor, J. Shaevitz (PHY); Britt Adamson, John Storey, M. Wuhr (MOL); J. Gadd-Reum, H. McNamara, S. Ryabichko, B. Zhang (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.
- QCB 311/COS 311: GenomicsAdvances in molecular biology and computation have propelled the study of genomics forward, including how genes are organized and how their regulation manifests complex phenotypes. A hallmark of genomics is the production and analysis of large data sets. This course will pair an overview of genomics with practical instruction in the analytical techniques required to use it in research and medicine. We will start with a primer on genetics and an introduction to programming using Python. The goal of this course is to provide a foundation for understanding the data heavy experiments that are increasingly common in biomedical research.
- 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. We will discuss techniques for processing human languages (morphological analysis, tagging, syntactic and semantic parsing, and language generation) with hands-on, in-class exercises. Linguistic variation and its impact on computational models will be presented. Term projects will involve implementing components of speech/text technologies, identifying their limitations, and suggesting improvements, or any topic relevant to language processing.