title: Advice on Learning "How to Think Functional"?
body: <p>As a newbie in functional languages (I started touching Erlang a couple of weeks ago -- the first functional language I could get my hands on).</p>
  
  <p>I started to writing some small algorithms (such as <code>left_rotate_list</code>, <code>bubble_sort,</code> <code>merge_sort</code> etc.). I found myself often getting lost in decisions such as "should I use a helper List for intermediate result storage?" and "should I create a helper function to do this?"</p>
  
  <p>After a while, I found that functional programming (bear with me if what I am talking does not make sense at all) encourages a "top down" design: i.e., when I do merge_sort, you first write down all the merge sort steps, and name them as individual helper functions; and then you implement those helper functions one by one (and if you need to further dividing those helper functions, do it in the same approach).</p>
  
  <p>This seems to contradict OO design a little, in which you can start from the bottom to build the basic data structure, and then assemble the data structure and algorithms into what you want.</p>
  
  <p>Thanks for comments. Yes, I want to get advice about how to "think in functional language" (just like "thinking in Java", "thinking in C++").</p>