As a Java dev that 99% of the time writes imperative code I'm probably not the best guy to defend FP but in my limited understanding it's a higher abstraction/cognitive level. So not exactly coke vs pepsi. In ideal world code is an annoying inconvenience. Why? Because in ideal world you model your problem via set of formal requirements, you execute them, you get your answer. We know WHAT and we don't know or care HOW it's done. Requirements --> answer ("Ok Google, make me another Facebook or somethin'!") Basically, a math function (if we feel courageous, we can extend the concept as far as to wavefunction of the Universe
simple smile). But we're not there yet, so we have to bear the burden of writing code as an intermediate step: requirements -> code -> answer. Code brings complexity. And complexity is "the biggest problem of the development and maintenance of large-scale software systems"[*]. We want to reduce it. What contributes to complexity? State and control flow (bread and butter of imperative programming). Whatever helps to avoid/minimize these two factors — helps us reduce HOW part and focus on WHAT, by bringing our code closer to formal rules or Logic as we call it. So, basically declarative programming (hi Compose), ex. functional/logical.
[*] -
https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf