This page will help you begin to learn programming and computer science, with some suggested introductory courses on OCW. Choose from:
General Introductions to Programming
These courses introduce principles of computer science and begin to develop programming skills, specifically in the Python language. Learn more about these courses’ learning goals, history and student experience in this MIT news article.
6.0001 Introduction to Computer Science and Programming in Python
6.0001 is the most common starting point for MIT students with little or no programming experience. This half-semester course introduces computational concepts and basic programming. 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. Prerequisites: 6.0001 Introduction to Computer Science and Programming in Python or permission of instructor. |
6.00SC Introduction to Computer Science and Programming
This semester-long course formed the basis for the 6.0001 + 6.0002 sequence, and continues to be taught at MIT. It aims to provide students with an understanding, 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.S095 Programming for the Puzzled
This class builds a bridge between the recreational world of algorithmic puzzles (puzzles that can be solved by algorithms) and the pragmatic world of computer programming, teaching students to program while solving puzzles. Python syntax and semantics required to understand the code are explained as needed for each puzzle. Prerequisites: There are no formal prerequisites. Students need only the rudimentary grasp of programming concepts that can be obtained from introductory or Advanced Placement computer science classes in high school. |
Language-Specific Courses
Beyond the introductions above which use Python, here are several introductions to other programming languages. Many are taught during MIT’s four-week Independent Activities Period (IAP) between the fall and spring semesters.
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. Prerequisites: Basic familiarity with programming; basic linear algebra, differential equations, and probability. |
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 introductory material, you may be interested in trying more advanced courses such as these.
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. Prerequisites: 6.01 Introduction to EECS I |
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. 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
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. |
And when you’re ready for more, explore all of OCW’s computer science courses with our Find Courses by Topic browser. You’ll find hundreds of courses ranging from foundations of operating systems and data structures to leading-edge applications like data mining and artificial intelligence.