Hacker News new | past | comments | ask | show | jobs | submit login
In praise of impractical programming (niemanlab.org)
69 points by falava on June 3, 2012 | hide | past | favorite | 12 comments



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.


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


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.


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...

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.


Hal Abelson talks about those examples in this interview: http://www.codequarterly.com/2011/hal-abelson/ . The students who were taking 6.001 had just had a course in calculus the previous semester, so the math in the examples would be fresh in their minds.


On the other hand, in my experience, SICP turns out to be a pretty cool way for a "practical" programmer to learn about math.


I'm a programmer, and SICP is by far the most interesting programming book I have ever read. I have become a better programmer over time, but I don't know if reading the book made me a better programmer, since time is a confounding variable.


sshhhh! don't get in the way of gushing uninformed enthusiasm.


If you're saying the article is uninformed, I think that's unfair. It's clear that the author actually went through the book.

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.


As for the CL executable: this[1] answer on SO contains pointers to the executable making mechanisms for the most common open source CL implementations.

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/


I really like this idea. I'd be interested in helping out with this or something like it.


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: