USCode has posted an interesting link regarding OOP here... I thought I'd give my comments. I have many years experience using procedural, functional and object-oriented languages and I have a BSc in software engineering.
Let me start by saying that "OOP models the real world better" is a fact. Research has actually shown that children are much faster to learn programming using OOP techniques than procedural, precisely because it represents the real world better. It is much easier to abstract as software classes can coincide with real world objects. (Sorry I don't have a reference, as I don't remember what university did this research)
It is also a fact that OOP scales better. OOP is a virtually necessity for large projects, as both GedB and USCode also stated. But it needs good design and modeling. Just using objects doesn’t make sense without some form of design process with artifacts such as sequence-, system- and class-diagrams. That said, it is easy to see that OOP does create overhead on small single-person projects.
Still, for small projects, things such as
inheritance and
polymorphism are excellent concepts to use even for small programs. The idea is that data, and the functions that work on that data should stay together. The fact that pure basic doesn't support OOP is a great shame, however I think it is possible to add functions to structures in effect creating a class (though not with encapsulation... I haven't tried this though. I'm new to PureBasic)
Wikipedia also has some interesting critique, though it seems more objective then USCode’s link.
The reason for my reply here is that I think many of you will think "great, I don't have to learn OOP" when reading that post. I assure you, OOP is a VERY important skill if you want to work as a software engineer.