Skip to main content
MIT
Electrical Engineering & Computer Science
12 units

MIT 6.006: Introduction to Algorithms

6.006 is MIT's core algorithms class — sorting, hashing, trees, graph algorithms, shortest paths, and dynamic programming — emphasizing both rigorous analysis and Python implementation. Its OpenCourseWare lectures are a global standard for learning algorithms and prepping technical interviews.

Fennie is independent and not affiliated with MIT. This is an unofficial study guide.

Build my 6.006 study plan

What makes it hard

Dynamic programming is the famous wall, and the psets require designing algorithms and arguing correctness, not just coding known ones. The exams test whether you can adapt techniques to novel problems under time pressure — pattern-matching to memorized solutions reliably fails.

What you'll cover

  • Asymptotic analysis
  • Sorting and binary search trees
  • Hashing
  • Graph algorithms (BFS, DFS)
  • Shortest paths (Dijkstra, Bellman-Ford)
  • Dynamic programming

The 6.006 study guide

How to study for MIT 6.006, step by step.

  1. 1

    Verify your discrete math is ready

    6.006 leans on proofs, induction, and graph theory at the 6.042 level from week one. If correctness arguments feel foreign, spend a week reviewing before starting — it pays for itself many times over.

  2. 2

    Run each unit as lecture, recitation problems, then pset

    Watch or attend the lecture, work the recitation problems to convert understanding into skill, then take on the pset. Self-learners on OCW should follow the same three-stage rhythm rather than jumping straight to psets.

  3. 3

    Give dynamic programming spaced, repeated attempts

    DP is 6.006's famous wall, and it falls to repetition, not brilliance. Work DP problems across multiple sessions over weeks — define the subproblem in words before writing any recurrence.

  4. 4

    Check OCW solutions only after an honest attempt

    The posted pset and exam solutions are a gift for self-learners — used correctly. Attempt each problem fully, then compare your reasoning against the solution and rework the misses days later.

  5. 5

    Let Fennie spread the load

    Upload the 6.006 calendar or your OCW plan and Fennie's Daily Plan spaces each technique's practice across weeks, paced to your deadlines or your own target date, with runtime-analysis flashcards generated from the actual course materials. Free to start.

    Start my 6.006 plan free

How Fennie helps with 6.006

Fennie's Daily Plans spread 6.006's techniques across weeks of spaced problem practice, whether you're pacing to MIT's pset deadlines or self-studying from OCW. Chat through why a DP subproblem decomposition works, and drill runtime-analysis flashcards — the layer of fluency that frees you to think during exams.

FAQ

Is 6.006 hard?

Yes — it's the course where MIT students learn to design algorithms rather than use them, and dynamic programming humbles nearly everyone at first. Spaced practice on novel problems is the only reliable preparation.

How long does 6.006 take to self-study?

A serious OCW run takes most self-learners 3–4 months at 8–12 hours a week, including psets. It assumes prior programming and discrete math comfort.

What should I know before 6.006?

Python programming and discrete math at the level of 6.042 — proofs, induction, basic graph theory. Going in without proof experience makes the correctness arguments much harder.

Pass 6.006 with a plan, not a cram

Upload your 6.006 materials and Fennie generates a Daily Plan paced to your deadline — plus chat, flashcards, and quizzes built from the actual course content.

Get started free

More MIT courses