This was really seeded for me when trying to teach people taking computer science courses who were trying to do practical things like integrate C libraries into their higher level projects, but didn't really understand how things were working under the hood and getting themselves into a mess.
If they understood a little more about how their program was built and run ... from the bottom up, as it were :) ... they would have had less pain.
Of course, it just shows as usual the hardest problem in computer science is indeed, naming!
Edit: BTW you're right, "Code" by Petzold should be required reading http://www.charlespetzold.com/code/index.html