What You Already Know (Activate Before Unit 1)

You use data structures every time you use software. Here's what you already know without knowing it:

Every structure we study was invented to solve a real problem someone was stuck on. We'll learn both the structure and the problem it was designed to solve.

Progress
0 of 12 units completed | Track: All Tracks
← Teaching Computing Differently · CS 210 · 4 Units · Community College · 18 Weeks

Data Structures
& Algorithms

Every data structure is an argument about the world — a claim that some operations matter more than others. Every algorithm is a strategy, a tradeoff, a value judgment. We study them from the root and build something real with each one.

12Structures as
Projects
18Weeks Deep
Building
0LeetCode
Grind
3Adventure
Tracks
01
Build First, Abstract Second

You implement a linked list before Java's LinkedList. A BST before TreeMap. Amy Ko's research: reading and understanding before writing creates deeper, transferable learning. Every abstraction is earned, not given.

02
Each Structure Is a Story

A stack isn't a data structure — it's your browser's back button, undo/redo, how compilers parse. Every structure gets a real story about the human problem it solved. Jeff Anderson: context before content.

03
No LeetCode Grind Culture

Speed-running 500 problems is hazing, not pedagogy. Ko's research shows it produces surface learning that doesn't transfer. Deep, meaningful projects instead. Understanding that serves you in 10 years.


Pedagogical Foundation

How This Course Actually Works

Every design choice is grounded in research on how people learn. We do projects instead of exams. We go deep on fewer things instead of shallow on many. And we always ask: why was this structure invented? Whose problem was it designed to solve? Your final project is a real system you build yourself.

🧱
Mini Project for Every Structure

Every major data structure culminates in a project where you build something real. A stack becomes a text editor undo system. A graph becomes a campus navigator. You deploy, then reflect on what the structure revealed about itself.

🗺️
Three-Track Adventure System

Same core concept weekly, different depth. Novice Explorer: build and understand. Builder: rigor + analysis. Architect: proofs, research, edge cases. Tracks are starting points, not ceilings. Move up anytime.

📖
Read Before Write (Amy Ko)

Every new structure: trace existing implementations and predict behavior before writing. Ko's research shows this "read before write" approach dramatically improves debugging ability and structural intuition.

Critical History of Computation

Who invented the hash table, and why? Which algorithm was credited to the wrong person? Whose foundational work was erased? Knowing the history makes structures meaningful, not arbitrary.

📂
Portfolio + Ungrading (Jeff Anderson)

No traditional exams. A living portfolio of every implementation, project, and reflection. You assign your own grade with evidence at the end. The 2-minute question rule: write a precise question before asking for help.

🌱
Scaffolded Productive Struggle

Ko's research: framing difficulty as authentic practice keeps learners engaged. Each project has three layers: working solution (required), efficient solution (encouraged), edge cases + analysis (for those ready). Work at your edge.

The Core

Every Structure
Is a Mini Project

Twelve data structures. Twelve projects. Each one teaches you to ask: why was this invented? What problem does it solve that the alternative can't? Who benefits when this runs in O(1)?

DS-01 · Arrays
Access: O(1) · Insert: O(n)
Space: O(n)
Arrays & Dynamic Arrays
// Contiguous memory. The foundation of everything.

You've used arrays without thinking about contiguous memory. Here we think about it. We build a dynamic array from scratch — doubling strategy, amortized O(1) pushes, the true cost of insertion. You earn Python's list.

arr = [ A | B | C | D | _ | _ ] ← contiguous arr[2] → O(1): base_addr + 2*size insert(1,X) → O(n): shift C,D,_ right first push(E) → O(1) amortized: just append
Mini Project: CSV Spreadsheet Engine

2D dynamic array CSV processor. Sort by any column, filter, compute stats. Compare performance adding a million rows. Whose data exists in structured form — and whose doesn't?

Novice
Python lists. Build all features. Reflect on what happens at scale.
Builder
DynamicArray class from scratch. Match Python list amortized behavior.
Architect
Prove amortized O(1) via potential method. When does tripling beat doubling?
🔗 NumPy, database tables, image pixels, time series data
💼 Used In
  • Database Engines
  • NumPy / Pandas
  • Image Processing
DS-02 · Linked Lists
Access: O(n) · Head insert: O(1)
Mid insert: O(n)
Linked Lists
// Nodes and pointers. Freedom from contiguity at a cost.

An array is a neighborhood with numbered houses. A linked list is a treasure hunt — each house holds a note to the next. Fast at the front, slow everywhere else. We build singly, doubly, and circular. When is this actually better?

Head→[🐢|→]→[🦊|→]→[🦅|→]→null Insert at head: O(1) — just update pointer Find middle: O(n) — must walk the chain Doubly: [←|🦊|→] — previous AND next node
Mini Project: Music Playlist System

Doubly-linked playlist: play, skip, go back, shuffle (Fisher-Yates), loop. Why is doubly-linked perfect for "previous"? Benchmark vs. array on 10,000 songs.

Novice
Python Node class. All ops. Document why each pointer direction was chosen.
Builder
Singly + doubly. LRU cache (linked list + hashmap). Floyd cycle detection.
Architect
Prove Floyd's algorithm. Implement XOR linked list. Analyze cache locality.
🔗 Browser history, undo stacks, OS scheduling, blockchain
💼 Used In
  • Browser History
  • OS Schedulers
  • LRU Cache
DS-03 · Stacks & Queues
Push/Pop/Peek: O(1)
Enqueue/Dequeue: O(1)
Stacks & Queues
// LIFO and FIFO — ordering philosophies with profound consequences.

You use stacks every time you hit Cmd-Z. Queues run every print job, task scheduler, and message broker. We implement both multiple ways and understand why the abstraction matters more than the underlying structure.

Stack (LIFO): Queue (FIFO): push(A,B,C) enq(A) enq(B) enq(C) pop()→C deq()→A ← first in, first out pop()→B deq()→B ← last in, first out ← fairness encoded
Mini Project: Text Editor + Hospital Triage

Part 1: Undo/redo with two stacks (command pattern). Part 2: Priority queue ER triage. Why does triage require priority, not FIFO? What does priority encoding say about whose emergency "counts more"?

Novice
Python lists. Both projects. What real systems near you use queues?
Builder
Stack via linked list, queue via circular buffer. Monotonic stack problems.
Architect
Prove queue via two stacks in amortized O(1). Van Emde Boas priority queue.
🔗 Call stacks, browser history, compiler parsing, OS scheduling
💼 Used In
  • Compilers
  • OS Task Scheduler
  • Message Brokers
DS-04 · Hash Tables
Access: O(1) avg · Worst: O(n)
Insert: O(1) avg
Hash Tables
// The most magical structure. O(1) lookup — when the hash cooperates.

Hash tables are everywhere: Python dicts, database indexes, every set. We build from scratch, grapple with collisions (chaining vs. open addressing), understand load factors, and verify we've truly achieved O(1) on real data.

hash("cat") = 7 → table[7] = "cat" hash("fish") = 7 → COLLISION! Chaining: table[7]→["cat","fish"] Open addr: probe next empty slot Load factor > 0.7 → resize and rehash
Mini Project: Word Frequency Analyzer

Text analysis with your hash table. Frequency across a large corpus (novel, congressional record, your artist). Compare to sorted array. Critical: whose words count as "common"? Extend to detect plagiarism.

Novice
HashMap with chaining. Analyze your favorite artist's lyrics. What is "important"?
Builder
Both collision strategies. Consistent hash ring for distributed caching.
Architect
Prove expected O(1) under uniform hashing. Study SHA-256. Perfect hashing.
🔗 Python dict, DB indexes, blockchain Merkle trees, password storage
💼 Used In
  • Database Indexes
  • Python Dict
  • Blockchain
DS-05 · Binary Trees & BST
BST avg: O(log n) · Worst: O(n)
AVL: O(log n) guaranteed
Binary Trees & BSTs
// Hierarchy in pointers. The fastest search structure that stays sorted.

A BST keeps data sorted for free — every insertion maintains the invariant. We implement from scratch, master all three traversals knowing WHY each order matters, face the degenerate case, and discover how balance changes everything.

50 Inorder: 20,30,40,50,60,70,80 ← sorted! / \ Preorder: 50,30,20,40,70,60,80 30 70 Postorder: 20,40,30,60,80,70,50 / \ / \ ← WHICH order for file deletion? 20 40 60 80
Mini Project: File System Navigator

BST-indexed command-line file explorer. Search by name, sort by size, type-filter, print tree. Then ask: how is a real file system different from a BST? What happens at a million files?

Novice
BST + all traversals. Build file explorer. Draw every tree on paper first.
Builder
BST worst case → AVL with rotations. Compare heights empirically.
Architect
Prove AVL maintains balance. Study red-black trees. Implement B-tree.
🔗 File systems, DB B-trees, HTML DOM, ML decision trees
DS-06 · Heaps
Insert: O(log n) · Peek: O(1)
Extract-min: O(log n) · Build: O(n)
Heaps & Priority Queues
// "What's most important right now?" — answered in O(log n).

A heap answers one question faster than anything: "what's the minimum?" Not arbitrary access — just the best element. We build a binary heap stored in an array (the elegant trick!), implement heapsort, and build a priority queue that solves real scheduling problems.

100 Stored flat: [100,80,60,20,70] / \ parent(i) = (i-1)//2 80 60 left(i) = 2*i+1 / \ / right(i) = 2*i+2 20 70 (spatial structure → index math!)
Mini Project: ER Triage Simulator

Priority queue hospital simulation with re-prioritization. Full demo with edge cases. Critical: real clinical AI has encoded racial bias in severity scores (see Obermeyer et al. 2019). What would you audit before deploying this?

Novice
Python heapq. Build simulator. Reflect on algorithmically prioritizing human life.
Builder
Binary heap from scratch. Decrease-key. Compare heapsort vs. quicksort.
Architect
Prove heap construction O(n). Fibonacci heaps. Why Dijkstra needs decrease-key.
🔗 OS scheduling, Dijkstra's algorithm, merge k sorted lists, A* search
DS-07/08 · Graphs & Graph Algorithms
BFS/DFS: O(V+E) · Dijkstra: O((V+E)logV) · Bellman-Ford: O(VE)
Graphs
// The most expressive structure. Relationships made computable.

Graphs model everything: social networks, road maps, the internet, recommendation systems, disease spread. We study adjacency matrix vs. list, directed vs. undirected, weighted vs. unweighted. BFS, DFS, Dijkstra, topological sort.

A ←── B ──→ D BFS: level-by-level │ │ ↑ DFS: deep+backtrack ↓ ↓ │ Dijkstra: cheapest path C ──→ E ─────┘ TopoSort: order deps

The most important insight: the right algorithm depends entirely on what question you're asking. BFS finds shortest hops. Dijkstra finds cheapest path. Topological sort orders dependencies. The question determines the algorithm.

Mini Project: Campus Navigator + Social Network Analyzer

Part 1: Dijkstra campus navigation — shortest paths, bottlenecks, visualization. Part 2: Social network — connected components, communities, degree distribution. Critical: what does a recommendation algorithm's graph encode about who "belongs together"?

Novice
Adjacency list, BFS, DFS. Map your campus. Which buildings are most "central"?
Builder
Dijkstra + Bellman-Ford + topological sort. Dense vs. sparse runtime comparison.
Architect
Prove Dijkstra correctness. Network flow. Social network surveillance analysis.
🔗 GPS routing, social networks, package managers, web crawlers, fraud detection
ALGO-01 · Sorting
Comparison lower bound: Ω(n log n) · Counting sort: O(n+k) · Python Timsort: hybrid
The Sorting Story
// Six algorithms. One question: what does "better" mean here?

Bubble, Selection, Insertion, Merge, Quick, Counting/Radix. Each is a strategy with a story. The information-theoretic lower bound is the jewel: no comparison sort can beat O(n log n) worst-case. This is a theorem about the universe, not your skill.

Bubble: O(n²) simple, stable, slow Insertion: O(n)/O(n²) fast on nearly-sorted! Merge: O(n log n) always, costs space Quick: O(n log n) avg, O(n²) worst case Counting: O(n+k) only when k is small Python: Timsort ← merge+insertion hybrid
Mini Project: Visualizer + Algorithm Recommendation Guide

Animated sorting visualizer for all 6. Benchmark on 5 input distributions. Write a one-page recommendation guide for a non-technical audience. Critical: credit scores sort humans by risk. What should never be sorted algorithmically?

Novice
Bubble, selection, merge. Build visualizer. Write recommendation guide in plain language.
Builder
All six. Implement Timsort. Document every performance anomaly on edge cases.
Architect
Prove Ω(n log n) lower bound. Derive quicksort average-case. Study introsort.
🔗 DB query optimization, Python sort(), search indexing, financial risk sorting
ALGO-02 · Dynamic Programming
Requires: optimal substructure + overlapping subproblems → memoization or tabulation
Dynamic Programming
// Trading memory for time. The most elegant algorithmic technique.

DP is not a data structure — it's a way of seeing. If a problem has optimal substructure and overlapping subproblems, solve it once and cache the answer. Fibonacci is the gateway. Edit distance is the real application. Once you see the pattern, it never leaves you.

Fibonacci naive: O(2ⁿ) — recomputes fib(3) 21× Fibonacci memo: O(n) — compute once, reuse Template: 1. Define the subproblem clearly 2. Find the recurrence relation 3. Add memoization (top-down) 4. Convert to tabulation (bottom-up)
Mini Project: Spell Checker + DNA Aligner

Part 1: Levenshtein edit distance spell checker. Part 2: Needleman-Wunsch DNA alignment. Both DP. Critical: test your spell checker on AAVE, technical slang, non-English names. Document every failure. Whose language is "correct"?

Novice
Fibonacci memo + 3 classic problems. Spell checker. Document dictionary assumptions.
Builder
5+ DP problems. Memo vs. tabulation. DNA aligner. Optimize space to O(n).
Architect
Prove optimal substructure. Approximation algorithms where DP is too slow. DP on trees.
🔗 Bioinformatics, autocorrect, speech recognition, portfolio optimization, game AI

18-Week Calendar

Root to Branch,
Week by Week

We build from the ground up — memory and Big-O first, then each structure in turn. Every unit ends with a mini project exhibition. The final three weeks belong to your capstone: a substantial system you build with your chosen structures.

Wk
Structure
Core Concept + Analysis
Project Milestone
Critical Lens
Unit I — Memory, Arrays & Linear Structures
01Unit I
The Problem First

You need to find one item in a list of a million. How long does that take — and does the answer change if the list is sorted?

Memory + Big-O from Scratch
RAM model, asymptotic analysis. Why Big-O matters — and what it hides.
Foundational
Count Operations, Then Generalize
Trace code, identify loops, recursion. Build intuition before formalism.
Lab: Measure, Don't Guess
Time 5 functions on n/2n/4n. Plot curves. Document every surprise.
Project
Whose Time Counts?
Big-O hides constants. On whose hardware is "fast" calibrated?
02Unit I
Arrays + Dynamic Arrays
Contiguous memory, O(1) access, O(n) insert. Build dynamic array from scratch.
Foundational
Amortized Analysis
Doubling → amortized O(1) push. Novice: observe. Architect: prove potential method.
Project: Spreadsheet Engine
2D dynamic array CSV processor. Sort, filter, stats. Mini-demo to class.
Project
What Gets Measured?
Whose lives are hard to put in structured form — and what disappears unmeasured?
03Unit I
Linked Lists
Singly, doubly, circular. Trace before implementing. Ko: read before write.
Traversal + Cycle Detection
Iterative and recursive. Reverse in place. Floyd's cycle detection algorithm.
Project: Music Playlist
Doubly-linked playlist. Benchmark against array. Demo to class.
Project
What Spotify Actually Uses
Production vs. classroom gap. What does the abstraction hide?
04Unit I
Stacks & Queues
LIFO vs FIFO as ordering philosophies. Both via array and linked list.
Call Stack + Expression Parsing
Why recursion uses a stack. Shunting-yard algorithm. Two stacks → calculator.
Project: Text Editor Undo/Redo
Command pattern. Add hospital triage queue. Mini-exhibition.
Project
Priority and Power
Queues encode fairness assumptions. Who designed this queue — and for whose workflow?
Unit II — Hash Tables & Search & Sorting
05Unit II
Hash Tables
Hash functions, collision resolution, load factors. Build from scratch to O(1).
Foundational
Birthday Paradox + Internals
Expected collisions under uniform hashing. Python dict internals. The magic is math.
Project: Word Frequency
Large text analysis. Compare to sorted array. Mini-exhibition.
Project
What Gets Indexed?
Search engines are hash tables at scale. Safiya Noble on what content stays invisible.
06Unit II
Binary Search + O(n²) Sorts
Invariant-based reasoning. Bubble, selection, insertion — build and analyze all three.
Why O(n²) Fails at Scale
Timing curves: 1000 items fine, 1M catastrophic. Insertion sort wins on nearly-sorted.
Visualizer Part 1
Animated visualizer for O(n²) sorts. Benchmark 3 input shapes.
Project
Sorting Human Lives
Credit scores sort people by risk. What data goes in? What should never be sorted?
07Unit II
Merge Sort + Quick Sort
Divide and conquer. Merge: always O(n log n). Quick: pivot problem + randomization.
Foundational
Recurrence Relations
T(n)=2T(n/2)+O(n) → O(n log n). Master theorem. Derive, don't just state.
Visualizer Part 2 + Guide
Add merge + quicksort. Write recommendation guide for non-technical audience.
Project
Information-Theoretic Bound
No comparison sort beats O(n log n). A theorem about the universe. What does impossibility teach us?
08Mid-I
Mini Exhibition I
Present best project from Units I–II. Peer feedback. Self-evaluation.
Exhibition
Portfolio Checkpoint
Learning conference. Identify 2 concepts to deepen. Adjust track if needed.
Capstone Pitch
Pitch your final system. Begin scoping which structures and why.
Project
Who Builds This Field?
CS demographics survey. Whose problems get solved first? What changes when rooms change?
Unit III — Trees & Balanced Structures
09Unit III
Binary Trees + BSTs
Tree terminology, all 3 traversals (know WHY each order). BST property. Trace before implement.
Foundational
BST Analysis + Degenerate Case
All ops O(h). Sorted insertion → O(n). Why balance changes everything.
Project: File System Navigator
BST-indexed file explorer. Search, sort, type-filter, print tree. Demo to class.
Project
File Systems as Power
What determines the hierarchy? Who designed the folder structure you navigate daily?
10Unit III
Balanced Trees: AVL
Why BST worst case is unacceptable in production. AVL rotations. Guaranteed O(log n).
Rotations + Invariant Maintenance
L, R, LR, RL rotations. Novice: trace visually. Architect: prove rotation maintains invariant.
BST vs AVL Benchmark
Worst-case input for BST. Measure height. Compare AVL on same input.
Project
Java's TreeMap is Red-Black
Why did Java choose red-black over AVL? What tradeoffs did the designers make, and for whom?
11Unit III
Heaps + Priority Queues
Binary heap flat in array. Sift-up, sift-down, build-heap O(n). The elegant index math.
Foundational
Heapsort + Decrease-Key
Heapsort O(n log n), O(1) space. Decrease-key operation. Why Dijkstra needs it.
Project: ER Triage Simulator
Priority queue simulation. Re-prioritization. Full demo. What does your severity score encode?
Project
Clinical AI Bias
Obermeyer et al. 2019 (Science): clinical AI encoded racial bias in severity scores. What would you audit?
Critical
12Unit III
Tries + Union-Find
Prefix trees O(m) ops. Compressed tries. Union-find with path compression → O(α(n)) ≈ O(1).
Advanced Structure Analysis
Inverse Ackermann function. Segment trees for range queries. When each structure is appropriate.
Project: Autocomplete Engine
Trie autocomplete trained on your community's vocabulary. Document what standard lists erase.
Project
Whose Language Is "Correct"?
Autocorrect "fixes" names it doesn't recognize. Who made the dictionary? Who is harmed?
Critical
Unit IV — Graphs & Dynamic Programming
13Unit IV
Graph Fundamentals + BFS/DFS
Adjacency matrix vs. list. BFS: shortest hops. DFS: deep exploration. Both O(V+E).
Foundational
What Question Are You Asking?
BFS ≠ Dijkstra ≠ DFS. The question determines the algorithm. This is the central graph insight.
Campus Graph: Build + Explore
Model your campus. Find connected components. BFS: which buildings in 3 hops?
Project
Graphs as Infrastructure
Power grids, roads — all graphs. Whose neighborhoods have fewer edges in every infrastructure graph?
14Unit IV
Dijkstra + Topological Sort
Dijkstra: greedy shortest path O((V+E)logV). Kahn's algorithm for topological sort.
MST: Kruskal's + Prim's
Kruskal's with Union-Find. Prim's with heap. When do minimum spanning trees matter?
Campus Navigator + Dep Resolver
Dijkstra on campus + course dependency resolver with topological sort.
Project
GPS Routing + Redlining
Studies show routing algorithms can reflect historical redlining. What graph weights encode is a design choice.
Critical
15Unit IV
Dynamic Programming
Optimal substructure + overlapping subproblems. Memo vs. tabulation. Fibonacci gateway.
Foundational
Classic DP Problems
Edit distance, LCS, knapsack, coin change. Each reveals a new way to define "subproblem."
Project: Spell Checker + DNA Aligner
Levenshtein spell check. Needleman-Wunsch alignment. Test on your community's vocabulary.
Project
Edit Distance Is Political
Edit distance defines "closeness." The dictionary defines "correct." Both are design choices. Whose names get "corrected"?
Critical
Capstone — Final Weeks: Build Something Real
16Cap
Capstone Studio Week
Dedicated build time. Must use 3+ data structures and 2+ algorithms. Learning conference check-ins.
Algorithm Strategy Review
Greedy, D&C, DP, backtracking. Which fits your problem? Can you justify the choice?
Capstone Code Review
Ko's structured peer review protocol. 3 warm + 3 cool feedback. Read first, trace second.
Project
Design Decisions Are Values
Every O(1) insert is an O(n) access somewhere. What did you optimize for — and for whom?
17Final
Capstone Exhibition — Day 1
Community showcase. Present your system: what you built, which structures, what you'd change.
Exhibition
Portfolio + Learning Conference
Individual meeting: present portfolio, assign grade with evidence.
Portfolio Due
All implementations, write-ups, traces, reflections, final self-evaluation + grade.
What Carries Forward?
Not the code — the thinking. The habit of asking: what is this optimized for, and for whose use case?
18Finale
Capstone Exhibition — Day 2
Remaining presentations. Celebration. What does CS 210 leave in you — and what do you leave in it?
Exhibition
Where Do You Go Next?
Transfer pathways, careers, open-source, organizations using DSA for social good.
Course Co-Evaluation
You evaluate the course. Your feedback co-creates the next version. Freire's dialogic education.
Final Reflection
Every structure was invented to solve a human problem. What problem would you invent a structure to solve?
Intellectual Lineage

Standing on the
Shoulders of Thinkers

Amy J. Ko
Computing Education

Equitable, joyous, liberatory computing education. Read before write. Scaffolded struggle. CS assessments aren't fair — so we don't use traditional ones.

Jeff Anderson
Pedagogy

Ungrading, deep vs. surface learning, Conquering College. Context before content. You are the world's leading expert on your own learning.

Paulo Freire
Liberatory Ed.

Pedagogy of the Oppressed. Students are not empty vessels. Knowledge is liberation. The classroom is a site of political transformation.

bell hooks
Liberatory Ed.

Teaching to Transgress. The classroom as a site of freedom. Education that crosses boundaries of race, gender, and class.

Donald Knuth
TAOCP

The Art of Computer Programming. Mathematical rigor applied to algorithms. Every algorithm has a story — Knuth tells them all.

Edsger Dijkstra
Algorithms

Shortest path. Structured programming. "Computer science is no more about computers than astronomy is about telescopes."

Safiya Noble
Critical Tech

Algorithms of Oppression. Search algorithms encode whose knowledge is findable — and whose is buried.

Robert Tarjan
Graph Algorithms

Union-Find analysis. DFS tree algorithms. Some of the most beautiful algorithmic results in computer science history.


Portfolio + Ungrading

You Assign Your Grade.
Here's the System.

Adapted from Jeff Anderson's ungrading practice. The goal is not to perform mastery for a grade. The goal is to build real understanding that serves you in 10 years. Evidence of learning — not test scores — is the only currency.

Your Learning Portfolio

A living document of your journey — not a polished showcase, but a process record. First attempts, failures, revised understanding. All of it belongs here.

  • Every implementation with traced examples and documented thinking
  • Concept notes in your own words before technical language
  • Mini project write-ups: built, failed, would rebuild
  • Complexity analyses: derive from scratch, don't just state
  • Critical essays: who built this, for whom, what does it encode?
  • Bi-weekly learning reflections
  • Evidence of peer teaching and feedback given
  • "Conquering College" meta-learning log

Three Feedback Sources

You receive feedback from three sources. The instructor is the smallest — mirroring how professional software engineers actually work.

  • Self-directed: 2-minute question rule. Check implementations against traced examples. Document your own errors and the reasoning behind each fix.
  • Peer code review: Structured weekly review using Ko's read-first protocol. Warm and cool feedback. No debugging for each other — only clarifying questions that help them find it.
  • Instructor conferences: Bi-weekly 15-min coaching sessions. Forward-looking, specific. Not a grade — a conversation about what's working and what to deepen.
  • You assign your grade: Final self-evaluation with evidence. You present the case. If the work is there and documented, it's confirmed. This is trust-based education.
Learning Strategy

How to Succeed in Data Structures

These strategies come directly from Amy Ko's research on expert programmers and Jeff Anderson's deep-learning pedagogy. They apply to DSA specifically.

01
Draw Before You Code

For every new structure, draw it on paper with 4–5 elements before touching a keyboard. Insert, delete, and search by hand. The diagram reveals what the code hides.

02
Trace Every Operation

Amy Ko's "read before write": trace through an existing implementation line by line before writing your own. Predict what each line does. Confusion here is data — write it down.

03
Derive Complexity, Don't Memorize

Don't memorize "BST is O(log n)." Derive it: at each level, you eliminate half the tree. If you can't derive it, you can't apply it. Derivation transfers. Memorization doesn't.

04
Build the Library Version Last

The rule in this course: you cannot use java.util.LinkedList until you've built one. You cannot call Collections.sort() until you can explain why it's O(n log n). Every abstraction is earned.

05
Find the Real-World Analog

Every structure is a metaphor. A queue is a checkout line. A heap is a hospital triage system. A graph is a road network. If you can't name the real-world analog, you don't understand the structure.

06
Ask Who Designed This

Every structure was invented to solve a specific problem, by specific people, for specific use cases. Knowing the history makes the structure real — not an arbitrary fact to memorize, but a decision someone made.

How It All Connects

The DSA Concept Map

Every structure and algorithm in this course connects. Here's the web that holds it together.

Memory Foundation
RAM Model → Big-O
Arrays + Dynamic Arrays
Amortized Analysis
Every Structure
Linear Structures
Arrays → Linked Lists
Stacks + Queues
Hash Tables
O(1) Operations
Tree Hierarchy
Binary Trees → BST
AVL / Red-Black
Heaps + Tries
O(log n) Guaranteed
Graph Theory
Graphs → BFS / DFS
Dijkstra + MST
Topological Sort
Everything Is a Graph
Algorithm Design
Brute Force → Greedy
Divide + Conquer
Dynamic Programming
Impossibility Bounds
Critical Thread
Who designed this?
What is optimized?
For whose use case?
What does it encode?
Real Data

Practice with Real Datasets

Every data structure should be practiced on data with real-world stakes. These datasets are curated for DSA projects that matter.

OpenStreetMap (Bay Area)

Real road network graph for campus navigation, Dijkstra, and MST projects. Build your own routing system on actual streets.

→ Get Dataset
Project Gutenberg

50,000+ free books. Excellent for trie autocomplete, hash table word frequency, and edit-distance spell-checking projects. Train on any language.

→ Get Dataset
UCSC Genome Browser

DNA sequences for the dynamic programming alignment project. Real genomic data from the institution that pioneered open genome access.

→ Get Dataset
Wikipedia Graph Dump

Hyperlink network of Wikipedia articles as a directed graph. BFS finds shortest path between any two topics. Reveals knowledge structure.

→ Get Dataset
IPEDS (College Data)

Enrollment, completion, and cost data for every US college. Sort, search, and analyze which institutions serve which communities.

→ Get Dataset
Spotify Million Playlist

Graph-structure playlist data. Model songs as nodes, co-occurrence as edges. Build a recommendation system using graph traversal.

→ Get Dataset
Mastery

Earn Your Structure Badge

Complete mini projects to unlock badges. Tracked locally in your browser — a record of your building, not your grade.

🌱
Applied Engineer
Complete 4+ units
🔨
Systems Builder
Complete 8+ units
🔬
Algorithm Architect
Complete all 12 units