There are many buzzwords in the programming profession. These terms are bandied about with great regularity, and mean almost nothing. Fundamentally, we only have one kind of computer with two variations: the Intel and ARM instruction sets which drive 99.9% of all computers used today. Everything on top of these two hardware platforms is software, and since the hardware's only commonly used instructions are arithmetic, copy, load/store, compare, branch and call/return, the most powerful instruction is the function call and return, and every language from Assembler onward has striven to wring as much utility out of the call/return instruction. Functional programming is where you try to give functions more weight, as opposed to the move instruction which was COBOL's stock in trade. So one cannot be against functions, it is one of the only power tools we have. What i am against is waving these banners around, like OOP, Functional Programming, Top Down Design, etc., when what we really want is reliable software that is easy to understand. We are evolving towards better notations, but unless you change the hardware (and adding more cores does very little to help) you are pretending these terms actually mean something.