In praise of impractical programming
niemanlab.org
niemanlab.org
There is nothing wrong with programming-as-a-craft, just as there is nothing wrong with learning to do car repair or HVAC installation, but MIT is not a trade school and SICP is not a how-to manual.
In any case, I'm not sure how far we'll get by substituting his implicit definition of "practical" - allows you to start getting stuff done quickly - with another: "teaches you to build abstractions to manage complexity." What I mean is, a debate over the meaning of the word "practical" doesn't seem like much fun.
I think it's clear that the author thinks SICP, Lisp, and other languages considered "impractical" are in fact valuable to those who want to advance as programmers.
What's most interesting to me, however, is that he's encouraging people to really dig into the magic of programming. And here I think we have a problem.
Since November I've been learning Common Lisp and as of a couple days ago I've been learning Clojure. It's awesome! It's magical. But it's such a pain in the ass to get everything set up! It took me a few hours to finally get Clojure working with swank in emacs without having to use Leiningen. I still don't know how to build a common lisp executable and have no idea where to work.
I feel like those wish want to just learn a language in itself are pretty well served. However, there's a huge gap between the readily-available information we have on a language itself and the information we have on how to actually use that language to build real things.
I've actually started trying to address this at http://nonbeginners.com (So far I've only made progress on the Ruby section. Github: https://github.com/flyingmachine/nonbeginners) , though really I don't know if this is the best approach. My thinking is that, by having an outline of all of the larger environmental concerns involved in using a language, it will make it easier to both find the relevant information and produce it as members of a language community become consciously aware of the kind of information that needs to be made available.
I agree completely that one of the bigger problems with Common Lisp might be that there is not much information readily available how to structure bigger projects. In general I find the projects of Edi Weitz a good read [2].
And so: I applaud your effort ... !
[1] http://stackoverflow.com/a/31332 [2] https://github.com/edicl/
SICP in general is a damn good book, there were already quite a few attempts to "improve" it, but I am not convinced any of those have really superseded it. There is for example "Concepts, Techniques and Models of Computer Programming", which is basically what you wish, SICP without digging into any particular domain:
http://www.amazon.com/Concepts-Techniques-Models-Computer-Pr...
There are certainly lots of valuable programming concepts explained in this book, and I would certainly recommend it to anyone with a deep interest in programming languages, but by using "dummy" examples, I think it simply became much more boring and less intellectually stimulating.
One should always learn other programming languages, especially ones with a different paradigm/approach. You can be certain that you are a Blub programmer: there is always (or will be) something better than what you currently advocate and cling to, especially better given the task at hand (there is no universal silver bullet, but there are specialized tools).
The book mentioned, "Seven Languages in Seven Weeks" is an excellent place to start and I highly recommend it.