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 Courses

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

    6.00SC Introduction to Computer Science and Programming

    Click here to view this course.

    This 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 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 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.