My main problem with declarative/functional programming languages is that they force developers to separate the logic from the state (they are not co-located based on concerns) and this often causes developers to neglect the separation of concerns principle altogether; which is by far the most important principle in my experience.
Most developers never learned proper blackboxing/state encapsulation.
It's impossible to create truly modular code without colocating related logic and state.