Why Object-Oriented Programming Failed
At this point anyone worth listening to — including some of the founding “three amigos” behind the OOP cult religion of the 90s — have conceded that while OOP brought some value to the table it ultimately failed horribly to ever become something anyone would ever choose to do knowing what we know now.
No one explains this better and more comically and succinctly than Brian Cantrell, CTO of Joyent, as he described a time of “great darkness across the land”, which is even more accurate when you realize that XML and XHTML also emerged during that time. Brian describes massive efforts from the most substantial tech companies of the day attempting to create operating systems in object-oriented technology. All of them failed miserably:
- Apple’s Copeland
- Sun’s Spring
- IBM and Apple’s Taligent
- Sun’s JavaOS
Another one I personally remember is
- Sun’s “The Network is the Computer” Device.
These efforts objectively proved the entire object-oriented approach was fundamentally flawed. They tried to spin their failures but any engineer paying attention saw what billion-dollar flops all these were from day one.
Other massive architectural shifts to remote procedure calls and — one of the most moronic tech ideas of the decade, “distributed objects” also proved how dead and buried object-oriented program should have remained.
CORBA failed with nuclear holocaust proportions because absolutely brain-dead assumptions about the security, stability, and latency of the network abstracting all these critical details away behind yet another language.
[My god I get shivers just remembering how stupid that all was.]
But none of that stopped large corporations from creating massive systems dependent on these brain-dead technologies much like the emergence of UNIX and C did not stop enterprises from using COBOL and FORTRAN.
[Enterprises are often incredibly stupid but their overpaid hubris convinces them otherwise. How else do you get a portmanteau of “Talented” and “Intelligent” that fails so miserably and obviously. That’s bozo-syndrome at epidemic proportions.]
Computers are Fundamentally Procedural
To understand why object-oriented languages and paradigms failed — particularly the lower you get to the operating system — you have to understand how the hardware actually works. Anyone who has taken the time to code even the most simply thing in Assembly will understand this. Computers are all about moving a pointer sequentially around to different memory segments and copying to different registers. This very linear process does not lend itself well to the massive hierarchical structures that have to be propagated for every operation in OOP implementations.
Propagating the Inheritance Tree
Although languages got very creative in all the ways they threw out propagation that plagued early OOP language implementations — particularly in Java and C++ — ultimately they were never able to gain the efficiencies of plainer imperative and functional languages. You don’t have to be a computer scientist to understand that starting with the bottom of an inheritance tree and working up the tree looking to see which thing has what you are trying to use is horribly inefficient.
Structures For the Win
One of the ways OOP proponents started to convince people OOP was ok was to just create interfaces that didn’t have anything to do with inheritance and “leaf” objects and “singletons” that are basically classes for one object. So their “fix” was to essentially gut the entire premise of OOP, a premise that was so strong in the design considerations of OOP that it was forced as part of the syntax of Java itself — thou shalt only use single inheritance.
Since the beginning programmers have been using segments of memory organized in ways that structure the data and make passing it around efficiently very easy. It is this same focus on structures that has returned in very successful modern languages such as Go and Rust. Python sort of does this but does lazy evaluation which seriously complicates the process.
If You Want to Code the COBOL of Today, Go Ahead
Any OOP involving C++ and Java today is already so ancient it is like coding in COBOL in the 90s.
Why would you ever choose to code in that language when so many better options exist today?
“To get a job.”
No, to get a job is not enough, unless it is helping them port their systems diseased with technical debt to something more modern. Your career will be hampered because you will become the one in charge of the old stuff and never get a chance — at work — to work on the new stuff.
Plus, you have to keep yourself Good to Gig and that kind of falling behind will ultimately affect you directly.
One Reason College Board and AP Computer Science is So Bork
The entire College Board curriculum and AP tests were written during the worst of the “dark times” and are based on Java. They actually teach single inheritance and other evils that some enlightened companies would actually fire you for using.
That is why College Board is on my list of really stupid things — well that and the fact that they fail you if you answer that arrays and lists start their index with 0 (their correct answer is 1, just so stupid).
This is why even conservative computer science programs like Carnegie Mellon “entirely eliminated” OOP from their introductory program.
You tell me.
Why would AP CS — that is supposed to be designed to grant introductory college credit — teach OOP when one of the most prestigious and conservative CS programs in the world “eliminated” it from their “introductory” program?
The answer is because AP CS is almost entirely broken and College Board is to greedy, bloated, and corrupt to care — as we see with the SAT scandals they were involved with as well.