К моей давней обзорной статье «Почему объектно-ориентированное программирование провалилось?» до сих пор приходят комментарии, и некоторые из них не только размером в полотна, но при этом ещё и умные и по космически глобальные (как минимум — дают почву для размышлений). Я решил вынести 2–4 таких стоящих комментария моих посетителей в отдельный пост, ну, так сказать, для затравки нового обсуждения.
Сейчас я работаю над продолжением к «Почему объектно-ориентированное программирование провалилось?» (хм, странно, что это интересно здесь такому широкому кругу людей), потому что материала по этой теме на самом деле просто завались. Поэтому пока эта тема по-любому крутится у меня в голове, даю комментарии для разогрева, ну и напишу в комплекте к этому посту и свой ответ на главный вопрос, с которым меня уже достали — «Зачем?» (имеется ввиду немое продолжение вопроса — попираешь святыню, а?).
«Зачем я это делаю?» — спрашивают меня часто, — «может, ты против ООП?» — произносят хитро щурясь. Нет, отвечаю честно я, меня просто поражает насколько здесь (бывший СССР) достаточно однотипные и бело-черные возрения на всё и вся, — какое явление не возьми, везде есть своё жесткое табу и святыня.
Когда я работал в Чикаго в своей первой команде американских разработчиков, помню меня поразил тот плюрализм взглядов и мнений, точек зрений и подходов, с которым я столкнулся. У нас же — любые отклонения «от политики партии» вопринимаются чрезвычайно болезненно, если не сказать, что агрессивно. Как говорили в фильме про Шурика: «грешно смеяться над больными людьми», наверное отчасти это верно, но я попробую…
Я уже год как не программирую вообще, и похоже, к своему основному ремеслу (программирование), которому отдал уже лет 11, не вернусь, наверное, никогда, но меня до сих пор поражает в худшем смысле этого слова, это почтение, с надрывом и дрожанием губ, у менеджеров-методологов к этой, в общем-то обычной и будничной концепции, — ООП. Все признают, что да, это не та самая серебрянная пуля, но… и тут же, как говаривал сбежавший из Microsoft по этой причине Джоэл Спольски, норовят изнасиловать и переубедить «очередную заблудшую овцу».
Когда журнал RSDN напечатал ту самую мою статью — там мне доверительно и максимально уважительно подсказали, что я, дескать — «бунтарь». А нифига, дорогая редакция, и тут дело вот в чем.
Я всего-то и хочу, чтоб у людей всегда был выбор, чтобы как минимум они знали, что альтернативы всегда есть, чтобы они открыто смеялись над слабыми сторонами ООП, и, как в той же чикагской комманде программеров, при этом с удовольствием пользовались всеми сильными сторонами ООП. Это касается и всего остального.
«Изобретать велосипеды?!» — язвительно заявит вам старший инженер по методологии. Зачем же самостоятельно думать и искать в сегодняшнем мире готовых полуфабрикатов?
Чтобы мы оставались всегда людьми — чтобы мы искали новое, чтобы задавали критические вопросы, чтобы… сомневались. Искали, для того, чтобы идти вперед, а не стоять на месте с важным видом. Короче, роботы меня не поймут, а те, кто ещё сохраняет способности думать и мыслить независимо — по… (хотел сказать покайтесь), подумайте над всем, что я пишу по этой теме. Да и вообще, о жизни задумайтесь.
Ну, а пока я пишу продолжение — почитайте, вон, что люди умные, не то что я, написали ниже (из комментариев). И, Карфаген всё-таки, должен быть разрушен, куда уж без этого...
Системный обобщающий вброс для старта процесса быстрого мыслегенезиса читающего:
Любая технология, как и люди, проходит три фазы своего эволюционного развития, — это юность, зрелость и старческий маразм.
Чтобы быть кратким, быстро проиллюстрирую это на cd-болванках. Сначала эта технология казалась очень дорогой, медленной (скорость 2x) и малодоступной, — короче непрактичной (юность), но постепенно она была доработана до приемлемого уровня, цены упали, скорости возрасли (30–40x) — CD-привод стал уже повсеместным (зрелость технологии).
И, наконец, дальнейшие необоснованное форсирование и попытки тупо развивать эту технологию и дальше привели к тому, что приводы на скоростях 60–70x банально рвали диски на части (которые изначально были не рассчитаны для таких перегрузок), потому дальнейшее повышение скорости было запрещено, развитие отчасти остановлено.
Итак, попытки по-тупому бесконечно педалировать понравившуюся и уже привычную технологию и далее (эффект сыра, найденного когда-то в каком-то уже привычном нам месте) привели к тому, что любая технология НЕМИНУЕМО вступает в фазу старческого маразма. Не в каждом творческом коллективе есть свой Моисей, способный провести от старого к новому — отсюда неизбежный эволюционный тупичок, под названием «старческий маразм».
Это — общая схема развития любой технологии, в том числе той же эфиродинамики, о которой упомянули в статье, разве что её прибили политические конкуренты ещё в безобидном зародыше — в фазе ранней юности, — не дав показать на что она способна (а иначе, верю, мы жили бы сейчас в СОВСЕМ ДРУГОМ МИРЕ, а не хвалились, что где-то дескать блеать Великая Теория Относительности, развивавшаяся больше века лучшими умами человечества доросла уже до того, что ажно корректирует время на часиках в GPS!!!1 одын один).
ТЕПЕРЬ ПО МАТЕРИАЛУ!
ООП как технология — вступила в фазу СТАРЧЕСКОГО МАРАЗМА, и люди мыслящие независимо начинают понемногу замечать это. Переход от дисков к твердотельным устройствам хранения займет не один год, да, но старая привычная и признанная технология оптических дисков ОБРЕЧЕНА, эта очевидна, это вопрос просто времени, впрочем, в равной степени это касается и ООП. Бесполезно обсуждать хороша она или плоха — она не позволяет решать задачи колоссальной сложности стоящие перед нами уже в ближайшем будущем, и этого достаточно.
Пока мне интересна разница лишь в восприятии: что кто-то видит на перед будущее, как это часто случается будучи гением, а кто-то (большинство) послушав радио и бессознательно рефлексирует бездумно ретранслируя то, что ему там сказали местячковые авторитеты вчерашнего дня. Тут аргумент НА САМОМ ДЕЛЕ ОДИН: нас много, а потому — лемминги не могут ошибаться. Ага. Большевики с броневичка — «вся власть советам!»
Поэтому, извините за просто неизбежные космические обобщения, выходящие далеко за рамки этой приземленной статьи, но когда пенсионеры активно ратуют за коммунизм, даже после всего того голодомора и репрессий, которые над ними в свое время учинили коммуняки, а молодежь — за либеральные реформы после лихих и бандитских 90-ых, — мы наблюдаем противостояние не политических систем или технологий в нашем случае, а конфликт ПОКОЛЕНИЙ, который является не техническим феноменом и некоей конкуренцией объективных качеств различных систем/технологий, и которые бесполезно рассматривать в таком контексте (как это наивно пытаются делать выше), потому что это чисто ПСИХОЛОГИЧЕСКИЙ ФЕНОМЕН. Это же касается и демократий всяких, которые в 21 веке вдруг начинают работают как-то не так, это касается ещё в большей степени и технологий программирования.
Смею быть уверенным, что я дал кратко ответы на все вопросы, которые прозвучали в вышеприведенных комментариях. Я _вижу_, что у ООП — нет будущего.
Корфаген должен быть разрушен.
Надо же, год статью комментируют. Комментарии полезней, чем сама статья.
Я не хочу повторять уже тысячу раз написанное… С чем-то я согласен, с чем-то нет.
..Напишу своё. Обойдусь без умных слов, засыпаю уже…
Я начинал программировать на программируемом калькуляторе. А кто-то на нём работал и получал за это деньги. Всех всё устраивало..
Появились первые ПК… Стали какие-то подобия окошечек. Информация выводилась на экран. Калькуляторы уже не устраивали. Писали на ассемблере, да на бейсике. Паскаль, си, прочее…
Появился графический интерфейс. Теперь и глаза меньше устают и работать приятней. Старый дос — для студентов. Много всяких окошечек, возможностей…
…
На рынке ПК всё-таки немало зависит от конечных потребителей. Им надо:
- дёшево
- красиво (!)
- просто
- функционально
- удобно
Чтобы решить проблемы с красивостями надо навызывать кучу функции, объявленных незная-где. Написать кучу мутного кода, который ни к предметной области вообще не относится…
В той же Delphi делается это гораздо быстрей.
Модули, как было сказано выше, неплохо справились бы с этой задачей.
Но, надо учить кучу названий однотипных функций, которые делают одно и то же.
.
Реализация ООП в средствах разработки даёт преимущества. Не надо думать о деталях реализации. Наляпал и готово. Для большинства программистов ошибок в этом случае меньше будет, т.к. модули многократно проверены и совместимы с целевой ОС. К тому же ошибки — не самый важный критерий для нынешнего пользователя.
.
Даже если эти умные дяди говорили это, то им всё-равно. Мировое имя у них есть. У меня его нет. Я могу посвятить всю жизнь свою разработке каких-нибудь алгоритмов шифрования, к примеру. Но через 40 лет меня обманут и украдут мою разработку. Но, вероятнее всего, я проведу свою жизнь впустую, потому что не имею таких лабораторий, знаний, опыта.
.
К чему я это? К тому что нет заказа на программирование вручную в обыденности. Есть ширпотреб. концепция RAD подходит для этого лучше всего. А основана она, думается мне, на ООП. Сиди и знай свое место! Именно эта стратегия себя оправдывает. Требуется сосредоточится на сущности вопроса и даже не надо знать, как это всё целиком работает.
.
P.S. Концепция ООП дала программистам абстракцию и контейнер для процедур с данными. Были модули — контейнеры для процедур, но не для нескольких экземпляров данных, были классические структуры для хранения данных. Аналога этому я не встретил ни в комментариях, ни в статье… Конечно, это не панацея. Но не стоит втравливать в грязь этот метод.
Чёрт возьми, какая архитектура, какая методология, какие аксиомы, когда всё решают деньги? ООП позволяет производить код в промышленных масштабах, не особо напрягая мозг программиста (т.е. на коленке настрочил — и работает, а как оно там во всеобщей связи устроено — вопрос вторичный), позволяя таким образом экономить время, а следовательно — деньги. А небольшие проблемы типа нескольких десятков тысяч классов — не беда! Наймем несколько тысяч индусов — и они все под нашим руководством переделают. Работать, правда, будет плоховато, но кого это волнует? Главное — слить продукт пользователю с минимальными затратами и получить прибыль здесь и сейчас, а как оно там дальше пойдет — разберемся.
Так что первый комментатор прав — ООП себя доказало. Вполне.
Полную версию всех комментариев читайте под оригинальной для сегодняшнего поста статьёй. И, конечно приглашаю всех - высказывайтесь в комментариях, доказывайте и аргументируйте, нужно ли в наше время "изобретать велосипеды" и "бороться с ветрянными мельницами"?
Выскажу свое мнение, – в данный момент, весь этот спор, безусловно, интересен, но все с большим ускорением теряет былую актуальность. Язык – это уже не конечный исполняемый файл, а скорее, наоборот, уже «платформа» – это то, что занимает (неизбежно займет) больше половины всего рынка ПО. Т.е., есть «подземелье» - .Net, Java и пр., и есть «над» - синтаксис и парадигма, ходящие «друг в друга» на уровне данной платформы. А все остальное (COBOL, Си, SQL) – большей частью, уже нишевое. Ну и в заключение вопрос, - а на чем написан server-side у twitter, и может быть уже давно дан выбор multi-paradigm over ООП, а мы все ходим и смотрим не в те стекла?
Greetings!
Прочитав статью так и не понял каковы причины провала ООП и что вообще стоит считать провалом. Не буду спорить с аргументами Кнута, Буча, Степановым, поскольку почти весь мой проф опыт (4 год) — 80% ООП, 19% SQL, 1% lisp/prolog/other, т.е. по своему опыту и академическим знаниям сравнивать я особо и не могу.
Но что я могу сказать от себя.
Как я вижу один из популярных вариантов ЖЦ парадигмы:
- предистория: сначала парадигмы (ООП в нашем случае) нету, более-менее номарльно обходятся без нее;
- зарождение: появляется парадигма (в научной статье, например, как концепция), первые експерименты, инструменты, компиляторы, первые успешные использования; Все видят, что это хорошо;
- предмейнстрим: популярность парадигмы набирает обороты («ты что, ещё не пишешь на обьектах?! "); Серебряная пуля?
- мейнстрим: парадигма применяется почти повсеместно (иногда и не в совсем правильных случаях) как само собой разумеющееся;
- и тут появляются люди, которые замечают недостатки парадигмы, пытаются их показать всем остальным; Иногда это у них почти получается (waterfall, например, применяется очень редко, RUP — тоже, даже в больших организациях, насколько мне известно, но все-равно применяются т.к. в некоторых случаях ничего лучше не придумано);
С ООП сейчас то же самое. Оно стало мейнстримом, кто-то заметил недостатки, пытается их раскрыть/показать, может что-то и получится, но ИМХО, не в ближайшый десяток лет.
Так, к слову, то же самое будет и с Аджайлом (сейчас он в мэйнстриме, не парадигма, а методология, но все-же:)), и с функциональным программированием (ихмо, оно щас в предмейнстриме).
И это — нормально.
Вместо заключения.
Что же все вышесказанное (включая и статью) для нас всех означает в практическом плане? Ничего
Как по мне:
ентерпрайзу — джаву с ООП; Для distributed, мат.вычислениям, исследователям — функциональщину; Студентам — паскаль и си-шарпы с джавой; Миру — мир;
А вы живите, любите, учитесь и совершенствуйтесь, и тогда никакой провал нам не будет страшен:)