Jason (jcreed) wrote,

I had this dream that this book existed, then I woke up and it didn't. I felt I had to fix the situation.

Watched "I ♥ Huckabees" with my sisters. A pretty fucked up movie, but I liked it.

Language Log is talking today about the kind of things I expect Lambda the Ultimate to. I tend to agree that it's probably more important to focus on particular techniques and ideas rather than care which particular language is used to teach them. However, there's something different between Latin, Greek, and English on the one hand, and ML, LISP, and Java on the other; at least something currently accepted to be different. Consensus is that none of Latin, Greek, or English (or Swiss French, Swahili, Mandarin, or Yiddish) is really better, or significantly more complicated, or sophisticated, or civilized, than any of the others. They're all phenomenally complicated systems that arise out of roughly the same needs and achieve roughly the same level of sophistication in different ways. In contrast, I think most programming language designers think --- almost purely by virtue of uttering the word "design" in referring to their own job --- that it's the farthest thing from the truth to think that all programming languages are (even roughly) created equal. It's their (our?) job to figure out ever better systems for expressing and capturing those "things that really matter", what Joel refers to metonymically as "pointers and recursion".

You can't hardly teach about case inflection without referring to a language that has it, and certainly you'd pick Latin over English if you want some meaty examples. So too you can teach about the basic notion of indirection using the "pointers" that Java offers, but that's a mere shadow of the issues of concrete heap and stack layout and allocation that the word "pointer" entails in the universe of C hacking. Also "recursion" by itself is certainly a fine concept to teach, but what makes intro classes in functional programming so infamously hard (I claim) is the introduction of higher-order programming: treating functions as data to be created, passed, and returned by functions themselves. This is also something that Java, by virtue of those features it lacks and possesses, makes clumsy and confusing.

So, just like you have to sometime talk about actual languages in a linguistics class, one has to face the fact that you more or less have to teach programming concepts in some actual programming language. I have a lot of sympathy for the idea that Java is a bad language to teach certain concepts in, not because it is "too simple", or "too easy", but because it is just flat-out bad for expressing those concepts fully and cleanly.
Tags: books, movies, programming

  • Post a new comment


    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded