Massachusetts Institute of TechnologyWebsiteAcademic Catalog
Electrical Engineering and Computer ScienceDepartment Website
SB Degree in Computer Science and Engineeringsource 1source 2source 3source 4source 5ABET
CS Courses
- Introduction to Computer Science Programming in Pythonor6.100A (6)intro6.100A: Introduction to Computer Science Programming in Python
Introduction to computer science and programming for students with little or no programming experience. 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.
Introduction to Computer Science and Programming6.100L (9)intro6.100L: Introduction to Computer Science and ProgrammingIntroduction 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.
- Fundamentals of Programming6.1010 (8)intro6.1010: Fundamentals of Programming
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.
- Software Construction6.1020 (15)softeng6.1020: Software Construction
Introduces fundamental principles and techniques of software development. Topics include specifications and invariants; testing, test-case generation, and coverage; abstract data types and representation independence; design patterns for object-oriented programming; concurrent programming, including message passing and shared memory concurrency, and defending against races and deadlock; and functional programming with immutable data and higher-order functions.
- Introduction to Algorithms6.1210 (12)algs6.1210: Introduction to Algorithms
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.
- Design and Analysis of Algorithmsor6.1220 (12)algs6.1220: Design and Analysis of Algorithms
Techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics include sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; greedy algorithms; amortized analysis; graph algorithms; and shortest paths. Advanced topics may include network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; caching; and parallel computing.
Computability and Complexity Theory6.1400 (12)theory6.1400: Computability and Complexity TheoryMathematical 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.
- Computer Systems Engineering6.1800 (12)sys6.1800: Computer Systems Engineering
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.
- Introduction to Low-level Programming in C and Assembly6.1903 (6)sys6.1903: Introduction to Low-level Programming in C and Assembly
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.
- Computation Structures6.1910 (12)sys6.1910: Computation Structures
Provides an introduction to the design of digital systems and computer architecture. Emphasizes expressing all hardware designs in a high-level hardware language and synthesizing the designs. Topics include combinational and sequential circuits, instruction set abstraction for programmable hardware, single-cycle and pipelined processor implementations, multi-level memory hierarchies, virtual memory, exceptions and I/O, and parallel systems.
- Choice of CS Track
- Choice of AI-Decision Making, CS, or EE Track
Math/Stat Courses
- Introduction to Probabilityor6.3700 (12)math6.3700: Introduction to Probability
An introduction to probability theory, the modeling and analysis of probabilistic systems, and elements of statistical inference. Probabilistic models, conditional probability. Discrete and continuous random variables. Expectation and conditional expectation, and further topics about random variables. Limit Theorems. Bayesian estimation and hypothesis testing. Elements of classical statistical inference. Bernoulli and Poisson processes. Markov chains. Students taking graduate version complete additional assignments.
Introduction to Inferenceororor6.3800 (12)ai6.3800: Introduction to InferenceIntroduces probabilistic modeling for problems of inference and machine learning from data, emphasizing analytical and computational aspects. Distributions, marginalization, conditioning, and structure, including graphical and neural network representations. Belief propagation, decision-making, classification, estimation, and prediction. Sampling methods and analysis. Introduces asymptotic analysis and information measures. Computational laboratory component explores the concepts introduced in class in the context of contemporary applications. Students design inference algorithms, investigate their behavior on real data, and discuss experimental results.
- Mathematics for Computer Science6.1200 (12)math6.1200: Mathematics for Computer Science
Elementary discrete mathematics for science and engineering, with a focus on mathematical tools and proof techniques useful in computer science. Topics include logical notation, sets, relations, elementary graph theory, state machines and invariants, induction and proofs by contradiction, recurrences, asymptotic notation, elementary analysis of algorithms, elementary number theory and cryptography, permutations and combinations, counting tools, and discrete probability.
Science Courses
- Introduction to Solid-State Chemistryor3.091 (12)sci3.091: Introduction to Solid-State Chemistry
Basic principles of chemistry and their application to engineering systems. The relationship between electronic structure, chemical bonding, and atomic order. Characterization of atomic arrangements in crystalline and amorphous solids: metals, ceramics, semiconductors, and polymers. Topical coverage of organic chemistry, solution chemistry, acid-base equilibria, electrochemistry, biochemistry, chemical kinetics, diffusion, and phase diagrams. Examples from industrial practice (including the environmental impact of chemical processes), from energy generation and storage (e.g., batteries and fuel cells), and from emerging technologies (e.g., photonic and biomedical devices).
Principles of Chemical Science5.111 (12)sci5.111: Principles of Chemical ScienceIntroduction to chemistry, with emphasis on basic principles of atomic and molecular electronic structure, thermodynamics, acid-base and redox equilibria, chemical kinetics, and catalysis. Introduction to the chemistry of biological, inorganic, and organic molecules.
- Introductory Biology7.012 (12)sci7.012: Introductory Biology
Exploration into biochemistry and structural biology, molecular and cell biology, genetics and immunology, and viruses and bacteria. Special topics can include cancer biology, aging, and the human microbiome project. Enrollment limited to seating capacity of classroom. Admittance may be controlled by lottery.
- Physics I8.01 (12)sci8.01: Physics I
Introduces classical mechanics. Space and time: straight-line kinematics; motion in a plane; forces and static equilibrium; particle dynamics, with force and conservation of momentum; relative inertial frames and non-inertial force; work, potential energy and conservation of energy; kinetic theory and the ideal gas; rigid bodies and rotational dynamics; vibrational motion; conservation of angular momentum; central force motions; fluid mechanics. Subject taught using the TEAL (Technology-Enabled Active Learning) format which features students working in groups of three, discussing concepts, solving problems, and doing table-top experiments with the aid of computer data acquisition and analysis.
- Physics II8.02 (12)sci8.02: Physics II
Introduction to electromagnetism and electrostatics: electric charge, Coulomb's law, electric structure of matter; conductors and dielectrics. Concepts of electrostatic field and potential, electrostatic energy. Electric currents, magnetic fields and Ampere's law. Magnetic materials. Time-varying fields and Faraday's law of induction. Basic electric circuits. Electromagnetic waves and Maxwell's equations. Subject taught using the TEAL (Technology Enabled Active Learning) studio format which utilizes small group interaction and current technology to help students develop intuition about, and conceptual models of, physical phenomena.
Other Courses
Engineering Commission Student Outcomes
Graduates of the program will have an ability to:
- Identify, formulate, and solve complex engineering problems by applying principles of engineering, science, and mathematics
- Apply engineering design to produce solutions that meet specified needs with consideration of public health, safety, and welfare, as well as global, cultural, social, environmental, and economic factors
- Communicate effectively with a range of audiences
- Recognize ethical and professional responsibilities in engineering situations and make informed judgments, which must consider the impact of engineering solutions in global, economic, environmental, and societal contexts
- Function effectively on a team whose members together provide leadership, create a collaborative and inclusive environment, establish goals, plan tasks, and meet objectives
- Develop and conduct appropriate experimentation, analyze and interpret data, and use engineering judgment to draw conclusions
- Acquire and apply new knowledge as needed, using appropriate learning strategies
Computing Commission Student Outcomes
Graduates of the program will have an ability to:
- Analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions
- Design, implement, and evaluate a computing-based solution to meet a given set of computing requirements in the context of the program’s discipline
- Communicate effectively in a variety of professional contexts
- Recognize professional responsibilities and make informed judgments in computing practice based on legal and ethical principles
- Function effectively as a member or leader of a team engaged in activities appropriate to the program’s discipline
- Apply computer science theory and software development fundamentals to produce computing-based solutions
History of the Major
2023 | Drop "6.UAT (Oral Communication) or 6.UAR (Seminar in Undergraduate Advanced Research)". Renumber 6.1900 (Introduction to Low-level Programming in C and Assembly) → 6.1903. |
2022 | Renumber most CS courses. Drop 6.0x (Introduction to EECS via ...). Drop "6.034 (Artificial Intelligence) or 6.036 (Introduction to Machine Learning)". Replace 6.0001 (Introduction to Computer Science Programming in Python) → 6.100A (Introduction to Computer Science Programming in Python) or 6.100L (Introduction to Computer Science and Programming). Require 6.1900 (Introduction to Low-level Programming in C and Assembly). Increase 3→5 electives, but with depth requirements (tracks). Require a Probability or Linear Algebra course. |
2021 | |
2020 | |
2019 | |
2018 | Add 6.UAR (Seminar in Undergraduate Advanced Research) as alternative to 6.UAT (Oral Communication). |
2017 | |
2016 | Add 6.0001 (Introduction to Computer Science Programming in Python). Add 6.009 (Fundamentals of Programming). Replace 6.01 + 6.02 (Introduction to EECS I & II) → 6.0x (Introduction to EECS via ...). Drop "18.03 (Differential Equations) or 18.06 (Linear Algebra)". Drop "6.UAP (Undergraduate Advanced Project) or 6.UAR (Seminar in Undergraduate Research)". Add 6.036 (Introduction to Machine Learning) alternative to 6.034 (Artificial Intelligence). Add 6.045 (Automata, Computability, and Complexity) alternative to 6.046 (Design and Analysis of Algorithms). Renumber 6.005 (Elements of Software Construction) → 6.031. Replace CS Laboratory Course → Technical Elective. |
2015 |