All Courses
This is a comprehensive list of courses offered by the Computer Science Deparment since approximatly 2011.
Courses & Curriculum Related Resources
CSD Current Courses | Full Schedule of Classes | Undergraduate Curriculum Requirements
Bachelor's — additional information is available in the Undergraduate Catalog
Graduate Curriculum Information MSCS Handbook | Fifth Year Master's Handbook | Ph.D. Handbook
While the course will not be overly technical on any specific dimension, it will be hands on and you will need to be creative. Therefore, while there are no formal prerequisites, we expect students to have a background in economics, cryptography, or computer science and all students should have some basic comfortability with programming. We will do our best to create groups that feature a mix of existing knowledge. The overall goal is to deliver enough knowledge about the potential and capabilities of blockchain technologies to enable students interested in this space to develop their own uses cases or applications.
Instructor(s)
Elaine Shi
Click to read more...
While the course will not be overly technical on any specific dimension, it will be hands on and you will need to be creative. Therefore, while there are no formal prerequisites, we expect students to have a background in economics, cryptography, or computer science and all students should have some basic comfortability with programming. We will do our best to create groups that feature a mix of existing knowledge. The overall goal is to deliver enough knowledge about the potential and capabilities of blockchain technologies to enable students interested in this space to develop their own uses cases or applications.
Instructor(s)
Michael J Mccarthy
Ariel Zetlin-Jones
Click to read more...
While the course will not be overly technical on any specific dimension, it will be hands on and you will need to be creative. Therefore, while there are no formal prerequisites, we expect students to have a background in economics, cryptography, or computer science and all students should have some basic comfortability with programming. We will do our best to create groups that feature a mix of existing knowledge. The overall goal is to deliver enough knowledge about the potential and capabilities of blockchain technologies to enable students interested in this space to develop their own uses cases or applications.
Instructor(s)
Elaine Shi
Ariel Zetlin-Jones
Michael J Mccarthy
Click to read more...
Computers are used to synthesize sound, process signals, and compose music. Personal computers have replaced studios full of sound recording and processing equipment, completing a revolution that began with recording and electronics. In this course, students will learn the fundamentals of digital audio, basic sound synthesis algorithms, and techniques for digital audio effects and processing. Students will apply their knowledge in programming assignments using a very high-level programming language for sound synthesis and composition. In a final project, students will demonstrate their mastery of tools and techniques through music composition or by the implementation of a significant sound-processing technique.
Instructor(s)
Chris Donahue
Thomas Cortina
Click to read more...
Computers are used to synthesize sound, process signals, and compose music. Personal computers have replaced studios full of sound recording and processing equipment, completing a revolution that began with recording and electronics. In this course, students will learn the fundamentals of digital audio, basic sound synthesis algorithms, and techniques for digital audio effects and processing. Students will apply their knowledge in programming assignments using a very high-level programming language for sound synthesis and composition. In a final project, students will demonstrate their mastery of tools and techniques through music composition or by the implementation of a significant sound-processing technique.
Instructor(s)
Chris Donahue
Click to read more...
Computers are used to synthesize sound, process signals, and compose music. Personal computers have replaced studios full of sound recording and processing equipment, completing a revolution that began with recording and electronics. In this course, students will learn the fundamentals of digital audio, basic sound synthesis algorithms, and techniques for digital audio effects and processing. Students will apply their knowledge in programming assignments using a very high-level programming language for sound synthesis and composition. In a final project, students will demonstrate their mastery of tools and techniques through music composition or by the implementation of a significant sound-processing technique.
Click to read more...
IMPORTANT: This version of Intro to Computer Music will feature a significant redesign. A key change is that the course will now be using Python as a teaching language for instruction/assignments. Intro to Computer Music teaches you to program computers to synthesize, process, and understand music and sound signals. It is taught simultaneously to both undergraduate (322) and graduate (622) sections. This course is both technical and creative---think of it as the musical equivalent to a CS course on computer graphics. Projects will task you to both (i) apply technical skills to create musical tools, (ii) exercise your creativity using those tools. A background in programming *is* required (15-112 or equivalent at a minimum), but formal training in music *is not* required. Understanding the signal processing concepts in this course also requires a reasonable comfort level with trigonometry, calculus, and complex numbers, though mathematics is not the primary focus of this course.
Instructor(s)
Chris Donahue
Click to read more...
Computers are used to synthesize sound, process signals, and compose music. Personal computers have replaced studios full of sound recording and processing equipment, completing a revolution that began with recording and electronics. In this course, students will learn the fundamentals of digital audio, basic sound synthesis algorithms, and techniques for digital audio effects and processing. Students will apply their knowledge in programming assignments using a very high-level programming language for sound synthesis and composition. In a final project, students will demonstrate their mastery of tools and techniques through music composition or by the implementation of a significant sound-processing technique.
Instructor(s)
Chris Donahue
Click to read more...
The Monte Carlo method uses random sampling to solve computational problems that would otherwise be intractable, and enables computers to model complex systems in nature that are otherwise too difficult to simulate. This course provides a first introduction to Monte Carlo methods from complementary theoretical and applied points of view, and will include implementation of practical algorithms. Topics include random number generation, sampling, Markov chains, Monte Carlo integration, stochastic processes, and applications in computational science. Students need a basic background in probability, multivariable calculus, and some coding experience in any language.
Instructor(s)
Keenan Crane
Gautam Iyer
Click to read more...
In this course, students will learn the mathematical foundations of blockchains, including how to construct distributed consensus protocols and prove them secure, cryptography for blockchains, and mechanism design for blockchains. This course will take a mathematically rigorous approach. Students are expected to have mathematical maturity and be able to write formal mathematical proofs. Students may also be expected to implement some consensus or cryptographic algorithms. This course is crosslisted with 15-435. Graduate students should take 15-635. Undergraduates should take 15-435.
Instructor(s)
Elaine Shi
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
Dave Eckhardt
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
Ruben Martins
Dave Eckhardt
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
Dave Eckhardt
Ruben Martins
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
Dave Eckhardt
David O'Hallaron
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
David O'Hallaron
Ruben Martins
Dave Eckhardt
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
Ruben Martins
Dave Eckhardt
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
Ruben Martins
Dave Eckhardt
Click to read more...
This class is for master's students contributing to the development and delivery of a class, e.g., in a co-instructor role or as a preparation for teaching professionally. Students will be supervised by a faculty member and will participate in graduate teaching support activities sponsored by the Eberly Center for Teaching Excellence and Educational Innovation. You must contact your academic advisor to be enrolled in the class.
Instructor(s)
Dave Eckhardt
Ruben Martins
Click to read more...
The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Instructor(s)
Mahadev Satyanarayanan
Babu Pillai
Click to read more...
The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Instructor(s)
Babu Pillai
Rashmi Korlakai Vinayak
Mahadev Satyanarayanan
Click to read more...
The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Instructor(s)
Mahadev Satyanarayanan
Babu Pillai
Click to read more...
The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Instructor(s)
Heather Miller
Wenting Zheng
Click to read more...
The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Instructor(s)
Wenting Zheng
Heather Miller
Click to read more...
The goals of this course are twofold: First, for students to gain an understanding of the principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Second, for students to gain practical experience designing, implementing, and debugging real distributed systems. The major themes this course will teach include scarcity, scheduling, concurrency and concurrent programming, naming, abstraction and modularity, imperfect communication and other types of failure, protection from accidental and malicious harm, optimism, and the use of instrumentation and monitoring and debugging tools in problem solving. As the creation and management of software systems is a fundamental goal of any undergraduate systems course, students will design, implement, and debug large programming projects. As a consequence, competency in both the C and Java programming languages is required.
Instructor(s)
Charlie Garrod
Benjamin Titzer
Yuvraj Agarwal
Click to read more...
The emphasis in this course will be on the basic performance and engineering trade-offs in the design and implementation of computer networks. To make the issues more concrete, the class includes several multi-week projects requiring significant design and implementation.
Instructor(s)
Justine Sherry
Click to read more...
The emphasis in this course will be on the basic performance and engineering trade-offs in the design and implementation of computer networks. To make the issues more concrete, the class includes several multi-week projects requiring significant design and implementation.
Instructor(s)
Peter Steenkiste
Click to read more...
The emphasis in this course will be on the basic performance and engineering trade-offs in the design and implementation of computer networks. To make the issues more concrete, the class includes several multi-week projects requiring significant design and implementation.
Instructor(s)
Justine Sherry
Click to read more...
The goal of this course is to provide students an understanding and overview of elements in modern machine learning systems. Throughout the course, the students will learn about the design rationale behind the state-of-the-art machine learning frameworks and advanced system techniques to scale, reduce memory, and offload heterogeneous compute resources. We will also run case studies of large-scale training and serving systems used in practice today. This course offers the necessary background for students who would like to pursue research in the area of machine learning systems or continue to work in machine learning engineering.
Instructor(s)
Tianqi Chen
Click to read more...
The goal of this course is to provide students an understanding and overview of elements in modern machine learning systems. Throughout the course, the students will learn about the design rationale behind the state-of-the-art machine learning frameworks and advanced system techniques to scale, reduce memory, and offload heterogeneous compute resources. We will also run case studies of large-scale training and serving systems used in practice today. This course offers the necessary background for students who would like to pursue research in the area of machine learning systems or continue to work in machine learning engineering.
Instructor(s)
Zhihao Jia
Tianqi Chen
Click to read more...
The goal of this course is to provide students an understanding and overview of elements in modern machine learning systems. Throughout the course, the students will learn about the design rationale behind the state-of-the-art machine learning frameworks and advanced system techniques to scale, reduce memory, and offload heterogeneous compute resources. We will also run case studies of large-scale training and serving systems used in practice today. This course offers the necessary background for students who would like to pursue research in the area of machine learning systems or continue to work in machine learning engineering.
Instructor(s)
Tianqi Chen
Zhihao Jia
Click to read more...
This course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Instructor(s)
Andrew Pavlo
Click to read more...
This course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Instructor(s)
Jignesh Patel
Click to read more...
This course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Instructor(s)
Jignesh Patel
Click to read more...
This course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Instructor(s)
Jignesh Patel
Andrew Pavlo
Click to read more...
This course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Instructor(s)
Andrew Pavlo
Click to read more...
This course is on the design and implementation of database management systems. Topics include data models (relational, document, key/value), storage models (n-ary, decomposition), query languages (SQL, stored procedures), storage architectures (heaps, log-structured), indexing (order preserving trees, hash tables), transaction processing (ACID, concurrency control), recovery (logging, checkpoints), query processing (joins, sorting, aggregation, optimization), and parallel architectures (multi-core, distributed). Case studies on open-source and commercial database systems will be used to illustrate these techniques and trade-offs. The course is appropriate for students with strong systems programming skills.
Instructor(s)
Andrew Pavlo
Click to read more...
The objective of this course is to study general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course will have several programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead.
Instructor(s)
Yun Yu
Click to read more...
The objective of this course is to study general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course will have several programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead.
Instructor(s)
Dan DeBlasio
Seyed Hosein Mohimani
Click to read more...
The objective of this course is to study general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course will have several programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead.
Instructor(s)
Seyed Hosein Mohimani
Click to read more...
The objective of this course is to study general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course will have several programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead.
Instructor(s)
Dan DeBlasio
Click to read more...
The objective of this course is to study general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course will have several programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead.
Instructor(s)
Dan DeBlasio
Click to read more...
The objective of this course is to study general computational problems, with a focus on the principles used to design those algorithms. Efficient data structures will be discussed to support these algorithmic concepts. Topics include: Run time analysis, divide-and-conquer algorithms, dynamic programming algorithms, network flow algorithms, linear and integer programming, large-scale search algorithms and heuristics, efficient data storage and query, and NP-completeness. Although this course will have several programming assignments, it is primarily not a programming course. Instead, it will focus on the design and analysis of algorithms for general classes of problems. This course is not open to CS graduate students who should consider taking 15-651 instead.
Instructor(s)
Yun Yu
Click to read more...
This course is intended for SCS graduate students. All other graduate students should register for 15-650. This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
Instructor(s)
Danny Sleator
Jason Li
Click to read more...
This course is intended for SCS graduate students. This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
Instructor(s)
David Woodruff
Daniel Anderson
Click to read more...
This course is intended for SCS graduate students. This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
Instructor(s)
Daniel Anderson
David Woodruff
Click to read more...
This course is intended for SCS graduate students. This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
Instructor(s)
Yang Liu
Richard Peng
Click to read more...
This course is intended for SCS graduate students. All other graduate students should register for 15-650. This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
Instructor(s)
Daniel Anderson
Danny Sleator
Click to read more...
This course is intended for SCS graduate students. All other graduate students should register for 15-650. This course is about the design and analysis of algorithms. We study specific algorithms for a variety of problems, as well as general design and analysis techniques. Specific topics include searching, sorting, algorithms for graph problems, efficient data structures, lower bounds and NP-completeness. A variety of other topics may be covered at the discretion of the instructor. These include parallel algorithms, randomized algorithms, geometric algorithms, low level techniques for efficient programming, cryptography, and cryptographic protocols.
Instructor(s)
Daniel Anderson
Jason Li
Click to read more...
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Instructor(s)
Robert Harper
Click to read more...
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Instructor(s)
Robert Harper
Click to read more...
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Instructor(s)
Stephanie Balzer
Click to read more...
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Instructor(s)
Stephanie Balzer
Click to read more...
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Instructor(s)
Stephanie Balzer
Click to read more...
This course discusses in depth many of the concepts underlying the design, definition, implementation, and use of modern programming languages. Formal approaches to defining the syntax and semantics are used to describe the fundamental concepts underlying programming languages. A variety of programming paradigms are covered such as imperative, functional, logic, and concurrent programming. In addition to the formal studies, experience with programming in the languages is used to illustrate how different design goals can lead to radically different languages and models of computation.
Instructor(s)
Robert Harper
Click to read more...
Symbolic logic is fundamental to computer science, providing a foundation for the theory of programming languages, database theory, AI, knowledge representation, automated reasoning, interactive theorem proving, and formal verification. Formal methods based on logic complement statistical methods and machine learning by providing rules of inference and means of representation with precise semantics. These methods are central to hardware and software verification, and have also been used to solve open problems in mathematics. This course will introduce students to logic on three levels: theory, implementation, and application. It will focus specifically on applications to automated reasoning and interactive theorem proving. We will present the underlying mathematical theory, and students will develop the mathematical skills that are needed to design and reason about logical systems in a rigorous way. We will also show students how to represent logical objects in a functional programming language, Lean, and how to implement fundamental logical algorithms. We will show students how to use contemporary automated reasoning tools, including SAT solvers, SMT solvers, and first-order theorem provers to solve challenging problems. Finally, we will show students how to use Lean as an interactive theorem prover.
Instructor(s)
Marijn Heule
Click to read more...
Symbolic logic is fundamental to computer science, providing a foundation for the theory of programming languages, database theory, AI, knowledge representation, automated reasoning, interactive theorem proving, and formal verification. Formal methods based on logic complement statistical methods and machine learning by providing rules of inference and means of representation with precise semantics. These methods are central to hardware and software verification, and have also been used to solve open problems in mathematics. This course will introduce students to logic on three levels: theory, implementation, and application. It will focus specifically on applications to automated reasoning and interactive theorem proving. We will present the underlying mathematical theory, and students will develop the mathematical skills that are needed to design and reason about logical systems in a rigorous way. We will also show students how to represent logical objects in a functional programming language, Lean, and how to implement fundamental logical algorithms. We will show students how to use contemporary automated reasoning tools, including SAT solvers, SMT solvers, and first-order theorem provers to solve challenging problems. Finally, we will show students how to use Lean as an interactive theorem prover.
Instructor(s)
Marijn Heule
Click to read more...
Symbolic logic is fundamental to computer science, providing a foundation for the theory of programming languages, database theory, AI, knowledge representation, automated reasoning, interactive theorem proving, and formal verification. Formal methods based on logic complement statistical methods and machine learning by providing rules of inference and means of representation with precise semantics. These methods are central to hardware and software verification, and have also been used to solve open problems in mathematics. This course will introduce students to logic on three levels: theory, implementation, and application. It will focus specifically on applications to automated reasoning and interactive theorem proving. We will present the underlying mathematical theory, and students will develop the mathematical skills that are needed to design and reason about logical systems in a rigorous way. We will also show students how to represent logical objects in a functional programming language, Lean, and how to implement fundamental logical algorithms. We will show students how to use contemporary automated reasoning tools, including SAT solvers, SMT solvers, and first-order theorem provers to solve challenging problems. Finally, we will show students how to use Lean as an interactive theorem prover.
Instructor(s)
Marijn Heule
Click to read more...
This multidisciplinary junior-level course is designed to provide a thorough introduction to modern constructive logic, its roots in philosophy, its numerous applications in computer science, and its mathematical properties. Some of the topics to be covered are intuitionistic logic, inductive definitions, functional programming, type theory, realizability, connections between classical and constructive logic, decidable classes. This course counts as a Fundamentals course in the Computer Science major.
Instructor(s)
Karl Crary
Click to read more...
This multidisciplinary junior-level course is designed to provide a thorough introduction to modern constructive logic, its roots in philosophy, its numerous applications in computer science, and its mathematical properties. Some of the topics to be covered are intuitionistic logic, inductive definitions, functional programming, type theory, realizability, connections between classical and constructive logic, decidable classes. This course counts as a Fundamentals course in the Computer Science major.
Instructor(s)
Karl Crary
Click to read more...