Hacker News new | ask | show | jobs
by mduerksen 5591 days ago
The author seems to think that Clojure has some conceptional complexity to it that is easier to overcome by doing a intermediate step with Racket. But in which way is Racket or any other Lisp an intermediate step?

I had no Lisp experience whatsoever before I started with Clojure, and the only real difficulties I experienced were (in descending order):

a) translating my imperative-style thinking into functional style - this would happen to me in Racket as well.

b) macros - but you don't need to grasp macros as a beginner, that's a topic by itself anymay.

(and NO, the bracket syntax was no problem at all)

YMMV if you have an other background. It is true: The more programming languages you already know, the easier it will be to learn a new one (iff it doesn't conceptionally diverge too much). But if you don't have that background, why not learn the desired language right away?

3 comments

My experience is very limited. I've not yet worked through all of Chapter 3 of SICP, and I've not had the opportunity to hack any real code in any lisp dialect since I implemented LispKit one weeked in 1989. However ...

I think there is merit in the simplicity, clarity and purity of Scheme in helping put someone "in the right place" for grokking the real value and real power of Clojure. On the very few occasions I've written in Clojure I've known I've not been really "getting it" and that there's more, but I've felt (pause) overwhelmed is one word ... by the completeness of Clojure. It's a proper language for proper work.

I think I've gained a lot from going back to Scheme's purity and elegance.

It's a bit like "lies to children." We know that Newtonian mechanics is wrong, but we still teach that first because it's easier to grasp, easier to do the sums, and more directly in line with our own experience. But if taught properly (and that's another story altogether) it lays the foundation for being able to do the sums and do the work "properly" in Relativity.

I think Scheme can help to create the functional mindset in an elegant way, before having to worry about real world nastiness.

YMWV, because everyone is different and comes with different skills, deficiencies and baggage.

I definitely disagree that Clojure introduces "real world nastiness" which would prevent a beginner from learning it "the clean way". Clojures data structures are very elegant and easy to grasp (e.g. you don't have to think about pointers or define equal operators, it's all there already). And you can define functions just as clean an "pure" as in Scheme.

I do agree that Clojure is very comprehensive, and can be overwhelming for a beginner. But you could buy a book, which will use only a subset of Clojure at the beginning. And when you get to the point where you can use the basic data structures and map, filter, reduce them, this will get you very far.

To me, the "real world nastiness" is the Java cruft surrounding it. You don't have to deal with it except to get a nice programming environment running. At this point the options are much more complicated and uglier than DrScheme.
That's not what the author seems to mean though: Clojure's exceedingly cool, but to understand it you need to speak lisp

But I agree, an uncomplicated und "Java-free" IDE would be a great gain for a low-threshold start with Clojure. Clojurebox is a beginning, but it in turn burdens a starter with Emacs.

> The author seems to think that Clojure has some conceptional complexity to it that is easier to overcome by doing a intermediate step with Racket.

The sense I got is that the author believes SICP is such an excellent teaching manual that it's easier to learn Clojure-via-Scheme using SICP than it is to learn Clojure via itself using any other resource.

He's recommending to read/watch SICP and do the examples, which are in Scheme. I think it's good advice to have a Scheme REPL to follow along so that you don't have to worry about the additional overhead of translating to Clojure.
This would actually be an interesting way to learn Clojure: Follow SICP, do the examples in Scheme/Racket and immediately after that the same example in Clojure (the differences should not be abysmal).

At some point though, as Scheme and Clojure diverge, this method would start to become less useful. But at that point, I would argue, you already know enough to take off in Clojure.