title: What is the exhaustive list of guidelines/practices/rules to fully conform with functional paradigm?
body: <p>I've started playing around with Kotlin, but I sense my own limitation in the way I program. My problem is that I still think Java therefore the style is still imperative, my question is to all functional programming zealots , which I believe would be very useful to all people who at the very beginning stage and also need to 'brake' their brain to start building it again; to leave comfort zone and start thinking pseudo and not in "whatever is your first language". I believe it is possible for highly experienced polyglot developers to chew the concepts down to <strong>plain advices of what makes your program being written in entirely functional way and what violates the paradigm</strong>. I don't know all the quirks but please don't hesitate to include universally accepted terms which might be unknown to me(I can always lookup). At this point I need this set of rules to make myself suffer at first and not break them but then I know I will feel it, analyze guidelines and understand how they are worse/better which of course is my own homework.</p>
  
  <p>So example of these guidelines, would be something like:</p>
  
  <ul>
  <li>Never change state, this can be avoided by using x, y, z</li>
  <li>Operate using higher order functions only (I maybe wrong, just example)</li>
  </ul>
  
  <p>I hope the answer will give me long term reference to put myself in extreme conditions where I stop escaping to OOP whenever I feel uncomfortable. And now when I look at Kotlin I understand how I've should've been thinking about problems, it is about intention not about the structure imposed by one language or another. Intention can always be converted to a language of your choice and backed up by design patterns applicable to the language, but to find that middle ground I need to jail myself first from the comfort zone.</p>