The original post was based on a learning plan that I had worked out for myself after I jumped into the study of programming and computer science just over a year ago on something of a whim. As I’ve mentioned before, I do not have any formal background in computer science beyond the handful of courses from this list that I have worked through myself. However, I do have years of experience in teaching and in curriculum design for natural and foreign language acquisition at the college level, and consulted the computer science curricula from a number of universities around the country when putting the plan together.
On the basis of the feedback from that post, we’ve put together a new list of course offerings that covers a lot more ground. In the process, I’ve also loosened up a number of implicit strictures on resources for inclusion in the present listing. For example, some of these courses require registration at a particular website and/or may not yet be available in full (ex. Coursera), a couple others are actually compiled from other resources freely available online (ex. Saylor). But all of them are still free.
Whereas the first post was intended to provide a general overview of the field along with a generic curriculum and necessary resources suitable for an absolute beginner (containing 27 courses altogether), the present listing is much more extensive and intensive in scope representing 72 courses from 30 different institutions. While we have added a number of new introductory level courses, there is a lot more that may be of interest to intermediate level folks and perhaps even some who are highly advanced and are considering a refresher course or two.
The course listing is broken down into three major divisions: Introductory Courses, Core Courses and Intermediate/Advanced Courses. Individual courses are then listed by category within each division.
Last but not least, thanks to everyone who provided feedback and offered suggestions on how to improve the original listing. Special thanks to Pablo Torre who provided a ton of links in the comments to the first post, many of which are included here.
Intro to Computer Science:
- Introduction to Computer Science and Programming: MIT
- Intensive Introduction to Computer Science: Harvard
- Introduction to Computer Science and Programming Methodology: Stanford
- Programming Abstractions (Second Course in Unit): Stanford
- Linear Algebra through Computer Science Applications: Brown
- Discrete Math and Probability Theory: Berkeley
- Programming Paradigms: Stanford
- Object Oriented Programming: MIT
- Object Oriented Programming in C++: ITU
- Fundamentals of Computer Networking: Manhattan College
- Introduction to Data Communications: Thammasat University
- Introduction to Artificial Intelligence: Berkeley
Intermediate and Advanced Courses
Algorithms and Data Structures:
- Design in Computing: UNSW
- Principles of Programming Languages: IIT
- C++ for C Programmers: UC Santa Cruz
- Heterogeneous Parallel Programming: University of Illinois
- Compilers: Stanford
- Building Mobile Applications: Harvard
- iPhone Application Development: ITU
- Android Application Development: ITU
- Building Dynamic Websites: Harvard
- Introduction to Database Management Systems: KU Leuven University
- Database Management Systems: Ars Digita
- Advanced Databases: Saylor
- Security and Cryptography: Thammasat University
- Designing and Executing Information Security Strategies: University of Washington
- Information Security and Risk Management in Context: University of Washington
- Computer Networks: University of Washington
- Internet Technologies and Applications: Thammasat University
- Statistics and Probability: Harvard
- Probabilistic Systems Analysis and Applied Probability: MIT
- Statistical Inference: Johns Hopkins
- Data Analysis and Statistical Inference: Duke