RT asked me last weekend about programming. She just learned HTML. Now she's considering learning PHP.
It was this conversation that got me interested in Euclid's Elements. RT has a classical liberal education; she actually studied the Elements. (Sidetrack: Wikipedia says the Elements were “the basic text on geometry thoughout the Western world for about 2,000 years. For centuries, when the quadrivium was included in the curriculum of all university students, knowledge of at least part of Euclid's Elements was required of all students. Not until the 20th century did it cease to be considered something all educated people had read.” Now get this: the mathematical discoveries of the past hundred years are so mind-blowing, so revolutionary, that the relegation of the Elements to obscurity is arguably justified. The mathematician's view of geometry is forever changed; the Elements can never again be what it was. I mentioned this to SC at work. He says we're living in the golden age of mathematics.)
RT liked Euclid's approach of starting from a few axioms and deriving everything else from them. She wanted to know if it is possible to learn programming in the same way, from the ground up.
Here's my answer: Structure and Interpretation of Computer Programs. (You can read the full text for free online.) Elsewhere I've called this “the best programming book ever written”. As it turns out, Section 1.1 is actually titled “The Elements of Programming”. These first few sections still bear re-reading. Powerful stuff.
Is SICP a practical book? It walks a fine line. The programming language you'll learn, if you read it, is not Java or PHP or Ruby or C#. It's Scheme. Scheme has a simple design well suited to the Elements approach. You might find one of those others better suited to the program you're interested in writing, and if so, you might prefer some other book. On the other hand, page 1 of SICP starts by quoting an essay by John Locke; and then it tells you what a program really is, what the word means; and then by section 1.2.1 it's telling you things that I went through a whole CS degree program without learning. That kind of book.