
In praise of impractical programming - falava
http://www.niemanlab.org/2011/11/in-praise-of-impractical-programming/
======
mtraven
There is a difference between learning a craft and learning something that is
intellectually deep, profound, and significant. The underlying theory behind
SICP is that computing is an important and fundamental way of thinking,
comprable to mathematics or physics, and should be taught as such. From this
standpoint, programs are embodiments of ideas, and the fact that you can use
them to build websites or robots is almost incidental.

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.

------
antirez
IMHO SICP is a pretty practical book, since it teaches, regardless of the
programming language, how to build abstractions in order to control
complexity.

~~~
sanxiyn
Maybe, maybe not, but SICP certainly is an idiosyncratic book. Its choice of
examples, like using complex number, cartesian coordinate, polar coordinate to
illustrate interface/implementation distinction, seems designed to interest
MIT undergraduates, not average programming beginners. I believe the same
content can be delivered in more appropriate examples.

~~~
stiff
SICP is not really a book for programming beginners, there are plenty of other
books for that, like "How to Design Programs". I detest the idea of using
"more appropriate" examples, to me illustrating deep concepts from interesting
fields like electronics and mathematics via computer programs was the gist of
the book. Also, all the ideas used in the programs are very high-level,
explained in the text, and you don't have to have any in-depth knowledge from
any field outside of CS, you just have to have some basic maturity with
respect to dealing with abstract concepts. I know because I for example solved
all the exercises related to mathematics (differentiation, power series etc.)
in SICP before I actually learnt any calculus, which I later did largely being
inspired by SICP. Anyone aspiring to become a good programmer has to be able
to learn basics of a new domain quickly, just knowing how to program is
useless in itself. Besides, the more interesting the domain, the more
interesting the programs, I think SICP gets this as right as possible.

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...](http://www.amazon.com/Concepts-Techniques-Models-Computer-
Programming/dp/0262220695/ref=sr_1_1?s=books&ie=UTF8&qid=1338750648&sr=1-1)

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.

------
jwr
See also "Beating the Averages" by Paul Graham and The Blub Paradox described
in that essay (<http://www.paulgraham.com/avg.html>).

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.

