# MIT Introduction to Computer Science and Programming

“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.