Отличное видео, объясняющее, почему объектно-ориентированный подход в основном бесполезен с примерами кода, - это это видео:

https://youtu.be/QM1iUe6IofM

Я изучал и даже преподавал объектно-ориентированный объект в прошлом веке и работал над многими крупномасштабными объектно-ориентированными платформами более двух десятилетий. Я был полностью оплаченным членом «Церкви ООП». Поскольку я был программистом-самоучкой, я лишь смутно знал о функциональном программировании. Я прекрасно понимал, как большие кодовые базы, над которыми я работал (многие из которых имели более 30 разработчиков), очень быстро превратились в беспорядок. Меня постоянно расстраивали ошибки, которые совершали люди, потому что они не знали о последнем беспорядке, с которым я столкнулся. Это верный признак того, что что-то сломалось, когда вам нужно знать, как что-то пойти не так, чтобы избежать ловушек.

Я также знал, что параллельное программирование совершенно невозможно исправить на языке объектно-ориентированных приложений, который я знал, и как очень сложно писать хорошие расширяемые библиотеки. Только «мастера-джедаи» могли, так что старшие разработчики, которым мы платили очень хорошие деньги, не могли. Я принял это как факт, что почти никто полностью не овладел такими хардкорными навыками. Я сам не претендовал на эти навыки, так как писал большие приложения, а не библиотеки.

В конце концов я попал в организацию, которая занималась широкомасштабным функциональным программированием одной программы, но при этом использовала язык ООП, который я знал. Нам нужно было реализовать жесткий параллелизм в новом выпуске системы на основе ООП, и я решил, что лучше написать этот бит на функциональном языке, чтобы избежать ошибок параллелизма. Так что я окунулась в новый язык и приняла его. Поразительно, насколько легко было написать отличный код на новом языке, используя меньше функций в целом, но с новыми функциями, такими как лексическая область видимости, которая приводит к гораздо меньшему количеству шаблонов. Через некоторое время я понял, что причина, по которой было трудно писать крупномасштабные системы в объектно-ориентированном программировании, заключалась в том, что объектно-ориентированный объект не был универсальной хорошей техникой, на самом деле он полезен только в небольшом масштабе в очень узких местах. Дело не в том, что у него нет своего применения, его следует учить в последнюю очередь, а не в первую очередь, и использовать его только в очень определенных местах.

В научной статье есть отличное резюме парадигм программирования, которое показывает, что объектно-ориентированный объект - это лишь небольшая часть вселенной парадигм:

https://blog.acolyer.org/2019/01/25/programming-paradigms-for-dummies-what-every-programmer-should-know/

Когда я только начинал в прошлом веке, ОО было горячей новинкой. Я очень рад, что сегодня новые программисты начинают заниматься такими вещами, как современный JavaScript с множеством функциональных библиотек. Ни одна парадигма не должна править, но, безусловно, доминирование парадигмы объектно-ориентированного программирования заставило меня в течение первых двух десятилетий заботиться о некоторых очень хрупких и чрезмерно сложных кодовых базах. Я не пропущу этого в следующие два десятилетия.