Skip to content

Self-taught Bachelor of Science in Computer Science and Engineering from MIT OpenCourseWare.

Notifications You must be signed in to change notification settings

josep16z/mit-bsc-cse

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 

Repository files navigation

MIT BSc in Computer Science and Engineering

This is a fully online, free curriculum from MIT OpenCourseWare that closely matches the actual Bachelor's of Science in Computer Science and Engineering offered in person at MIT. You won’t be awarded a degree for taking these free online courses, but you’ll get largely the same knowledge from them and you'll save over a third of a million dollars along the way.

The 6-3 Computer Science and Engineering curriculum builds primarily on the Calculus II GIR; not all subjects require a GIR as a pre-requisite.

Introductory subjects

Introductory subjects introduce students to the breadth of the EECS department, and teach fundamental skills for electrical engineering and computer science.

Programming skills

This course aims to provide students with an understanding of the role computation can play in solving problems and to help students, regardless of their major, feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class uses the Python 3.5 programming language.

Introduction to EECS

This course provides an integrated introduction to electrical engineering and computer science, taught using substantial laboratory experiments with mobile robots. The primary goal is to learn to appreciate and use the fundamental design principles of modularity and abstraction in a variety of contexts from electrical engineering and computer science. The second goal is to show that making mathematical models of real systems can help in the design and analysis of those systems. Complementary goals include the teaching of exciting and important basic material from electrical engineering and computer science, including modern software engineering, linear systems analysis, electronic circuits, and decision-making.

Discrete math

This subject offers an interactive introduction to discrete mathematics oriented toward computer science and engineering. The subject coverage divides roughly into thirds:

  1. Fundamental concepts of mathematics: Definitions, proofs, sets, functions, relations.
  2. Discrete structures: graphs, state machines, modular arithmetic, counting.
  3. Discrete probability theory.

On completion of 6.042J, students will be able to explain and apply the basic methods of discrete (noncontinuous) mathematics in computer science. They will be able to use these methods in subsequent courses in the design and analysis of algorithms, computability theory, software engineering, and computer systems.

Foundation subjects

Foundation subjects build on introductory material.

This course introduces architecture of digital systems, emphasizing structural principles common to a wide range of technologies. It covers the topics including multilevel implementation strategies, definition of new primitives (e.g., gates, instructions, procedures, processes) and their mechanization using lower-level elements. It also includes analysis of potential concurrency, precedence constraints and performance measures, pipelined and multidimensional systems, instruction set design issues and architectural support for contemporary software structures.

This course provides an introduction to mathematical modeling of computational problems. It covers the common algorithms, algorithmic paradigms, and data structures used to solve these problems. The course emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques for these problems.

6.009 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. Lab component consists of software design, construction, and implementation of design.

6.009 is not available on OpenCourseWare. Instead, take 6.0002 Introduction to Computational Thinking and Data Science + 6.S096 Introduction to C and C++.

Header subjects

Header subjects typically rely on a foundation course as a pre-requisite.

This course introduces fundamental principles and techniques of software development, i.e., how to write software that is safe from bugs, easy to understand, and ready for change. The course includes problem sets and a final project. Important topics include specifications and invariants; testing; abstract data types; design patterns for object-oriented programming; concurrent programming and concurrency; and functional programming.

6.031, which replaced 6.005 in Fall 2016, is not available on OpenCourseWare; 6.005 is linked instead, as it covers the same material in breadth and depth.

This class covers topics on the engineering of computer software and hardware systems. Topics include 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.

This course introduces principles, algorithms, and applications of machine learning from the point of view of modeling and prediction. It includes formulation of learning problems and concepts of representation, over-fitting, and generalization. These concepts are exercised in supervised learning and reinforcement learning, with applications to images and to temporal sequences.

An alternative to this course is 6.034 Artificial Intelligence.

This course provides a challenging introduction to some of the central ideas of theoretical computer science. Beginning in antiquity, the course will progress through finite automata, circuits and decision trees, Turing machines and computability, efficient algorithms and reducibility, the P versus NP problem, NP-completeness, the power of randomness, cryptography and one-way functions, computational learning theory, and quantum computing. It examines the classes of problems that can and cannot be solved by various kinds of machines. It tries to explain the key differences between computational models that affect their power.

An alternative to this course is 6.046 Design and Analysis of Algorithms.

Communication-intensive subject

This course is designed to lay the foundations of good empirical research in the social sciences. It does not deal with specific techniques per se, but rather with the assumptions and the logic underlying social research. Students become acquainted with a variety of approaches to research design, and are helped to develop their own research projects and to evaluate the products of empirical research.

6.UAR is not available on OpenCourseWare, so 15.347 Doctoral Seminar in Research Methods I is linked instead, as it covers the same material in breadth and depth.

Advanced undergraduate subjects (AUS) + Course 6 elective

  • Two from AUS list.
  • One additional from EECS list.

At least one of the required subjects must be from the II list.

Roadmap

  • Semester 1: Programming skills + Discrete math
  • Semester 2: Introduction to EECS + Foundation #1
  • Semester 3: Foundation #2 + Foundation #3
  • Semester 4: Header #1 + Header #2
  • Semester 5: Header #3 + Header #4
  • Semester 6: AUS #1 + AUS #2

6.UAR and the Course 6 elective are typically taken at some point during semesters 4-6.

About

Self-taught Bachelor of Science in Computer Science and Engineering from MIT OpenCourseWare.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published