Strange list. Some great stuff on there, but if I were going to attempt to substitute for an undergrad CS degree, I'd definitely have SICP on a list ahead of APL, for example.
Of course, the whole topic is quite silly; if you really wanted to substitute for a CS degree, the easiest way to do it would be to examine (for example) the MIT course catalog, put together the appropriate course plan, and then order the textbooks used by those courses. And, with the video lectures and lecture notes showing up on OCW, you would actually be approximating (in a loose sense) the experience, provided one actually does the coursework and exams.
... and here are my 10 Lego sets that will substitute an Engineering Degree!
Degrees are not just about the literal content. They are three/four/five/ years of intense experience in a play pen where highly skilled people correct your every move and thoughts guiding you toward a greater understanding.
I agree with your sentiment, however I note that the element of "intense experience in a play pen where highly skilled people correct your every move and thoughts guiding you toward a greater understanding" is very, very institution, department, and professor-dependent.
In my experience, it's more peer-dependent. In practice, I barely interact professors, TAs, or "the department". All of my [school] learning has been through grinding through psets, projects, or intellectual discussions with friends.
Fair enough. But I think we're in violent agreement on this: A degree problem can be a lot more than what's between the covers of the books, but that is not always the case.
Nah come on, in the years it takes to get a CS degree, hopefully you'll touch on more subjects than these. You'll also do several projects.
Also Godel, Escher, Bach is really more a popular science book, isn't it? Enjoyable read that it was (when I was a teenager), I think it is actually more confusing than actually helpful in understanding the underlying concepts.
They're missing discrete math, probability, linear algebra, networks, security, distributed systems, user interface design, interacting with other computer scientists, and the labor of intensive problem sets and projects. And, oh yeah, any practical experience building anything whatsoever.
And not to mention shared-memory parallelism. Multicore anyone? Ever heard of it?
Going the 10-books-will-do-route will also make sure that you won't get exposed to specialized fields such as embedded and real-time systems, machine learning, computational geometry, bio informatics, etc.
A degree is also about knowing that certain fields exist; you don't necessarily need to have studied everything. You can read up on them when you need specialized knowledge, but if you've never heard of some obscure field because your "ten books" didn't mention it, then you are screwed.
At a good university you will be exposed to a much wider variety of topics than any (reasonably sized) set of books will do.
That title makes a lofty claim and does not really deliver. The books they chose are not flawed, but in terms of ordering them and limiting them to 10, some is left to be desired. Here are some I would add:
Design Patterns: Elements of Reusable Object-Oriented Software
Of course, the whole topic is quite silly; if you really wanted to substitute for a CS degree, the easiest way to do it would be to examine (for example) the MIT course catalog, put together the appropriate course plan, and then order the textbooks used by those courses. And, with the video lectures and lecture notes showing up on OCW, you would actually be approximating (in a loose sense) the experience, provided one actually does the coursework and exams.