&gt; Everyone should learn at least one functional programming language and try to apply what they learned in other languages. But if functional programming languages want to become popular, they have to be less about puzzle solving.<p>Because FP relies on an insane amount of theory.<p>Often FP aficionados are incapable of explaining functional programming concepts to others without using FP idioms or jargon. I still don&#x27;t have the foggiest idea of what a monad or a functor is, or why the hell would I want to use currying or partial application, when my imperative code just works (that&#x27;s not entirely true, and javascript has done a great job at popularizing some concepts, like closures, partial applications or first class functions).<p>Now compare with OOP : polymorphism , inheritance and encapsulation are easy to explain : Everybody can understand that a machine can be turned on by pressing a button, no matter what machine it is(phone,computer,screen) : polymorphism. It&#x27;s easy to explain encapsulation : you don&#x27;t need to how the inner working of a microwave in order to use it. Same with inheritance.<p>I agree that one should learn at least an FP language so one is forced to deal with a specific problem a certain way, that&#x27;s good exercice. But I shouldn&#x27;t have to understand category theory in order to learn Haskell or Clojure.