I often get a lot of shock when I question Shakespeare's value.

I'm not shocked at all; your viewpoint is actually fairly common. However, your points about Shakespeare are evidence that you really never fully understood why we study Shakespeare. I'm not saying it's your fault. Indeed, more than likely it's because of the sorry state of English education in high school. I'll do my best to explain here.

I'll start by acknowledging that enlightenment/revelation is a significant piece to it. Explaining this to someone who hasn't studied English in depth is like trying to explain why Lisp is so beautiful to a Blub programmer. It's possible, but it requires a writer of Graham's caliber and I fear I'm not yet skilled enough for the task. For now you'll just have to take it on my word that such enlightenment exists. From personal experience, I know it is possible to achieve it on the high school level and the impact is long lasting. Without Powers, Faulkner, Shakespeare, Achebe, Hemingway, there's no way I could have achieved the level of success I have in Computer Science. If I hadn't gotten the hard stuff in high school, I wouldn't have bothered to continue to study it on the side in college.

My personal anecdote is not my main point, however. It's a single data point with no evidence, and I present it in the hope that it be useful in some way. The real reason why we study Shakespeare in high school is not for the enlightenment that results from his words. It's because his influence on the past and present of literature is overwhelming. Without Shakespeare you wouldn't have Dickens, Coleridge, Melville, etc. All of the works of these people contain Shakespeare's influence. Hell, he helped change the English language itself. Indeed, there's a great parallel to C here. Do you really think we teach C so that people will program in it? No! We teach C because the concepts contained in the language underly so many different topic areas in Computer Science. Who cares about the enlightenment from understanding Hamlet, pointer arithmetic, memory management, and so on! What's really important is understanding thees things so you can understand the modern, cutting-edge stuff.

It's fine if you think the culture stuff is bullshit. But if you like Dickens and Melville then you should understand Shakespeare. And damn, if more people understood C, the most popular open source browser wouldn't be memory leak hell. ;-)

I'll close with a quote from Spolsky:

Today, to work on CityDesk, I need to know Visual Basic, COM, ATL, C++, InnoSetup, Internet Explorer internals, regular expressions, DOM, HTML, CSS, and XML. All high level tools compared to the old K&R stuff, but I still have to know the K&R stuff or I'm toast.

Ten years ago, we might have imagined that new programming paradigms would have made programming easier by now. Indeed, the abstractions we've created over the years do allow us to deal with new orders of complexity in software development that we didn't have to deal with ten or fifteen years ago, like GUI programming and network programming. And while these great tools, like modern OO forms-based languages, let us get a lot of work done incredibly quickly, suddenly one day we need to figure out a problem where the abstraction leaked, and it takes 2 weeks. And when you need to hire a programmer to do mostly VB programming, it's not good enough to hire a VB programmer, because they will get completely stuck in tar every time the VB abstraction leaks.

http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...

And yes, I know you might advocate simply waiting until college to teach this. But want to know what's harder than teaching a 17 year old pointers? Teaching 21 year old hotshot Java programmer pointers.