<story><title>Clojure&apos;s n00b attraction problem</title><url>http://gregslepak.posterous.com/clojures-n00b-attraction-problem</url></story><parent_chain><item><author>derefr</author><text>Now this is exactly the sort of thing we should be taking issue with (from the comments):&lt;p&gt;&amp;#62; A true noob should probably install java, download clojure and clojure-contrib, run the repl, and stay there for couple 2-3 weeks. No IDE, no web app dev, just functional and concurrent programming with clojure in a REPL. They&apos;ll be much better off in the long run because they&apos;ll either give up (and save time) or learn something truly outside their comfort zone (and understand the benefit of getting setup for real development).&lt;p&gt;When teaching someone a programming language, your first goal should always be to get them to the point where they&apos;ve made something real in a domain they understand. Then, they can bootstrap that domain knowledge, and its application within the new language, and use it to &quot;grow into&quot; the rest of the language.&lt;p&gt;The &lt;i&gt;best&lt;/i&gt; thing for Clojure would be something that lets you write web-apps (or games, or visualizations like Processing...) in it two minutes after clicking &quot;Download&quot;—because those users would be able to say they&apos;ve &lt;i&gt;done&lt;/i&gt; something in Clojure, be able to say they&apos;re &lt;i&gt;sure&lt;/i&gt; of their knowledge (because if they weren&apos;t, the program wouldn&apos;t have worked, would it?) and be able to proceed to learn more with confidence. The &lt;i&gt;worst&lt;/i&gt; thing would be to download Clojure and be stuck at a REPL invoking (defproto) to overload String methods with no goal in sight—because that kind of knowledge doesn&apos;t &lt;i&gt;stick&lt;/i&gt;, and won&apos;t get you anywhere.</text></item></parent_chain><comment><author>tetha</author><text>I totally agree with this. Forcing users to stay in the REPL, poking simple toy examples is just boring and useless.&lt;p&gt;Just telling, a lot of people got into python, because they wanted to solve a certain problem (I know of an RSS scraper and a state machine framework prototype), and these people just started with a book about python and NO knowledge and after around 3 days, they knew a large amount of python and were sold, because the problem was solved and the language &apos;felt very good&apos;.&lt;p&gt;I think generally, programming language designers should stop assuming that their language is novel, or different or whatever and people will be clueless learning about the language.&lt;p&gt;If you know like Java, C#, Python or Ruby, NO object oriented language will present you with really large surprises (until you meet Javascript with prototypes, and things turn around a bit and common lisp with generic methods and things warp a bit, but still, the basic concepts behind the language are nothing surprisingly new, I still have my objects which receive objects and do things depending on the message receveid).&lt;p&gt;If you know something along ML, Haskell or some other functional language, it will be really, really hard to surprise you with a functional language. Cool, oCaml has references? Cool, Haskell has monads? That is true, those things might be a bit different, but the basic concepts of immutability, functions and recursion is all the same, no matter what happens.&lt;p&gt;So, tl;dr? You language is not novel, your language is not new, I have used a language which is similar to your language, I will just be bored if you throw me into Programming 101, because your language is new and I will probably just walk away.</text></comment>
<story><title>Clojure&apos;s n00b attraction problem</title><url>http://gregslepak.posterous.com/clojures-n00b-attraction-problem</url></story><parent_chain><item><author>derefr</author><text>Now this is exactly the sort of thing we should be taking issue with (from the comments):&lt;p&gt;&amp;#62; A true noob should probably install java, download clojure and clojure-contrib, run the repl, and stay there for couple 2-3 weeks. No IDE, no web app dev, just functional and concurrent programming with clojure in a REPL. They&apos;ll be much better off in the long run because they&apos;ll either give up (and save time) or learn something truly outside their comfort zone (and understand the benefit of getting setup for real development).&lt;p&gt;When teaching someone a programming language, your first goal should always be to get them to the point where they&apos;ve made something real in a domain they understand. Then, they can bootstrap that domain knowledge, and its application within the new language, and use it to &quot;grow into&quot; the rest of the language.&lt;p&gt;The &lt;i&gt;best&lt;/i&gt; thing for Clojure would be something that lets you write web-apps (or games, or visualizations like Processing...) in it two minutes after clicking &quot;Download&quot;—because those users would be able to say they&apos;ve &lt;i&gt;done&lt;/i&gt; something in Clojure, be able to say they&apos;re &lt;i&gt;sure&lt;/i&gt; of their knowledge (because if they weren&apos;t, the program wouldn&apos;t have worked, would it?) and be able to proceed to learn more with confidence. The &lt;i&gt;worst&lt;/i&gt; thing would be to download Clojure and be stuck at a REPL invoking (defproto) to overload String methods with no goal in sight—because that kind of knowledge doesn&apos;t &lt;i&gt;stick&lt;/i&gt;, and won&apos;t get you anywhere.</text></item></parent_chain><comment><author>Confusion</author><text>This seems like an obvious and easily attainable goal, but in fact, it isn&apos;t. The article suggests Python and Ruby provide a better n00b experience and that is far from true. For instance, Ruby becomes a nightmare as soon as you start mixing your own gems with gems installed by the packaging system. That situation is hard to avoid, as distros usually only support outdated Rails gems and the n00b  that thinks &apos;let me just grab the latest stable Rails version from github&apos; is in for some nasty surprises concerning incompatible combinations of gems. We solved this by moving to Enterprise Ruby and keeping &lt;i&gt;everything&lt;/i&gt; local and selfcontained, but it is definitely not very n00b-friendly either. With Python I&apos;ve had similar experiences: when I was in need of a decent XPath library (mind you, this was over 4 years ago), the best one I could find (4Suite) needed to be installed manually, with all the usual problems of missing -dev libs, install paths and whatnot.&lt;p&gt;A summary of the problem is: the configurations people run are so diverse that it is hard to provide installation instructions that work for all, or even most, of them. As soon as someone wants something not covered by the simplest of tutorials, many of them will run into issues.&lt;p&gt;I think the only solution is documentation. The only thing that works is catalogueing all known problems people have encountered, so that others can easily find solutions to those problems. The largest problem of this solution is that n00bs need to understand their systems and they often don&apos;t.</text></comment>