First, I wanted to link to This blog post by Steve Losh on writing documentation. I think offers some good metaphors as to why 'reading the source', even 'self documenting' source, is insufficient, though of course not everyone will agree with his philosophy.
Second, I wanted to say on the projects that I work on as a systems engineer doing new product development (as in this, not the information technology use of the term) documentation is perpetually threatened. And we usually work on comparatively well funded, non-FOSS programs. Documentation is timing consuming and expensive, and sometimes it is even customer direction to place it at a lower priority than new development. Though inevitably it makes things harder later, sometimes that is o.k. if it works better with the cash flow (saving money now only to pay more later can work if you expect to have more money later). Unfortunately FOSS software projects don't necessarily have people promising a ton of money for the documentation.
I've rented minivans on business trips (particularly for outdoor field tests of equipment my employer develops). They work very well for our use: surprisingly large cargo capacity in a weather proof bay, flexible reconfiguration to carry either people or equipment between test sites, low floors and true fold-flat seats (compared to many of the SUVs we've rented) making loading easy, car-like handling to suit drivers without large vehicle experience; and wide availability at car rental companies both large and small.
Now, we are talking about renting for a specific purpose for only the duration of that purpose, which is a completely different economic calculation than buying a car for daily use.Nonetheless, I've been convinced that when I do have kids (young children seem to require a frighteningly large amount of support equipment) a minivan will be the way to go. (Certainly compared to an SUV, which would offer similar features in a less convenient shape, or a small car, which lacks cargo.) Of course, this all depends on my finances at that point in time.... I'm not so well off that I can purchase vehicles arbitrarily.
As I lament elsewhere in the thread, though that's appropriate for a course called 'CS' I would have preferred, in high school and college, to be taught a more practical 'how to use the standard library and other common libraries'. Granted, that would be more programming than computer science, and it probably would be dirty and pedestrian to people who actually do computer science. But while programming is widely used across technical fields, I don't think many people need to know how to write their own linked list methods or sort algorithms. For me it would have been better to talk about how to solve more challenging 'real world' problems using the existing tools instead of solving 'simple' problems using algorithms we wrote by hand.
We're really talking about two things in the thread -- getting more people to enter the field of CS, and getting people in general to have more useful CS skills. These are different goals.
My college mathematics courses did integrate mathematica and to a lesser extent matlab (engineering courses, but I wasn't an engineering student). This was great for learning about math, but maybe less great for learning about computers.
As a practicing non-computer-scientist engineer, it would have been more useful to me have had good applied programming courses and not computer science courses. What I do in my job (which is mostly matlab, but I've used C++ in the past) is patch together various library and systems calls together with some math and flow control logic to solve problems. In my CS/programming courses in college, they taught us about data structures and sorting algorithms. I would never try to write my own sort algorithm or linked list management methods. It's not interesting and as a non-specialist I would not likely do better than what already exists.