3 ms·
I've been seeing this meme recently that object-oriented programming is not what we think it is, but rather that it's some other ethereal quality which does not
by msvan 7y ago
I've been seeing this meme recently that object-oriented programming is not what we think it is, but rather that it's some other ethereal quality which does not exist as a paradigm in modern languages. Isn't it fair to say that object-oriented programming is what the huge amount of C++/Java/C#/etc programmers perceive it to be, rather than some ideal envisioned by dead languages like Smalltalk and Simula?
- adrianratnapala 7y agoWell, as a C++/Python/C# programmer, I see it as a combination of ways to (a) organise procedural programs using language features that make abstract data types more powerful, or (b) obfuscate procedural programs using language features that make abstract data types more confusing. If there is in fact some other, non procedural, paradigm called OOP that we can learn about, then maybe dead languages are the place to look for it.
- rgoulter 7y agoOne reason for distinction is that you'll get people who say "OOP is a good way of designing systems" and "OOP sucks" and one might not be aware of the other. Generally I see "Java isn't OOP" followed by "OOP is about the messages". Somehow no better name has caught onfor this.
- tonyjstark 7y agoWhile I agree that at some point we need to accept that the meaning of a term is not what it was envisioned but how it is perceived, just look how "we" use the term variable and how it is used in math, I completely disagree with saying that Smalltalk is a dead language. Maybe not mainstream, but still alive with a driving community.
- enkiv2 7y agoThe reason folks are concerned about the use of the term is that earlier systems that were described as OOP (like Smalltalk) are blamed for the sins of later systems that were also described as OOP and became more popular (like Java). This coincides with other problems. Smalltalk is actually a better language for iterative development than Java, and a big part of that is the focus on messages rather than more fragile forms of code-reuse like inheritance. Java's popularity is based on heavy marketing & manipulation of school accreditation committees by Sun, rather than by its actual applicability to any real programming task, & Smalltalk fans justifiably feel persecuted (and, less justifiably, want to take back control over a term that they feel has been abused by its application to Java). It's not a matter of ideals versus reality. Smalltalk actually exists, people actually write code in it, and Smalltalk-style object orientation is a real, consistent, well-documented approach. This is a matter of spin: in recent memory (the late 80s), object orientation became trendy because of Smalltalk (the same way that functional programming is trendy now because of Haskell), and the response is that big companies (IBM, Microsoft, and Sun) through their weight behind trying to redefine it so that they could apply it to already-existing or already-under-development products in marketing materials without making substantial changes. These products would not have been considered object oriented to people at the time without a concerted effort to dilute the meaning of the term (in much the same way that people are busy trying to redefine 'blockchain' and apply it to everything in order to scam people who are willing to invest in anything vaguely associated with bitcoin). Smalltalk users have pushed against this redefinition since it began, & I think a lot of Kay's later emphasis on messages is because C++-style object orientation (as adopted by Java and C#) doesn't support messages & as a result lacks the most characteristic features of Smalltalk-like OO systems. (There's another issue: Smalltalk-style OO systems are actually easier to implement, and so the number of languages with this kind of OO system is actually much bigger than the number with C++ or Java style OO systems. These languages tend to be small & obscure -- objective c and smalltalk being most popular of the bunch -- and many more people code in C++ or Java because that's what the AP CS tests are required to use, leading to newbies thinking C++ style object orientation is representative, and leading them to go on to prefer languages that are actually worse for their productivity.) Wayne here brings up an important point: that object orientation under simula doesn't look much like object orientation under smalltalk, & neither looks like C++. What seems like an argument over terminology is actually an argument over best practices by two crowds who are both emotionally attached to the same term, but use them to describe two different things. (Nobody is emotionally attached to Simula's idea of OO. Unlike Smalltalk, Simula actually is dead.) If we reframe it as an argument over best practices, then Kay's crowd wins hands-down, as anyone who has written a medium-to-large project in Java or C++ can attest.
- enkiv2 7y agoAlso, note: One way to interpret Kay saying "I invented objects" is that he is claiming to have invented the first conception of objects that anybody gave a damn about (which is absolutely true). Even though C++ doesn't have anything Kay would call an object, the reason C++ exists is that C programmers were jealous of Smalltalk. (Again, while C++ is more popular, objective C actually looks & acts sort of like Smalltalk & provides some of the benefits -- C++ is something basically unrelated that appropriated the ad copy in order to cash in on the hype, though only actual Smalltalk users would have been able to call Stroustrop's bluff in the 80s.)