Lately I have been finding myself thinking along the same lines. Everything in moderation. There is no universal tool for anything. OO is just a tool that should be used when appropriate.<p>Lately I have found myself preferring to model data with OO and use procedural/functional code for the rest. This is especially handy for simple sites like feed readers, etc. Python and PHP handle switching back and forth between the two styles very easy (and acceptable).
I am not much of a programmer, and have never understood OO development, despite a fair bit of reading. I was thinking about it earlier today, and I think part of the reason OO seems so difficult is that it does not fit human languages. Languages have separate nouns and verbs and various modifiers (adjectives/adverbs) and connectives. OO with its "unifying" attributes and methods is like a language with preformed phrases rather than words, and which can be modified in only limited, preset ways. This works much better for visual images (since it seems to be closer to how we manipulate images mentally) which makes it a better fit for GUIs.
"I realize that in today's programming world, I am a heretic."<p>Yeah, right. Nobody ever questioned this "everything should be OO" paradigm. Except that Java was actually the last language influenced by it. Someone should tell this guy about Python, Clojure, Ocaml, Haskell or even Javascript.
This is one of the reasons I have become a big fan of Python. It lets you easily use objects and OO concepts when they are the best approach, but it does not force you to use them when the particular problem is more functional (or even more procedural for many short, simple scripts.).
"At Apple ATG, I worked with many from the Xerox Smalltalk team, and we pushed for stronger models of OO within software designs. And, we resisted as much as possible the introduction of C++ , which in fact Larry Tesler jokingly called it C+- (approriate, actually.)"<p>I already read this (I use REBOL), this paragraph was very funny to me :)