4 ms·
That's a starting point, sure, but it's not necessarily a great one. Books are books. They take time to find, money to purchase, time to be delivered, and then
by drostie 14y ago
That's a starting point, sure, but it's not necessarily a great one. Books are books. They take time to find, money to purchase, time to be delivered, and then they take time to read and pursue.
When I started learning Django, the key thing which everyone pointed me to was a simple screencasted tutorial where a man with an Indian accent started showing me how to write a wiki in Django. It wasn't pretty but it was a way to bootstrap myself enough into the Django mindset that I could start learning how to do database-driven web design. Then I could sit down and read the docs and they mostly made sense. Before that, Django was impenetrable; just seeing "oh there's a data model which is embodied within the databases, you have to run 'syncdb' first to get this working," etc. was a harrowing way to do 'Hello, World!'.
I have a little advantage with Clojure because it is a Lisp and I've done Lisps before when I followed the SICP video lectures and learned some basic Scheme. In this respect coming to Clojure is much easier for me than working with Haskell. (Although seriously, the Haskell interpreter is so much easier to use--please, someone implement libedit or another readline clone in Clojure and put it in the Clojure main distribution so that the 'up' key gives me the last line.)
But nonetheless, this is the first time I've seen a clear attempt to say, "here, let's work together to build a substantial program in Clojure." There is so much you can learn from such approaches that I think it's crucial to have some. Even this first tutorial page starts talking about how you should do some 'lein trampoline run' call rather than trying to do things with Clojure directly: that's something crucial which was never communicated to me via the Clojure web site. I now get to read up on Leiningen and what the hell that is for, as well as perhaps what the hell is in clojure.contrib that they also don't tell you about on the clojure.org "Getting Started" pages.
Seriously. This sort of thing is the difference between `django-admin.py startproject website` and creating a new text file which starts `import django`. Both are technically ways to develop a new site with Django, but the first one is the Correct Way To Do Things. (And fortunately djangoproject.com tells you to do things this way.)
You just pick up so much implicit stuff when you follow someone along as they program a very simple nontrivial application.
- mark_l_watson 14y ago+1 Good points. Lots of the discomfort in Clojure is a function of what also makes Clojure really great: fast moving, willing to break compatibility to keep making it better. Eventually the language and platform will become more stable. I am not sure, but we may be at that point now, or very soon. I must admit I lost a little bit of time this morning creating a new Noir project because of lein1 vs. lein2 issues. I am also trying to decide whether or not to go back to my really old projects and update to Clojure 1.4, refactoring of Clojure contrib, etc.
- uvtc 14y ago> please, someone implement libedit or another readline clone in Clojure and put it in the Clojure main distribution so that the 'up' key gives me the last line. This works fine for me using Leiningen 2. All the usual libreadline functionality is there, and there's tab-autocompletion too.
- frio 14y agoI think one thing that's become obvious to me over time, and was only briefly touched on at Uni, is how important the supporting ecosystem around a language is - in particular, the build tools. When I first started programming, all I'd do is grab the compiler, and run with it (javac, python, ghc, whatever). Now, however, I've become aware that I should always be using build tools - cabal, leiningen, rebar, go (has one provided with the language), maven, sbt, django-admin (kinda), etc. I think this is something that needs to be better communicated and understood. When you pick up a new language, you also pick up its tools, and the landing pages for languages need to better communicate which build-tool is "blessed".