A few months ago, Professor Allen Downey of Olin College wrote to me about a DSP textbook he's working on at think-dsp.com. He sent me links to his chapter about the sampling theorem, plus a blog post with an iPython notebook for playing with sampling a bit.
[I've been meaning to write back ever since, but I royally suck at email. So let me blog about it first, then perhaps extend the minimal courtesy of actually writing back.]
As he puts it, his approach is computational. Where many books on sampling and DSP in general throw a lot of dry equations at you without explaining much practical context (and I take the opposite approach, providing intuition and context, leaving the math out almost completely), he explores the practical arithmetic that gets us from point A to point B. "What happens if I do this..."
It's a slightly sneaky approach that builds up toward sampling through AM modulation (yes, as in AM radio), but this works toward a great illustration of how the Nyquist rate, the sampling theorem, and time-frequency duality aren't just sideshow theory, or a bag of cute tricks. They're practical truth that underlies nearly everything we do with signals and audio, even when we're neither sampling, nor working digitally.