For me, it went like this, but I had the luxury of a full time clojure job
that gave me some space to learn:

1. Read Joy Of Clojure.  I got the philosophy and background knowledge that
informed further study out of it.  Felt like I understood the theory and
motivations, but I was missing the 'muscle memory'.  Emacs took a few weeks
to feel familiar.
2. Worked on real code with other people, found opportunities for things
like writing a macro.
3. Read core.clj, RT.java, and Compiler.java over and over again,
especially if something unexpected happened.  Investigated every problem
until I understood it fully.
4. Read and attempted to understand the implementation code and design
tradeoffs of every non-obvious library I tried to use.  I found that, over
time, it felt like less work overall than trying and failing to blindly use
the library.
5. Read Joy Of Clojure again.  Noticed all the things I'd missed the first
time around. :-)


On Mon, Mar 24, 2014 at 12:22 AM, Aditya Athalye
<aditya.atha...@gmail.com>wrote:

> Marcus,
> Thanks for asking the question and instigating this discussion.
>
> A bit late into the thread, but I just want to narrate my experience so far
> as I'm a Clojure n00b (actually, I'm really a programming n00b).
>
> I found 4clojure and Clojure Koans useful, to get an initial feel
> for the language and some of the basic ideas contained therein.
> I used (and use) Halloway's Programming Clojure to understand
> the basic concepts.
>
> I also found it incredibly helpful to attend a hands-on (fantastic)
> Clojure workshop that @ghoseb conducted.
>
> I'd term this phase as picking up some of the "motor skills".
>
> I think the following minimum set of things helps become
> creatively productive with Clojure:
> - Clojure's primary data structures and sequence abstraction
> - Manipulation of collections / sequences
> - Core functions (it's sufficient to be only peripherally aware of
>   macros / protocols/multi-methods / concurrency semantics,
>   to begin with... They reveal themselves through libraries,
>   once one deep-dives into those through daily use.)
> - REPL-driven development / the inside-out flavour of FP
>   (particularly to visualize and plan intermediate data transformations
>    that will lead to the final output of the function;
>    inspecting types and classes of things, and trying to understand
>    the various errors one produces.)
>
> Beyond that IMHO only a "real" project will provide the context
> and the constraints, both of which are required to produce focus.
> Ideally this project would involve ongoing development by other people.
>
> By happy accident I happen to be writing a fair amount of Clojure for
> browser automation, with clj-webdriver, at a company where Clojure
> is the workhorse of our server-side software (@helpshift).
>
> My particular situation has the following characteristics:
> - Specific problem domain
> - Write clojure daily
> - Read clojure daily
> - Get and do peer-reviews of code by other
>   (often way way better) programmers
> - Fast feedback cycles (<= 1 day)
> - Heavy use of at least one library from the Clojure ecosystem...
>    - to have to keep cross-referencing the docs,
>    - be forced to look into library functions when you misuse them
>      (therefore read s'more code by an orders of magnitude superior
> engineer)
>     - and having to do double-takes at the fundamentals (especially when
>       abstractions leak
> http://www.joelonsoftware.com/articles/LeakyAbstractions.html)
> - Bonus: other people happen to depend on this work, so there's no easy way
>   to slack off "thinking" if something particularly nasty starts to block
> progress :-)
> - Bonus: reading application error logs to see what's happening under the
> hood
>
> Also, I'm working through Dimitri Sotnikov's "Web Development with
> Clojure",
> and I have the Clojure cookbook handy to look through for ideas.
> I tend to use Clojuredocs's quick reference several times a day
> (http://clojuredocs.org/quickref/Clojure%20Core), and often read core
> docs
> and library docs to understand what I just did that so magically worked! :)
>
> Eric Normand's video series also looks very interesting (
> http://www.purelyfunctional.tv/).
>
> Beyond that, I found working through SICP has given (is giving) me the
> tools
> to reason better about Clojure's data structures and about functional
> concepts
> in general (hat tip @ghoseb, again).
>
> As I try to pick up more working proficiency, I intend to explore
> different approaches to writing web apps with Clojure/Clojurescript
> (through small projects using ring/compojure, Hoplon, Pedestal,
> Caribou, Om... I may actually try to write and rewrite the same small
> project,
> with at least two or three of these libraries.)
>
> Afterthought:
> Initially I struggled with the notion of "real" projects. Now, I prefer to
> interpret it
> as whatever makes the work real for oneself, as opposed to being
> predicated
> on utility to lots of people, or on novelty (I'd argue it's actually
> better to
> solve problems other people have solved many times over).
>
> My 0.0002 BTC.
> Thanks for reading!
> - Aditya.
>
>
>
>
> On Sunday, March 23, 2014 9:15:04 PM UTC+5:30, Marcus Blankenship wrote:
>
>> Thanks to all who responded!
>>
>>
>> On Mar 21, 2014, at 7:17 AM, Lee Spector <lspe...@hampshire.edu> wrote:
>>
>> >
>> > A little thing but I use it in when teaching Clojure to newbies and
>> maybe it'll be useful for others:
>> >
>> > https://github.com/lspector/clojinc/blob/master/src/clojinc/core.clj
>> >
>> > -Lee
>> >
>> > --
>> > You received this message because you are subscribed to the Google
>> > Groups "Clojure" group.
>> > To post to this group, send email to clo...@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+u...@googlegroups.com
>> > For more options, visit this group at
>> > http://groups.google.com/group/clojure?hl=en
>> > ---
>> > You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> > To unsubscribe from this group and stop receiving emails from it, send
>> an email to clojure+u...@googlegroups.com.
>> > For more options, visit https://groups.google.com/d/optout.
>>
>> Best,
>> Marcus
>>
>> Marcus Blankenship
>> \\\ Problem Solver, Linear Thinker
>> \\\ 541.805.2736 \ @justzeros \ skype:marcuscreo
>>
>>  --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to