General Introductions

These courses introduce students to broad principles of computer science and programming.

6.0001 Introduction to Computer Science and Programming in Python

This half-semester course aims to teach basic programming and computational concepts to students with little or no previous coding experience. Students will develop confidence in their ability to apply programming techniques to problems in a broad range of fields. This course uses the Python 3.5 programming language.

Prerequisites: No prior programming experience is necessary to take, understand, or be successful in 6.0001. Familiarity with pre-calculus, especially series, will be helpful for some topics, but is not required to understand the majority of the content.

6.0002 Introduction to Computational Thinking and Data Science

6.0002 is the continuation of 6.0001 Introduction to Computer Science and Programming in Python and is intended for students with little or no programming experience. It 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.

6.00SC Introduction to Computer Science and Programming

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

Prerequisites: This course is aimed at students with little or no prior programming experience, but a desire to understand computational approaches to problem solving. Since computer programming involves computational modes of thinking, it will help to have some mathematical and logical aptitude. You should be confident with your math skills up to pre-calculus.

6.01SC Introduction to Electrical Engineering and Computer Science

This semester-long course provides an integrated introduction to electrical engineering and computer science, taught using substantial laboratory experiments with mobile robots. Our primary goal is for you 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.

Prerequisites: At MIT, 6.01 has no formal prerequisites. The syllabus contains more detailed information about the skills and background needed in mathematics, programming, and physics. 6.01 is required for computer science and electrical engineering majors.

Prerequisites: 1.00 is a first course in programming. It assumes no prior experience, and is intended for students who are not majoring in computer science.

Language-Specific Courses

These courses introduce students to a particular programming language. Many are taught during MIT’s four-week Independent Activities Period (IAP) between the fall and spring semesters.

6.189 A Gentle Introduction to Programming Using Python

This course will provide a gentle, yet intense, introduction to programming using Python for highly motivated students with little or no prior experience in programming. The course will focus on planning and organizing programs, as well as the grammar of the Python programming language. The course is designed to help prepare students for 6.01 Introduction to EECS I.

Prerequisites: There are no formal prerequisites for this course.

6.092 Introduction to Programming in Java

This course is an introduction to software engineering, using the Java programming language. It covers concepts useful to 6.005 Elements of Software Construction. Students will learn the fundamentals of Java. The focus is on developing high quality, working software that solves real problems.

Prerequisites: Designed for students with some programming experience.

18.S997 Introduction to MATLAB Programming

This course teaches MATLAB from a mathematical point of view, rather than a programming one. The idea is that by thinking about mathematical problems, students are prodded into learning MATLAB for the purpose of solving the problem at hand. Topics include variables, arrays, conditional statements, loops, functions, and plots.

Prerequisites: There are no formal prerequisites for this course.

6.094 Introduction to MATLAB

This course provides an aggressively gentle introduction to MATLAB. It is designed to give students fluency in MATLAB, including popular toolboxes. Topics include variables, scripts, and operations; visualization, solving equations, and curve fitting; and Simulink.

6.S096 Introduction to C and C++

This course provides a fast-paced introduction to the C and C++ programming languages. You will learn the required background knowledge, including memory management, pointers, preprocessor macros, object-oriented programming, and how to find bugs when you inevitably use any of those incorrectly.

Prerequisites: Designed for students with some programming experience.

Follow-up Courses

Once you’ve worked through some of the material above, you may be interested in trying more advanced courses.

6.005 Elements of Software Construction

This course introduces fundamental principles and techniques of software development. Students learn how to write software that is safe from bugs, easy to understand, and ready for change.

6.006 Introduction to Algorithms

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.370 The Battlecode Programming Competition

The Battlecode Programming Competition is a unique challenge that combines battle strategy, software engineering, and artificial intelligence. Using Java, student teams program virtual robots to play Battlecode, a real-time strategy game. Optional lectures are provided on topics and programming practices relevant to the game, and students learn and improve their programming skills experientially. The course culminates in a live tournament.

Prerequisites: Experience in programming definitely helps in the competition.

About MIT OpenCourseWare

MIT OpenCourseWare makes the materials used in the teaching of almost all of MIT's subjects available on the Web, free of charge. With more than 2,400 courses available, OCW is delivering on the promise of open sharing of knowledge. Learn more »