
* Computer Science, an interdisciplinary perspective by Robert Sedgewick * Code by Charles Petzold * Good Math by Mark C. Chu-Carroll
Supposedly all of these books assume (or at least allow for) no background in programming, but I think the reality is that taking SICP or even HtDP into the intro class at a non-elite university or a community college would be a complete non-starter and/or abject failure.
What I'm trying to say is that there is a place for both of these approaches: A deep look into computer science, and the nuts and bolts of basic "get it done" programming.
Should both of these things happen in a single class, or series of classes? I think the answer is yes. But how to do that and not leave non-elite students back on the road is another matter.
I believe that the HtDP authors think that the "domain-specific knowledge" required of SICP was a barrier.
And I also understand how advanced CS students think that a class focused on how to manipulate strings, use loops, deal with variables of various types, and work with basic logic in the context of a specific computer language is NOT computer science.
But in my view, most students -- and all average students -- need to crawl quite a way, then walk, before they can run.
Even Sedgewick's Computer Science, which focuses on Java and has a wealth of great questions/assignments all along the way, could really be a barrier to students who aren't steeped in math and science. I learned some math while going through the book, but I didn't learn so much programming. Liang's approach might be too basic for someone who has already done years and years of programming but is way more approachable for those who have not.
My guess is that many professors tried SICP and had a very poor rate of success. I fully support a selective class that says, "this is very hard, but you will learn a lot and look at the world in a different way, and if you really want to understand computer science, this is the class for you."
But there also needs to be more of a gateway class for future programmers (not necessarily graduate-school-bound CS majors) that eases them into the world of writing code. Offering the basics and sneaking in some CS seems better than doing it the other way around.
In a way, it's like the difference between carpentry and architecture. You can teach people who want to build houses how to design them, but at some point they're going to have to get out a saw, hammer and nails and make something happen.
I have a degree in Computer Science, but my weak spot is without a shadow of doubt Data Structures and Algorithms.
I'd consider myself a good developer, but I've been interested in programming problem exercises for a while now, and I'd love to give myself the grounding to be able to jump onto a site like TopCoder and be able to implement these problems without significant research and time. Within the year, I'm hoping to be finish this book and read through CSLR, and (finally) put this weak spot to rest.
