## 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 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 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. The goals of this course are three-fold: to understand the landscape of ml, how to compute the math behind techniques, and how touse Python and relevant libraries to implement and use varioius 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 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 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 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 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 471: Blockchains, Decentralized Trust, and their ApplicationsThis course serves as an introduction to the fast-developing computer science discipline focused on blockchain, decentralized trust, and the applications of these technologies such as cryptocurrencies, NFT's, and new forms of collective organizations. 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.
- 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 495: Special Topics in Computer Science: Probability in Computer ScienceIn this course we will explore applications of probability and randomization in computer science, including: processing and storing big data, hash tables and load balancing, random walks and their applications, and more. We will cover the basics of probability from the ground up, focusing on intuition and applications at each step.
- 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 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 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: 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 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.
- COS 598I: Advanced Topics in Computer Science: Responsible AI in Societal DeploymentWhat responsibilities, and for whom? This course addresses the theoretical and sociotechnical foundations of responsible AI. We survey current approaches, as well as the philosophical, ethical, and legal principles shaping AI in societal deployments. Methodological aspects include: data choice, problem formulation, prediction modeling limits, interventions/causal inference, measuring/mitigating algorithmic biases, algorithmic fairness limits, and impact evaluation via experimental design. We emphasize understanding broader impacts, relating to social justice, via case studies from education, healthcare, financial and social services.
- 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 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 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 433/COS 435: Introduction to Reinforcement LearningReinforcement learning (RL) is a core technology at the heart of modern AI about using machine learning and AI methods to make decisions that lead to good outcomes. In this course, we aim to give an introductory overview of reinforcement learning, fundamentals concepts and algorithms, as well as core challenges in RL including exploration and generalization. The course will also highlight case studies of RL applications to real-world problems, including health care and molecular science. Assignments for this lecture-based course will include written mathematical exercises, implementing RL algorithms, as well as a final group project.
- ECE 462/COS 462: Design of Very Large-Scale Integrated (VLSI) SystemsAnalysis and design of digital integrated circuits using deep sub-micron CMOS technologies as well as emerging and post-CMOS technologies (Si finFETs, III-V, carbon). Emphasis on design, including synthesis, simulation, layout and post-layout verification.Analysis of energy, power, performance, area of logic-gates, interconnect and signaling structures.
- 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 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.
- SOC 555/COS 598J: Limits to PredictionIs everything predictable given enough data and powerful algorithms? This seminar explores that question through social science and computer science research in many domains including life trajectories of individuals, geopolitical events, weather, disease outbreaks, social media and, somewhat speculatively, artificial general intelligence. We aim to identify fundamental limits, learn about common pitfalls, and explore policy implications. Coursework is a mix of reading and empirical work tailored to students' backgrounds. The course is designed to facilitate publishable student research in both social science and computer science.
- 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 neural modeling paradigms. We will discuss techniques for automated processing of human language (morphological analysis, tagging, syntactic and semantic analysis, and language generation) with in-class exercises. Linguistic variation and its impact on computational models will be discussed. Term projects will involve implementing components of speech/text technologies and applications, identifying their limitations, and developing improvements, or any topic relevant to human language processing.