Whoops, re-reading my post I realized that I simply linked to my own gist
again when talking about separating out pure from side-effecting code.  I
meant to link here:
https://github.com/philipschwarz/diamond-problem-in-clojure/blob/7efbc472632dced5e173084672ad76687e39dd1f/src/diamond_problem_in_clojure/core.clj#L68-L74

2014-12-06 22:36 GMT+09:00 David Della Costa <ddellaco...@gmail.com>:

> Hi Philip,
>
> I read your message and immediately wanted to try it myself--I intended to
> leave it at that but I realized I would be remiss if I did not give you a
> little bit of feedback based on my experience.  I should add that I was
> kind of fast and loose with my solution (that is, I didn't really read the
> instructions), but it does print out the diamond shape according to what I
> saw in the blog post examples.
>
> First of all, here's what I came up with:
>
> https://gist.github.com/ddellacosta/ba7e03951ba1bafd3ec9
>
> As you said, you weren't looking for alternative algorithms and I
> recognize that that's not the point.  But there are a few things that I
> think are good and/or common Clojure practice that I think I've
> internalized, and writing out an alternative solution helped me to see them.
>
> - I'm assuming you used a TDD process to write this (correct me if
> wrong--basing that on the articles you linked to), but I think a
> repl-driven process may be more common for working through a problem like
> this--i.e. something you can wrap your head around as a whole and solve
> iteratively.  That's not to say I and others don't use TDD in Clojure dev,
> but just that it's also quite common to do a lot of this kind of
> development in the repl.
>
> - you're grouping your side-effecting code w/the code that generates the
> diamond data structure here:
> https://gist.github.com/ddellacosta/ba7e03951ba1bafd3ec9
>
> While of course the diamond kata is a bit contrived and the point is to
> print stuff out in the end, it also looks like you are trying to be
> thoughtful about how you structure your code.  So I would suggest isolating
> your pure functions from your side-effecting code as a sort of basic
> separation, and avoid monolithic functions like the one I linked to above.
> This gives you the freedom to apply the data structure to other processes
> if need be, rather than having to refactor that code later on as soon as
> you need to do something other than printing to the final diamond data
> structure.  That is a more compositional approach that is good to follow as
> part of functional programming practice in general.  And otherwise it seems
> like you are following this approach--I think you can see this in the shape
> of your code overall.
>
> - Stylistically, I found your naming conventions to be too verbose, with
> not enough information about the actual input and output--I would prefer a
> style like I used in my solution which aims for readable conciseness, while
> documenting what is going in and coming out of my functions.  I assume
> Clojure developers reading my code will have a good understanding of the
> core data structures and functions available to manipulate them, and so I
> want to leverage that as much as possible in how I write and document my
> code.
>
> In fact, at this point I prefer using Prismatic's schema (
> https://github.com/Prismatic/schema) to document as well as provide
> further safety for my functions, and am of the opinion that Clojure's one
> glaring weakness is its approach to typing--but that's another discussion
> and I recognize this is not necessarily a widely-held opinion.
>
> More generally, I think reasonable people could disagree on naming
> conventions and so I would hesitate to say you're doing something "wrong"
> here--I would rather say: the more Clojure code you read the more you'll
> get a sense of how people tend to write.  You'll figure out what you want
> to adopt in your own style, and what Clojure devs are going to expect.
>
> - I don't want to get too deep into the algorithm itself but I think you
> would find it more natural to work line by line vs. the way you constructed
> blocks and flipped them right/left, and you'd have less code overall.  I
> will boldly claim that my solution may be closer to how other developers
> familiar with Clojure (or functional programming in general) may approach
> it--not that I'm claiming it's the best approach.  I do think it is more
> concise without sacrificing readability (which is subjective, I fully
> appreciate).
>
> - I don't know if I've ever once used a main function, and you don't see
> them in libraries, certainly.  But that is minor--there's no reason *not*
> to use it, just that I wouldn't expect to see it.
>
> I hope this is useful feedback--good luck in your journey and enjoy
> Clojure!
>
> Dave
>
>
> 2014-12-06 19:48 GMT+09:00 Philip Schwarz <
> philip.johann.schw...@googlemail.com>:
>
>> Hello,
>>
>> can you please review my first solution to the diamond kata [1] and tear
>> it to bits: let me know all the ways in which YOU would improve the code.
>>
>> I am not so interested in a better algorithm for solving the kata. I am
>> learning Clojure and what I want to know is what YOU would do to make the
>> code more readable/understandable/maintainable, or just to make it follow
>> Clojure idioms and/or conventions that YOU find effective, or to follow a
>> coding style that YOU find more effective.
>>
>> Thanks,
>>
>> Philip
>>
>> [1] https://github.com/philipschwarz/diamond-problem-in-clojure
>>
>> --
>> 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