It took us some time to structure the code at the time and now
with protocols we went under a other restructuring a year ago. 

I agree this part can be hard (structuring the code) but at the time we started 
protocols were not yet there hence some of the restructuring.
Best practices also evolved for a couple of years.
It's much more stable these days.

When I say write some code, well you need to choose a domain
aside from simple things like "hello world". Which makes it harder
to write some code :) but forces you to question yourself about
how to do this right the first time.


This is the list of my favorite  items that I keep an eye on:

a) abstractions, choose them according to your business domain, do not
    try to re-invent the wheel or create alien terminology.
    This is a starting point to get your name space structure right.

b) In your APIs try to stay generic by not assuming implementation details.
    This step can be hard to achieve. Keep doors opened. 

c) You may want to redefine the implementations of
    your abstractions or provide different flavors or some flexibility in your 
APIs.
    Protocols/multimethods become handy at some point here.
    This is the part that may feel a bit like OO but this is the one you have to
    think last. (remember point a and b)

d) Do not hesitate to refactor. There's less code than in most other languages
    that get some support for refactoring from their IDE so you should not
    wait until it becomes a mess. If a name space is not rightly named anymore,
    chane it. If more separation of concerns is required, add/change name
    spaces accordingly and reorg the code.

e) A good indicator of the stability of your APIs is how much your test code
    gets messed up when you do change something. It could be
    related to implementation details leaking out, bad choice in name space
    design, ....

    I am not an advocate of TDD but at some point when the code of a
    name space is stable enough, a few test cases can be used as 
    health signs. 

f) Search for existing librairies, there are enough of them out there,
   either Java libs with/wo Clojure wrappers or Clojure centric ones
   to speed you up not having to rewrite the universe.

g) Read the code of the libs you are pulling in as you go along.
    This will probably light a bulb in your brain about tricks you should
    apply to your code.

The above should sound familiar :) It's not that different in Clojure to me
than in many other languages.

If you have some specific concerns, send them to me off line.
I may share some code privately to answer some of your questions.
Sorry for the other folks on this thread but there are copyright issues here :)

Luc P.

> I've seen Clojure in action and I know it's extremely concise and 
> expressive. What I wanted to know is how it copes with complexity when you 
> develop complex systems. You can't get an idea of that just by writing some 
> code and getting a feeling about the language, IMHO. When I studied OOP at 
> University my professors taught me that OOP was extremely successful in 
> reducing the complexity of big systems. I was given many examples of that 
> in the many courses of software engineering I took. FP was relegated to 
> some theoretical courses about paradigms. With such a background it's not 
> easy to accept some of the things the Clojure community claim. The fact 
> that I'm here asking questions should mean that I'm more open minded than 
> most :) But please understand where I'm coming from.
> 
> On Friday, December 27, 2013 3:50:23 PM UTC+1, Luc wrote:
> >
> > I would add that you *need* to 
> > write some code to get a feeling 
> > about a new language. 
> >
> > Feature comparisons may help you up 
> > to a certain degree. However deciding about how efficient 
> > you may become using a new language requires you to dive at 
> > least a bit into it. Not all brains are  wired the same. 
> >
> > Luc P. 
> >
> > > Then we have more in common 
> > > than you may think :) 
> > > 
> > > I learned Ruby first, went through 
> > > Scala which appeared in the same 
> > > time frame, 
> > > all this to pick up the language of 
> > > choice to replace Java and Ruby 
> > > which we used to prototype our 
> > > product. 
> > > 
> > > All this took around 9 months 
> > > including the time to get the prototype 
> > > working. 
> > > 
> > > Choose carefully... :) 
> > > 
> > > Luc P. 
> > > 
> > > > The point is that Clojure is not the only modern language out there. I 
> > > > can't possibly learn them all in depth just to decide which language 
> > to use 
> > > > for my production code. That would be time-inefficient because my goal 
> > in 
> > > > not to learn languages, but to pick up a new language suitable for my 
> > needs. 
> > > > 
> > > > On Friday, December 27, 2013 3:04:18 AM UTC+1, Luc wrote: 
> > > > > 
> > > > > This depends strictly on your learning speed which I will 
> > > > > not comment here :) 
> > > > > 
> > > > > It took me three months full time to start to feel at ease with 
> > > > > Clojure writing production code and I was around 45 years 
> > > > > old at the time. 
> > > > > 
> > > > > Learning is never inefficient... when you want to learn. 
> > > > > 
> > > > > Luc P 
> > > > > 
> > > > > 
> > > > > > On Thursday, December 26, 2013 11:04:00 PM UTC+1, Luc wrote: 
> > > > > > > 
> > > > > > > Ok I'll drop the subject. Still cannot understand why people 
> > cannot 
> > > > > > > try something new w/o sticking to the stuff they know already 
> > until 
> > > > > they 
> > > > > > > are 
> > > > > > > totally immersed in the new thing. And by that I mean use the 
> > new 
> > > > > thing as 
> > > > > > > it was intended. 
> > > > > > > 
> > > > > > > Then you can generate useful conclusions and get some benefits 
> > from 
> > > > > > > this learning process. 
> > > > > > > 
> > > > > > 
> > > > > > Learning every single language just to find the right one is not 
> > very 
> > > > > > time-efficient. 
> > > > > > 
> > > > > > -- 
> > > > > > -- 
> > > > > > 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/groups/opt_out. 
> > > > > > 
> > > > > -- 
> > > > > Luc Prefontaine<lprefo...@softaddicts.ca <javascript:>> sent by 
> > ibisMail! 
> > > > > 
> > > > 
> > > > -- 
> > > > -- 
> > > > 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/groups/opt_out. 
> > > > 
> > > -- 
> > > Luc Prefontaine<lprefo...@softaddicts.ca <javascript:>> sent by 
> > ibisMail! 
> > > 
> > > -- 
> > > -- 
> > > 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/groups/opt_out. 
> > > 
> > -- 
> > Luc Prefontaine<lprefo...@softaddicts.ca <javascript:>> sent by ibisMail! 
> >
> 
> -- 
> -- 
> 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/groups/opt_out.
> 
--
Softaddicts<lprefonta...@softaddicts.ca> sent by ibisMail from my ipad!

-- 
-- 
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/groups/opt_out.

Reply via email to