Hi @matan_tsuberi,
This video is mostly (but not completely) an exercise in “Reductio ad absurdam” where one exaggerates a point to make it absurd, and then sits back and criticizes the exaggerated result.
He obviously makes some good points, but those would be ways in which one could improve one’s Object Oriented code, but in no convincing way (imho of course), does he make an argument for throwing away the whole domain of programming?
The problem is that there are a lot of people who follow heuristics for solving problems by deifying the heuristic and then over using it. This is NOT the fault of OOP - it simply means that it has followers who exaggerate the importance of a “principle” and then regurgitate it ad infinitum/nauseam!
So mostly, I don’t agree that he adequately supports his conclusions with his assertions. I call them “assertions” because if you’re careful to listen hard, he doesn’t support the majority of his claims with adequate examples.
The whole tirade he goes into regarding “cross-cutting-concerns” and its impact forcing a refactoring of semantics in order to include the concern in a top-down logical way or abstracting a “sub-god” handler is actually a GOOD thing, because it forces the new substructure to have adequate semantics whose description include the new cross-cut as concern which expresses an intent of the new structure under which it is now encapsulated.
A lot of programmers might not do this in a neat or elegant way, and may muddle the overall semantics of the structure - but again, that is NOT the fault of OOP in general (imho).
Part of the way we evolve as a society of professional interest-bearing specialists is to attack the prevailing thought model and to keep attacking it until something better emerges. It’s a natural phenomenon which if you live long enough you start to see as a prevailing pattern with no more menace than recognizing it as a benign societal dynamic. It’s simply the way thinking evolves itself.
But that doesn’t mean the abstractions or concepts undergoing attack are necessarily “bad” or “wrong”. It’s just that we do our thinking inside of a context that describes (and takes for granted that) longevity is bad (imho).
Now…
The reason why I support OOP is that a new programmer can take a look at a foreign code module and instantly understand what it is trying to accomplish (if done correctly or as correct as possible given the restrictions of the semantic undergoing the modeling attempt). If you get rid of that, you have code which may emphasize efficiency, but is not very maintainable.
Now I’m generalizing too. But for the most part, the abstraction of programs into everyday language semantics is a concept that caught on for good reason.