Introductory Programming Courses

This page is designed to help you explore introductory programming courses on OCW. This is not meant to be a comprehensive list, but rather to suggest some good starting points.

 

General Introductions

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

6.0001 Introduction to Computer Science and Programming in Python


Click here to view this course.

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


Click here to view this course.

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.

Prerequisites: 6.0001 Introduction to Computer Science and Programming in Python or permission of instructor.

 

6.00SC Introduction to Computer Science and Programming


Click here to view this course.

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


Click here to view this course.

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.

For introductory programming, see the Python Tutorial and Unit 1: Software Engineering.

 

1.00 Introduction to Computers and Engineering Problem Solving


Click here to view this course.

This semester-long course presents the fundamentals of object-oriented software design and development, computational methods and sensing for engineering, and scientific and managerial applications. Topics include classes, inheritance, graphical user interfaces, numerical methods, streams, threads, sensors, and data structures.

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


Click here to view this course.

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


Click here to view this course.

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


Click here to view this course.

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


Click here to view this course.

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.

Prerequisites: Basic familiarity with programming; basic linear algebra, differential equations, and probability.

 

6.S096 Introduction to C and C++


Click here to view this course.

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


Click here to view this course.

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.

Prerequisites: 6.01 Introduction to EECS I

 

6.006 Introduction to Algorithms


Click here to view this course.

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.

Prerequisites: A firm grasp of Python and a solid background in discrete mathematics are necessary prerequisites to this course. You are expected to have mastered the material presented in 6.01 Introduction to EECS I and 6.042J Mathematics for Computer Science.

 

6.370 The Battlecode Programming Competition


Click here to view this course.

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.