Fall 2023 Course 6.10 - 6.50 - Electrical Engineering and Computer Science
Fall 2023 Course 6.10 - 6.50 - Electrical Engineering and Computer Science
Home | Subject Search | Help | Symbols Help | Pre-Reg Help | Final Exam Schedule
( , )
Prereq: None
Units: 3-0-6
Credit cannot also be received for 6.100A https://introcomp.mit.edu/6.100L_fa23
Lecture: MW3-4.30 (2-190)
Introduction to computer science and programming for students with no programming experience. Presents content taught
in 6.100A over an entire semester. Students develop skills to program and use computational techniques to solve problems.
Topics include the notion of computation, Python, simple algorithms and data structures, testing and debugging, and
algorithmic complexity.
A. Bell
Textbooks (Fall 2023)
( , )
Prereq: 6.100A
Units: 2-4-6 https://py.mit.edu
Lecture: MW9 (36-156) or MW10 (36-156) or MW11 (2-190, 36-155) or MW1 (36-112, 3-270) or MW2 (36-112, 26-100)
or MW3 (36-156) or MW10 (36-155) Lab: F10-1 (34-501) or F2-5 (34-501) +final
Introduces fundamental concepts of programming. Designed to develop skills in applying basic methods from programming
languages to abstract problems. Topics include programming and Python basics, computational concepts, software
engineering, algorithmic techniques, data types, and recursion. Lab component consists of software design, construction,
and implementation of design. Enrollment may be limited.
A. Hartz
No textbook information available
Provides design-focused instruction on how to build complex software applications. Design topics include classic human-
computer interaction (HCI) design tactics (need finding, heuristic evaluation, prototyping, user testing), conceptual design
(inventing, modeling and evaluating constituent concepts), social and ethical implications, abstract data modeling, and
visual design. Implementation topics include reactive front-ends, web services, and databases. Students work both on
individual projects and a larger team project in which they design and build full-stack web applications.
D. Jackson
Textbooks (Fall 2023)
Project-based introduction to building efficient, high-performance and scalable software systems. Topics include
performance analysis, algorithmic techniques for high performance, instruction-level optimizations, vectorization, cache and
memory hierarchy optimization, and parallel programming.
C. Leiserson
No textbook information available
Covers the theory and practice of algorithms and data structures. Topics include models of computation, algorithm design
and analysis, and performance engineering of algorithm implementations. Presents the design and implementation of
sequential, parallel, cache-efficient, and external-memory algorithms. Illustrates many of the principles of algorithm
engineering in the context of parallel algorithms and graph problems.
Staff
Programming Languages
Presents major principles and techniques for program analysis. Includes formal semantics, type systems and type-based
program analysis, abstract interpretation and model checking and synthesis. Emphasis on Haskell and Ocaml, but no prior
experience in these languages is assumed. Student assignments include implementing of techniques covered in class,
including building simple verifiers.
A. Solar-Lezama
Surveys techniques for rigorous mathematical reasoning about correctness of software, emphasizing commonalities across
approaches. Introduces interactive computer theorem proving with the Coq proof assistant, which is used for all
assignments, providing immediate feedback on soundness of logical arguments. Covers common program-proof techniques,
including operational semantics, model checking, abstract interpretation, type systems, program logics, and their
applications to functional, imperative, and concurrent programs. Develops a common conceptual framework based on
invariants, abstraction, and modularity applied to state and labeled transition systems.
Staff
Concepts and techniques for the design and implementation of large software systems that can be adapted to uses not
anticipated by the designer. Applications include compilers, computer-algebra systems, deductive systems, and some
artificial intelligence applications. Covers means for decoupling goals from strategy, mechanisms for implementing additive
data-directed invocation, work with partially-specified entities, and how to manage multiple viewpoints. Topics include
combinators, generic operations, pattern matching, pattern-directed invocation, rule systems, backtracking, dependencies,
indeterminacy, memoization, constraint propagation, and incremental refinement. Students taking graduate version
complete additional assignments.
G. J. Sussman
Concepts and techniques for the design and implementation of large software systems that can be adapted to uses not
anticipated by the designer. Applications include compilers, computer-algebra systems, deductive systems, and some
artificial intelligence applications. Covers means for decoupling goals from strategy, mechanisms for implementing additive
data-directed invocation, work with partially-specified entities, and how to manage multiple viewpoints. Topics include
combinators, generic operations, pattern matching, pattern-directed invocation, rule systems, backtracking, dependencies,
indeterminacy, memoization, constraint propagation, and incremental refinement. Students taking graduate version
complete additional assignments.
Staff
Introduction to mathematical modeling of computational problems, as well as common algorithms, algorithmic paradigms,
and data structures used to solve these problems. Emphasizes the relationship between algorithms and programming, and
introduces basic performance measures and analysis techniques for these problems. Enrollment may be limited.
M. Karchmer
No textbook information available
Mathematical introduction to the theory of computing. Rigorously explores what kinds of tasks can be efficiently solved with
computers by way of finite automata, circuits, Turing machines, and communication complexity, introducing students to
some major open problems in mathematics. Builds skills in classifying computational tasks in terms of their difficulty.
Discusses other fundamental issues in computing, including the Halting Problem, the Church-Turing Thesis, the P versus NP
problem, and the power of randomness.
Staff
First-year graduate subject in algorithms. Emphasizes fundamental algorithms and advanced methods of algorithmic design,
analysis, and implementation. Surveys a variety of computational models and the algorithms for them. Data structures,
network flows, linear programming, computational geometry, approximation algorithms, online algorithms, parallel
algorithms, external memory, streaming algorithms.
Staff
Studies how randomization can be used to make algorithms simpler and more efficient via random sampling, random
selection of witnesses, symmetry breaking, and Markov chains. Models of randomized computation. Data structures: hash
tables, and skip lists. Graph algorithms: minimum spanning trees, shortest paths, and minimum cuts. Geometric
algorithms: convex hulls, linear programming in fixed or arbitrary dimension. Approximate counting; parallel algorithms;
online algorithms; derandomization techniques; and tools for probabilistic analysis of algorithms.
Staff
6.5230 Advanced Data Structures
( )
Prereq: 6.1220
Units: 3-0-9
More advanced and powerful data structures for answering several queries on the same data. Such structures are crucial in
particular for designing efficient algorithms. Dictionaries; hashing; search trees. Self-adjusting data structures; linear
search; splay trees; dynamic optimality. Integer data structures; word RAM. Predecessor problem; van Emde Boas priority
queues; y-fast trees; fusion trees. Lower bounds; cell-probe model; round elimination. Dynamic graphs; link-cut trees;
dynamic connectivity. Strings; text indexing; suffix arrays; suffix trees. Static data structures; compact arrays; rank and
select. Succinct data structures; tree encodings; implicit data structures. External-memory and cache-oblivious data
structures; B-trees; buffer trees; tree layout; ordered-file maintenance. Temporal data structures; persistence;
retroactivity.
Staff
Design and analysis of concurrent algorithms, emphasizing those suitable for use in distributed networks. Process
synchronization, allocation of computational resources, distributed consensus, distributed graph algorithms, election of a
leader in a network, distributed termination, deadlock detection, concurrency control, communication, and clock
synchronization. Special consideration given to issues of efficiency and fault tolerance. Formal models and proof methods
for distributed computation.
M. Ghaffari, N. A. Lynch
Covers discrete geometry and algorithms underlying the reconfiguration of foldable structures, with applications to robotics,
manufacturing, and biology. Linkages made from one-dimensional rods connected by hinges: constructing polynomial
curves, characterizing rigidity, characterizing unfoldable versus locked, protein folding. Folding two-dimensional paper
(origami): characterizing flat foldability, algorithmic origami design, one-cut magic trick. Unfolding and folding three-
dimensional polyhedra: edge unfolding, vertex unfolding, gluings, Alexandrov's Theorem, hinged dissections.
E. D. Demaine
( )
Prereq: 6.1220
Units: 3-0-9
Introduction to the design and analysis of algorithms for geometric problems, in low- and high-dimensional spaces.
Algorithms: convex hulls, polygon triangulation, Delaunay triangulation, motion planning, pattern matching. Geometric data
structures: point location, Voronoi diagrams, Binary Space Partitions. Geometric problems in higher dimensions: linear
programming, closest pair problems. High-dimensional nearest neighbor search and low-distortion embeddings between
metric spaces. Geometric algorithms for massive data sets: external memory and streaming algorithms. Geometric
optimization.
Staff
Explores topics around matrix multiplication (MM) and its use in the design of graph algorithms. Focuses on problems such
as transitive closure, shortest paths, graph matching, and other classical graph problems. Explores fast approximation
algorithms when MM techniques are too expensive.
Staff
A more extensive and theoretical treatment of the material in 6.1400J/18.400J, emphasizing computability and
computational complexity theory. Regular and context-free languages. Decidable and undecidable problems, reducibility,
recursive function theory. Time and space measures on computation, completeness, hierarchy theorems, inherently
complex problems, oracles, probabilistic computation, and interactive proof systems. Students in Course 18 must register
for the undergraduate version, 18.404.
M. Sipser
Textbooks (Fall 2023)
Current research topics in computational complexity theory. Nondeterministic, alternating, probabilistic, and parallel
computation models. Boolean circuits. Complexity classes and complete sets. The polynomial-time hierarchy. Interactive
proof systems. Relativization. Definitions of randomness. Pseudo-randomness and derandomizations. Interactive proof
systems and probabilistically checkable proofs.
R. Williams
The power and sources of randomness in computation. Connections and applications to computational complexity,
computational learning theory, cryptography and combinatorics. Topics include: probabilistic proofs, uniform generation and
approximate counting, Fourier analysis of Boolean functions, computational learning theory, expander graphs,
pseudorandom generators, derandomization.
R. Rubinfeld
Introduction to quantum computational complexity theory, the study of the fundamental capabilities and limitations of
quantum computers. Topics include complexity classes, lower bounds, communication complexity, proofs and advice, and
interactive proof systems in the quantum world; classical simulation of quantum circuits. The objective is to bring students
to the research frontier.
Staff
Fundamental notions and big ideas for achieving security in computer systems. Topics include cryptographic foundations
(pseudorandomness, collision-resistant hash functions, authentication codes, signatures, authenticated encryption, public-
key encryption), systems ideas (isolation, non-interference, authentication, access control, delegation, trust), and
implementation techniques (privilege separation, fuzzing, symbolic execution, runtime defenses, side-channel attacks).
Case studies of how these ideas are realized in deployed systems. Lab assignments apply ideas from lectures to learn how
to build secure systems and how they can be attacked.
H. Corrigan-Gibbs
No textbook information available
Emphasis on applied cryptography. May include: basic notion of systems security, cryptographic hash functions, symmetric
cryptography (one-time pad, block ciphers, stream ciphers, message authentication codes), hash functions, key-exchange,
public-key cryptography (encryption, digital signatures), elliptic curve cryptography, secret-sharing, fully homomorphic
encryption, zero-knowledge proofs, and electronic voting. Assignments include a final group project. Topics may vary year
to year.
Staff
A rigorous introduction to modern cryptography. Emphasis on the fundamental cryptographic primitives of public-key
encryption, digital signatures, pseudo-random number generation, and basic protocols and their computational complexity
requirements.
V. Vaikuntanathan
Textbooks (Fall 2023)
Design and implementation of secure computer systems. Lectures cover attacks that compromise security as well as
techniques for achieving security, based on recent research papers. Topics include operating system security, privilege
separation, capabilities, language-based security, cryptographic network protocols, trusted hardware, and security in web
applications and mobile phones. Labs involve implementing and compromising a web application that sandboxes arbitrary
code, and a group final project.
Staff
Computer Systems
Topics on the engineering of computer software and hardware systems: techniques for controlling complexity; strong
modularity using client-server design, operating systems; performance, networks; naming; security and privacy; fault-
tolerant systems, atomicity and coordination of concurrent activities, and recovery; impact of computer systems on society.
Case studies of working systems and readings from the current literature provide comparisons and contrasts. Includes a
single, semester-long design project. Students engage in extensive written communication exercises. Enrollment may be
limited.
K. LaCurts
Design and implementation of operating systems, and their use as a foundation for systems programming. Topics include
virtual memory, file systems, threads, context switches, kernels, interrupts, system calls, interprocess communication,
coordination, and interaction between software and hardware. A multi-processor operating system for RISC-V, xv6, is used
to illustrate these topics. Individual laboratory assignments involve extending the xv6 operating system, for example to
support sophisticated virtual memory features and networking.
R. Morris
No textbook information available
( )
(Same subject as MAS.453[J])
Prereq: 6.1800 or permission of instructor
Units: 3-0-9
Focuses on "Internet of Things" (IoT) systems and technologies, sensing, computing, and communication. Explores
fundamental design and implementation issues in the engineering of mobile and sensor computing systems. Topics include
battery-free sensors, seeing through wall, robotic sensors, vital sign sensors (breathing, heartbeats, emotions), sensing in
cars and autonomous vehicles, subsea IoT, sensor security, positioning technologies (including GPS and indoor WiFi),
inertial sensing (accelerometers, gyroscopes, inertial measurement units, dead-reckoning), embedded and distributed
system architectures, sensing with radio signals, sensing with microphones and cameras, wireless sensor networks,
embedded and distributed system architectures, mobile libraries and APIs to sensors, and application case studies. Includes
readings from research literature, as well as laboratory assignments and a significant term project.
Staff
Explores the impact of computer systems on individual humans, society, and the environment. Examines large- and small-
scale power structures that stem from low-level technical design decisions, the consequences of those structures on society,
and how they can limit or provide access to certain technologies. Students learn to assess design decisions within an ethical
framework and consider the impact of their decisions on non-users. Case studies of working systems and readings from the
current literature provide comparisons and contrasts. Possible topics include the implications of hierarchical designs (e.g.,
DNS) for scale; how layered models influence what parts of a network have the power to take certain actions; and the
environmental impact of proof-of-work-based systems such as Bitcoin. Enrollment may be limited.
K. Lacurts
No textbook information available
Fundamental design and implementation issues in the engineering of operating systems. Lectures based on the study of a
symmetric multiprocessor version of UNIX version 6 and research papers. Topics include virtual memory; file system;
threads; context switches; kernels; interrupts; system calls; interprocess communication; coordination, and interaction
between software and hardware. Individual laboratory assignments accumulate in the construction of a minimal operating
system (for an x86-based personal computer) that implements the basic operating system abstractions and a shell.
Knowledge of programming in the C language is a prerequisite.
M. Kaashoek
No textbook information available
Topics related to the engineering and design of database systems, including data models; database and schema design;
schema normalization and integrity constraints; query processing; query optimization and cost estimation; transactions;
recovery; concurrency control; isolation and consistency; distributed, parallel and heterogeneous databases; adaptive
databases; trigger systems; pub-sub systems; semi structured data and XML querying. Lecture and readings from original
research papers. Semester-long project and paper. Students taking graduate version complete different assignments.
Enrollment may be limited.
S. R. Madden
No textbook information available
Topics related to the engineering and design of database systems, including data models; database and schema design;
schema normalization and integrity constraints; query processing; query optimization and cost estimation; transactions;
recovery; concurrency control; isolation and consistency; distributed, parallel and heterogeneous databases; adaptive
databases; trigger systems; pub-sub systems; semi structured data and XML querying. Lecture and readings from original
research papers. Semester-long project and paper. Students taking graduate version complete different assignments.
Enrollment may be limited.
S. Madden
No textbook information available
Abstractions and implementation techniques for engineering distributed systems: remote procedure call, threads and
locking, client/server, peer-to-peer, consistency, fault tolerance, and security. Readings from current literature. Individual
laboratory assignments culminate in the construction of a fault-tolerant and scalable network file system. Programming
experience with C/C++ required. Enrollment limited.
Staff
Introduction to the basic principles of computer systems with emphasis on the use of rigorous techniques as an aid to
understanding and building modern computing systems. Particular attention paid to concurrent and distributed systems.
Topics include: specification and verification, concurrent algorithms, synchronization, naming, Networking, replication
techniques (including distributed cache management), and principles and algorithms for achieving reliability.
M. F. Kaashoek, B. Lampson, N. B. Zeldovich
Computer Architecture
Introduction to C and assembly language for students coming from a Python background (6.100A). Studies the C language,
focusing on memory and associated topics including pointers, and how different data structures are stored in memory, the
stack, and the heap in order to build a strong understanding of the constraints involved in manipulating complex data
structures in modern computational systems. Studies assembly language to facilitate a firm understanding of how high-level
languages are translated to machine-level instructions.
Staff
Illustrates a constructive (as opposed to a descriptive) approach to computer architecture. Topics include combinational and
pipelined arithmetic-logic units (ALU), in-order pipelined microarchitectures, branch prediction, blocking and unblocking
caches, interrupts, virtual memory support, cache coherence and multicore architectures. Labs in a modern Hardware
Design Language (HDL) illustrate various aspects of microprocessor design, culminating in a term project in which students
present a multicore design running on an FPGA board.
Staff
Introduction to the principles underlying modern computer architecture. Emphasizes the relationship among technology,
hardware organization, and programming systems in the evolution of computer architecture. Topics include pipelined, out-
of-order, and speculative execution; caches, virtual memory and exception handling, superscalar, very long instruction word
(VLIW), vector, and multithreaded processors; on-chip networks, memory models, synchronization, and cache coherence
protocols for multiprocessors.
D. Sanchez Martin
No textbook information available
Introduction to the design and implementation of large-scale digital systems using hardware description languages and
high-level synthesis tools in conjunction with standard commercial electronic design automation (EDA) tools. Emphasizes
modular and robust designs, reusable modules, correctness by construction, architectural exploration, meeting area and
timing constraints, and developing functional field-programmable gate array (FPGA) prototypes. Extensive use of CAD tools
in weekly labs serve as preparation for a multi-person design project on multi-million gate FPGAs. Enrollment may be
limited.
Staff
Introduction to parallel and multicore computer architecture and programming. Topics include the design and
implementation of multicore processors; networking, video, continuum, particle and graph applications for multicores;
communication and synchronization algorithms and mechanisms; locality in parallel computations; computational models,
including shared memory, streams, message passing, and data parallel; multicore mechanisms for synchronization, cache
coherence, and multithreading. Performance evaluation of multicores; compilation and runtime systems for parallel
computing. Substantial project required.
Staff
6.5930 Hardware Architecture for Deep Learning
( )
(Subject meets with 6.5931)
Prereq: 6.1910 and (6.3000 or 6.3900)
Units: 3-3-6
Introduction to the design and implementation of hardware architectures for efficient processing of deep learning algorithms
and tensor algebra in AI systems. Topics include basics of deep learning, optimization principles for programmable
platforms, design principles of accelerator architectures, co-optimization of algorithms and hardware (including sparsity)
and use of advanced technologies (including memristors and optical computing). Includes labs involving modeling and
analysis of hardware architectures, architecting deep learning inference systems, and an open-ended design project.
Students taking graduate version complete additional assignments.
V. Sze, J. Emer