TL; DR: MIT revolutionized online education in 2001 when they published course materials on OpenCourseWare and made formal higher education available to the masses in an informal way. Through OpenCourseWare, lifelong learners don’t have to pay tuition to continue expanding their horizons. Whether you’re exploring a new subject or learning new skills for work, you can sample from more than 2,300 rigorous undergraduate- and graduate-level courses from MIT whenever you’d like. Publication Manager and Site Curator Curt Newton highlighted 13 excellent courses for folks looking to learn about programming from the comfort of their own home, as well as three massive open online courses available from MIT through edX.
In the early 2000s, continuing education was a largely exclusive club. University-level learning materials were closely guarded and limited to only those enrolled and on campus.
MIT changed all that with OpenCourseWare, an online platform making virtually all MIT course materials available for free to anyone and everyone who wants them.
Instead of commercializing their educational materials, MIT decided to capitalize on the Internet’s ability to spread information around the world and published syllabi, lecture notes, and exams — no strings attached.
“It was a simple – and at that time, radical – idea that I think has proven incredibly insightful and kind of lucky to have made that leap back then,” said Curt Newton, Publication Manager and Site Curator. “It’s really grown into a whole movement.”
Now, universities around the world share their information freely or for credit — or both. Millions of unique visitors access MIT’s OpenCourseWare platform each month. Meanwhile, millions of learners have enrolled in massive open online courses, or MOOCs, from MITx on edX since it began in 2012.
We asked Curt to share some of the most useful OpenCourseWare courses for those interested in learning computer programming or improving their skills. Feel free to jump below to his suggested introductory courses, or look at some of the next-level resources.
Novice Programming Courses (11) | Supplemental Resources (5) | OCW Celebrates 15 Years
MIT’s platform, colloquially known as OCW, boasts more than 2,300 courses, and they add 130 more each year. OCW gets more than 2.5 million unique visitors each month, with more than half coming from outside North America.
“It’s a great resource because the materials are taught in MIT classrooms. There’s a certain authoritativeness to it,” Curt said. “It’s become a trusted source for educational information.”
Students, educators, and independent learners across the globe have used OCW for a variety of reasons.
According to Curt, OCW kicked off a conversation about formal versus informal education, and the thirst for lifelong learning.
“More and more people are finding that they need to keep learning throughout their lives,” he said. “They need to find materials and resources that they can learn from that answer the questions they’re facing most immediately in their lives or careers.”
Variety of Course Materials Round Out the Learning Experience
All OCW courses include a syllabus and at least two selections of additional content. That could include lecture notes, a reading list, homework assignments, or exams — sometimes with the answers. About 100 of the most popular courses feature video lectures, which are also published on YouTube and iTunes U.
OCW Serves Course Materials to Global Audience with Varying Backgrounds
Rather than focusing on students or independent learners, Curt said OCW was originally meant to serve course materials to teachers.
“There’s a multiplication effect,” he said. “You’re reaching a teacher, but you’re also reaching all of their students. I think everyone was surprised at the deep and intense general curiosity of people just looking to learn something.”
Currently, about half of the OCW audience is made up of inquisitive individual learners. The other half is split between teachers looking for materials and inspiration, and students searching for alternate explanations or supplemental information.
Curt narrowed a catalog of 2,300 courses on OCW to a few favorites for people looking for a good starting point in either OCW or computer programming.
The list of introductory courses is a 1-stop shop for aspiring programmers: three introductory courses, five classes on specific languages, and three suggestions for taking your skills to the next level.
While MIT students learn how to code with these classes, Curt said professors teach programming “in the service of something a little broader, which some people here describe as computational thinking.”
That means using programming languages and other computing technologies to answer some bigger, more fundamental question.
“It’s about learning how to think about the nature of the problem that you’ve been given,” Curt said. “You think about how to break it down and go about it in an algorithmic or computational way so that you can write good code about it.”
1. Introduction to Computer Science and Programming
This is the most visited course on OCW and aims to provide students with an understanding of the role computation can play in solving problems. Students will learn how to program in Python, a flexible, dynamic language that supports object-oriented, imperative, and functional programming.
Click here to get started with Introduction to Computer Science and Programming.
Prerequisites: No programming experience required, but general mathematical and logical aptitude is encouraged.
Materials: Video lectures, online textbooks, exams and solutions, assignments and solutions, and recitation videos
2. Introduction to Electrical Engineering and Computer Science
Also on the list of most visited courses on OCW, this class includes laboratory experiments with mobile robots. The goal is to learn the fundamental design principles of modularity and abstraction in a variety of contexts.
Click here to get started with Introduction to Electrical Engineering and Computer Science
Prerequisites: Familiarity with sequences, series, and trigonometry is encouraged, along with exposure to solving basic circuits. Some programming experience is good, but not necessarily required (There is a Python tutorial or supplemental Python introductory course).
Materials: Video lectures, online textbooks, assignments without solutions, recitation videos, lecture notes, exams and solutions, and instructor insights
3. Introduction to Computers and Engineering Problem Solving
Learn the fundamentals of object-oriented software design and development, along with computational methods and managerial applications. This class covers the design of classes, inheritance, and graphical user interfaces. Students will learn Java to complete assignments, which will be useful especially to those wanting to develop client-server web applications.
Click here to get started with Introduction to Computers and Engineering Problem Solving.
Prerequisites: Learners should be proficient with single-variable calculus (Here is a class to get you up to speed).
Materials: Lecture notes, exams without solutions, and assignments without solutions
4. A Gentle Introduction to Programming Using Python
This is a course branded as a “gentle, yet intense” initiation to programming in Python. Students will focus on planning and organizing programs, as well as the grammar of the Python language.
Click here to get started with A Gentle Introduction to Programming Using Python.
Materials: Selected lecture notes and assignments without solutions
5. Introduction to Programming in Java
Get started with software engineering by learning the fundamentals of Java. Students will develop high quality, functional software that solves real problems.
Click here to get started with Introduction to Programming in Java.
Prerequisites: The class is designed for learners with some programming experience, but that is not a formal prerequisite.
Materials: Lecture notes and assignments without solutions
6. Introduction to MATLAB Programming
This course teaches MATLAB from a mathematical point of view. Although MATLAB is intended primarily for numerical computing, the language will plot functions and data, implement algorithms, create user interfaces and work with programs written in other languages.
Click here to get started with Introduction to MATLAB Programming.
Materials: Video lectures, online textbooks, assignments without solutions
7. Introduction to MATLAB
Improve your fluency in MATLAB with this “aggressively gentle” introduction to the language and popular toolboxes. Students will learn about variables, scripts, operations, visualization, solving equations, curve fitting, and Simulink, which adds model-based design functionality.
Click here to get started with Introduction to MATLAB.
Prerequisites: There aren’t any, but tutorials are available if you need help with MATLAB.
Materials: Lecture notes and assignments without solutions
8. Introduction to C and C++
This course provides a fast-paced introduction to the C and C++ programming languages, which have strengths in software infrastructure and system programming. Learners will read about memory management, pointers, preprocessor macros, object-oriented programming, and how to troubleshoot bugs.
Click here to get started with Introduction to C and C++.
Prerequisites: The class is designed for students with some basic programming experience.
Materials: Lecture notes, assignments without solutions, and projects without examples
9. Elements of Software Construction
Learn the fundamental principles and techniques of developing software that is safe from bugs and easy to understand. This course covers specifications and invariants, testing, state machines, abstract data types, design patterns for object-oriented programming, concurrent programming, and functional programming.
Click here to get started with Elements of Software Construction.
Prerequisite: Students should take Intro to Electrical Engineering and Computer Science first.
Materials: Lecture notes, assignments without solutions, projects without examples, and exams with solutions
10. Introduction to Algorithms
This course features mathematical modeling of computational problems. It emphasizes the relationship between algorithms and programming, and introduces basic performance measures and analysis techniques.
Click here to get started with Introduction to Algorithms.
Prerequisites: Students should have a firm grasp of Python and a solid background in discrete mathematics. As far as classes, students should have taken Introduction to Electrical Engineering and Computer Science as well as Mathematics for Computer Science.
Materials: Video lectures, assignments with solutions, and exams with solutions
11. The Battlecode Programming Competition
This unique challenge combines battle strategy, software engineering, and artificial intelligence. Using Java, student teams program virtual robots to play a real-time strategy game, Battlecode.
Click here to get started with The Battlecode Programming Competition.
Prerequisites: Students should be experienced in Java.
Materials: Video lectures
After building a strong foundation with the courses listed above, OCW and edX have a few popular, next-level courses that Curt suggested. For those looking for a more intense challenge and the chance to learn in a more interactive virtual classroom setting, three MOOCs from MITx on edX have defined start and end dates with a more regimented weekly commitment.
- Artificial Intelligence: This is one of the five best computer science classes in the US, according to Bloomberg Business. Learners can find out how artificial intelligence methods work under several circumstances. Materials available include: video lectures, assignments without solutions, recitation videos, exams without solutions, and instructor insights.
- Mathematics for Computer Science: This course covers elementary discrete mathematics for computer science and engineering and emphasizes mathematical definitions, proofs, and applicable methods. Learners can use video lectures, assignments without solutions, and exams with solutions.
- Introduction to Computer Science and Programming Using Python: The MOOC version of our first OCW course, this offering is designed to help people with no previous exposure to computer science or programming. This course starts on August 30 and runs nine weeks. Students are expected to devote about 15 hours per week.
- Software Construction in Java: Similar to our fifth OCW class, this MITx class is the first of a 2-course sequence about writing good software using modern software engineering techniques. Starting on September 26, this class will take 12 weeks and learners will spend about 15 hours per week on the materials.
- Educational Technology XSeries: This 4-part MOOC program by MITx allows students to explore educational theory and game design. Classes average about nine weeks long, and students can expect to spend between six and 10 hours per week on the courses.
Each course is offered for free, but edX allows you to earn verified certificates that can be added to résumés and LinkedIn profiles for a fee.
The evolution that MIT started 15 years ago with OCW has culminated in a stampede of eLearning providers, including edX (founded by Harvard and MIT), Coursera, Udacity, and the Khan Academy — and that doesn’t count the offerings of individual universities.
“We always say we couldn’t be happier to lose market share,” Curt said. “Part of our mandate in the early days was to try to create a movement around the world. I think we were able to do that.”
No matter to which source learners turn for information, Curt said there is plenty of room for complementary solutions to cater to people’s specific backgrounds, demands, and schedules.
“I don’t think the need for flexible access to resources is ever going to go away,” he said. “Our role is to give them as much as we can, whenever they’ve got the time.”
I joined the Computer Science Department at Stanford University as Associate Professor (Teaching), Associate Chair for Undergraduate Education, and Director of Educational Affairs. From 2001 to 2006, I also taught in the CS department at Stanford as a Lecturer. From 2002-2007, I was a Senior Research Scientist at Google, where I continue to maintain a consulting appointment in the research group. My research interests include computer science education, machine learning, and information retrieval on the Web. Please see my publications web page for more information.
Previously, I worked for several years as a Senior Engineering Manager at Epiphany. Prior to working at Epiphany, I completed my PhD in the Computer Science Department at Stanford. I was also an undergrad at Stanford and I loved it so much that I didn't want to leave.
Outside of work, I enjoy spending time with family, playing the guitar, going on outdoor excursions, and sleeping (which seems to be getting rarer and rarer these days).