The versatile list: a pathway to abstraction

The humble “list” is usually presented early in a first course on data structures and algorithms, one topic among many, generally considered less interesting than trees and graphs. We believe the list deserves better, and show how the list can be used to bring together a wide variety of Computer Science topics, including: algebraic reasoning, proof by induction, abstract data types, recursion, and generic programming. The emphasis is on developing abstraction and design skills, applying both theory and engineering considerations, ultimately arriving at an unexpectedly powerful framework.