MIT Introduction to Computer Science and Programming

MIT Logo“MIT 6.00 — Introduction to Computer Science and Programming” is one of the best introductions to programming I’ve seen, and I guess I shouldn’t expect less from the Massachusetts Institute of Technology. 24 video recordings of Computer Science lectures (totalling roughly 20 hours) by Professors Eric Grimson and John Guttag, current and former heads of Electrical Engineering and Computer Science at MIT. The course focuses on, quite simply, teaching you how to think like a programmer and solve problems computationally. Historically, LISP was the language of choice for Computer Science introductions at MIT, but was since replaced by every imperative programmer’s new darling, Python.

To quote the overview given in the first video, the course revolves around:
  • Computational thinking
  • Understanding code
  • Understanding abilities and limits
  • Mapping problems into computation

I highly recommend watching this if you’re new to programming, a hobby programmer, or even if you’re pretty well-versed — I’m sure there are nuggets of useful information inthere for everyone. Give Lecture 1 a look; if you like it, I’ve embedded the entire course after the jump, but it can also be found on the official course website, along with assignments, exams and solutions.

Lecture 1: Goals of the course; what is computation; introduction to data types, operators, and variables

Lecture 2: Operators and operands; statements; branching, conditionals, and iteration

Lecture 3: Common code patterns: iterative programs

Lecture 4: Decomposition and abstraction through functions; introduction to recursion

Lecture 5: Floating point numbers, successive refinement, finding roots

Lecture 6: Bisection methods, Newton/Raphson, introduction to lists

Lecture 7: Lists and mutability, dictionaries, pseudocode, introduction to efficiency

Lecture 8: Complexity; log, linear, quadratic, exponential algorithms

Lecture 9: Binary search, bubble and selection sorts

Lecture 10: Divide and conquer methods, merge sort, exceptions

Lecture 11: Testing and debugging

Lecture 12: More about debugging, knapsack problem, introduction to dynamic programming

Lecture 13: Dynamic programming: overlapping subproblems, optimal substructure

Lecture 14: Analysis of knapsack problem, introduction to object-oriented programming

Lecture 15: Abstract data types, classes and methods

Lecture 16: Encapsulation, inheritance, shadowing

Lecture 17: Computational models: random walk simulation

Lecture 18: Presenting simulation results, Pylab, plotting

Lecture 19: Biased random walks, distributions

Lecture 20: Monte Carlo simulations, estimating pi

Lecture 21: Validating simulation results, curve fitting, linear regression

Lecture 22: Normal, uniform, and exponential distributions; misuse of statistics

Lecture 23: Stock market simulation

Lecture 24: Course overview; what do computer scientists do?

Thank you, MIT, for making your courses open like this.

For more information, see the course website. You can find more OpenCourseWare on the OpenCourseWare website.