That’s a hard thread to synthesize. I have less to say about FP, but wrt OO:
Where I find OO really goes sideways is with the endless abstraction. I think this is possible with any paradigm, but popular OO methodology really digs deep. I think this is because OO immediately implies the possibility that there can exist more than a single type. The moment you have a “gorilla”, tada, you have an “animal”, and perhaps there are animals other then gorillas. It’s hard to think about OO without both “instances” and “types”, and suddenly you have double the code you used to have.
I think Erlang is represents a healthy mixture of both.