but I go back far enough to remember the horrible spaghetti code that people used to write
So do I, though I still think Dijkstra was wrong about that. I used to get skewered for expressing that opinion, however. Not that it matters much, I've found most developers are a bit over zealous when it comes to defending their treasured folk-knowledge.
In before the OOP craze, like you were, I thought it was just going to be a passing fad -- like countless fads before and after. I have no explanation for its sticking power, save the early popularity of Java and Microsoft's subsequent clone, C#. I figure it would have been dead before the new century had Sun and Microsoft hadn't tried to cash-in on it. It's a shame MS's ploy to fragment Java failed. It's one evil plan that might have done us some good!
Fortunately for us, It is weakening. Sacred cows are starting to look like the mistakes they always were. The hipster developers are even promoting composition over inheritance. (And not a moment too soon. I've seen a lot of talk about multiple inheritance lately. I thought we'd already learned our lesson about that!) A lot of young developers are even learning what modularity actually entails, and how OOP is inherently anti-modular. (It used to be a popular belief that OOP gave you modularity for free! It looks foolish in hindsight, I know, but that was the marketing buzz.) It gives me a bit of hope for the future.
So I'll keep my fun Dijkstra quote, to lend support to the next generation who will cast-off our mistakes. It looks like they're trending toward an imperative+functional era. It'll be interesting to see what comes out of that.