There is a kind of mania for object-oriented programming at the moment, butsome of the smartest programmers I know are some of the least excited about it.My own feeling is that object-orientedprogramming is a useful technique in somecases, but it isn't something that has to pervade every program youwrite. You should be able to define new types,but you shouldn't have to express every program as thedefinition of new types.I think there are five reasons people like object-oriented programming, and three and a half of them are bad: Object-oriented programming is exciting if you have a statically-typed language without lexical closures or macros. To some degree, it offers a way around theselimitations. (See Greenspun's Tenth Rule.) Object-oriented programming is popular in big companies,because it suits the way they write software. At big companies,software tends to be written by large (and frequently changing) teams ofmediocre programmers. Object-oriented programming imposes adiscipline on these programmers that prevents any one of themfrom doing too much damage. The price is that the resultingcode is bloated with protocols and full of duplication. This is not too high a price for big companies, because theirsoftware is probably going to be bloated and full of duplication anyway. Object-orientedprogramming generates a lot of what looks like work.Back in the days of fanfold, there was a type of programmer whowould only put five or ten lines of code on a page, precededby twenty lines of elaborately formatted comments. Object-oriented programming is like crack for these people: it letsyou incorporate all this scaffolding right into your sourcecode. Something that a Lisp hacker might handle by pushinga symbol onto a list becomes a whole file of classes andmethods. So it is a good tool if you want to convince yourself,or someone else, that you are doing a lot of work. If a language is itself an object-oriented program, it canbe extended by users. Well, maybe. Or maybe you can doeven better by offering the sub-conceptsof object-oriented programming a la carte. Overloading, for example, is not intrinsically tied to classes. We'll see. Object-oriented abstractions map neatly onto the domainsof certain specific kinds of programs, like simulations and CADsystems. I personally have never needed object-oriented abstractions.Common Lisp has an enormously powerful object system and I'venever used it once. I've done a lot of things (e.g. making hash tables full of closures) that would have required object-oriented techniques to do in wimpier languages, butI have never had to use CLOS.Maybe I'm just stupid, or have worked on some limited subsetof applications. There is a danger in designing a languagebased on one's own experience of programming. But it seemsmore dangerous to put stuff in that you've never needed because it's thought to be a good idea.