I am kind of old school. To me these things come through practice... Which I understand maybe of little help to you in the immediate future :)
When I was young we had many books that had little to do with the ones mostly available today. (Learn xxx in nnn days) Looks to me that this is the missing piece in the puzzle. Not sure that this kind of book would be popular these days. Luc P. > That makes me think that maybe there's a need for more books about Clojure. > There are many introductory books but nothing more advanced such as best > practices, patterns, etc... > That's maybe a problem for someone like me who wants to "do things right" > from the start. Should I read books about Common LISP and functional > programming in general? > > On Friday, December 27, 2013 5:55:57 PM UTC+1, Luc wrote: > > > > 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 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. > > > > > -- > > Softaddicts<lprefo...@softaddicts.ca <javascript:>> 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. > -- Luc Prefontaine<lprefonta...@softaddicts.ca> 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.