“Lucid, the Dataflow Programming Language” by William W.Wadge and Edward A. Ashcroft (chapter 3, page 75) :
The problems with imperative languages mentioned in the introduction (enormous complexity, lack of formal specifications, difficulties in expressing parallelism and so on) are products of the imperative philosophy itself, and are caused by the clash of imperative features (like assignment) with declarative features (like recursion). If the designers of non-procedural languages try to borrow imperative features, they will end up borrowing the problems as well. Nonprocedural languages will succeed by developing the strength of the nonprocedural approach, not by imitating the weakness of the imperative. When first designing Lucid, for example, we worried for some time because the usual one-update-at-a-time array algorithms (e.g., for sorting) appeared somewhat inelegant in Lucid. Finally it occurred to us that perhaps this sort of strict sequentiality is not such a good idea in the first place.
And also (chapter 5, page 119):
Of course, we could adopt a sort of nonprocedural Cowboy attitude. We could claim that Lucid is such a good language, that its tools are so powerful, that you do not need strategy. This attitude is not completely unfounded. Programs in Lucid (and in nonprecedural languages in general) tend to (be) noticeably simpler, more elegant, and above all shorter than corresponding programs in the competing imperative languages.
We cannot stop programmers from using the language in any away they want, but as for ourselves we think that programming strategy is all-important – no amount of cleverness or powerful tools can compensate for bad strategy. It is true, though, that the Cowboys can take on bigger tasks that ever before, while relying only on their wits. Nevertheless, even the toughest Cowboy will eventually be ‘Dry Gulched’ by a really nasty problem, and having powerful tools only postpones the day of reckoning.
Overall, I think that this book is grossly underestimated…