Data structures, problem-solving patterns, and lessons from implementing algorithms.