I've also given this subject some thought when I was deciding on what language I should use to teach first time programmers. In the end, I ultimately decided against teaching Clojure as someone's first language, but would like to transition into Clojure as soon as possible.
---These were my reasons for wanting to teach Clojure:--- -Simple syntax. Students should learn that learning programming is not learning syntax. I don't want their concepts to be muddled because of tedious syntax. -Functional programming. Students should learn how to write programs in as organized and in as general a fashion as possible. Functional programming also emphasizes recursion, which is a method of thinking that should be taught early I think. -No objects. In my opinion, OOP is taught way too early nowadays, which results in students writing monolithic inheritance structures. ---These were my reasons finally against teaching Clojure as a first language.--- -Immutability. I think for a beginner, mutability is easier to understand. Immutable data structures are quite a bit more complicated, but most importantly, their advantages are not seen by someone who has never programmed before. For this reason, Clojure's STM is unnecessarily confusing for beginners. Imagine trying to explain why you need the dosync command when trying to set a ref. -No Syntax. As good as lisp syntax is, it's not what the rest of the world uses. Algorithms are almost always explained using C, or Java, or some other C-like pseudocode. Beginner's need to be able to read these algorithms. -Less Resources. As great as the Clojure community is, it's still easier to look and ask for help with a Java program than it is with a Clojure program. And this is important, because beginners will need A LOT of help and resources. -Java interop. One of Clojure's greatest strengths is its seamless integration with Java. But I found that you require a decent knowledge of Java first to understand how to use it. For example, (Math/ sqrt ...) and (.add object ..) why do these functions look different from normal Clojure functions? What's the difference between the two? What does the (new) command do? So I found that since you really need to learn Java anyway (to some degree) to use Clojure, you might as well learn Java first. Just my thoughts -Patrick --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en -~----------~----~----~----~------~----~------~--~---