Devil's advocate time.
"The hardware side of computers keeps on getting better and cheaper at an exponential rate," writes Lanier. "[But] this breathtaking vista must be contrasted with the Great Shame of computer science, which is that we don't seem to be able to write software much better as computers get much faster."
Behind this statement is the observation made 30 years back by Jerry Weinberg that when you peel back the onion on most technical problems in software, you'll quickly get to a people problem. If you think the people side has improved over the past 30 years, read Weinberg's "The Psychology of Computer Programming," written in 1971. Or better, pick up the Silver Anniversary Edition (1998), which adds some commentary on how well the original has held up. The problems in software that Weinberg talked about 30 years ago are ones you still see today.
Sure, we're seeing multiplier effects based on software tools getting better, but having been in this business for long enough to have lived through long-range trends, I don't see that we're much better at simple things like communicating with each other than we were 30 years ago. We have better tools, and improved methodologies, but the classes of problems I see in development today differ from those I saw 20 years ago only in detail. We have interfaces based on objects and UML to describe them, but we still get "oops, didn't I tell that that we changed the design?" or "yeah, it's more complicated to do this this way, but I'm getting to use this cool new algorithm/pattern" on a regular basis. People or groups don't get along, and their disagreements spill out into the product. Introverted developers still let themselves get run over by Extroverted Marketing managers in schedule negotiations, and products still suffer because time for QA got squeezed out at the end of a death march. In the meantime, I have a Palm V in my pocket, more computing power in my study than most colleges had 30 years ago, and am burning CDs for backup instead of waiting in line to put a magtape onto a tape drive.
Software development is a human activity, and we're not any better at being humans than we were when we were feeding carddecks into room-sized mainframes.