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<javascript:>> 
> 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<javascript:> 
> > 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 <javascript:> 
> > 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 <javascript:>. 
> > 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.

Reply via email to