" The university that I work for in 1996 dropped Computer Science in favour of Applied Computing, realising that industry doesn't need someone who can build a linked list library from scratch but rather knows how and when to use an existing library. "
But this brings up the problem of how to develop the mental schemata to process what you're doing. If all you ever do is work with libraries, you miss out on several levels of abstraction and don't fully understand what you're doing.
The other side of the coin is that if you only ever deal with fundamentals like manually programming lists, you're missing out on several levels of abstraction and can only do real-world tasks within a very narrow domain.
The problem we have is that most courses fall into one of two extreme camps, and few people are discussing the middle-ground. But if you look at things like Stride in BlueJ, we're slowly starting to approach it.