This is a series of courses that I think present a good foundational introduction to computer science, based on my time as an instructor at Carnegie Mellon.
- Computation and Change (no requirements)
An introduction to the fundamentals of computer programming.
- Getting It Right (requires previous topics or programming experience)
How do computer scientists know if their computer programs are correct?
- Numbers in a Computer (no requirements)
How do computers store and manipulate numbers?
- Arrays, Searching, and Sorting (requires previous topics)
Some of the most beautiful algorithms in computer science deal with sequences of information.
- Trees and the Structure of Data (requires some programming experience)
Learn about the different ways computers represent, store, and think about data.
- Foundations of Programming - Learn about the lambda calculus and the theory behind the use of types in programming languages.
- Contracts and Correctness with JML - The Java Modeling Language is an powerful tool for documenting, testing, and proving the correctness of programs and data structures.
- Introduction to Coq - Follows the curriculum from the Logical Foundations textbook.
Learn any of the topics here with my expert help, on your own schedule.