Математика Для Мошенников

О софистике (софизмах) в дискуссиях и об ООП Поскольку писать комментарии в режиме «только для чтения» запрещено, рискну написать еще раз в песочнице.



Введение

Читая хаб, я споткнулся об один из Комментарии .

Вернее, я наткнулся на цитату в этом комментарии:

«Я уверен, что ООП методологически неверно.

Она начинает с создания классов.

Это как если бы математики начали с аксиом.

Но на самом деле никто не начинает с аксиом, все начинают с доказательств.

Только когда найден набор подходящих доказательств, только тогда из этого базиса выводится аксиома.

Те.

в математике вы получите аксиому.

То же самое и с программированием: сначала нужно начать разрабатывать алгоритмы, и только в конце этой работы вы подойдете к тому моменту, когда сможете сформулировать понятные и непротиворечивые интерфейсы.

Именно из-за этой путаницы в ООП так популярен рефакторинг — из-за ущербной парадигмы вы просто обречены переписывать программу, даже в тот самый момент, когда вы впервые задумались о ее проектировании в стиле ООП».

(с) Александр Степанов, соавтор C++, автор STL

Прежде чем перейти к сути этой заметки (вернее, к анализу приведенной выше цитаты Степанова), хочу также напомнить небольшую статью с провокационным объявлением («Софистика — математика для жуликов»), которая как-то зацепила меня.

глаз в глянцевом журнале (что само по себе уже странно, в таких журналах не часто удается привлечь внимание к чему-то).

Ээлектронная версия Здесь .

Далее я буду ссылаться на термины из этой статьи, поэтому рекомендую вам ее прочитать.



Следи за своими руками

Давайте оценим нашу цитату с точки зрения ораторского искусства.

Но это красиво! Как говорится, берегите свои руки.

Начинается оно с неожиданного и громкого заявления, поэтому сразу привлекает внимание.

Далее оратор подводит слушателя (читателя) к аналогии между классами ООП и аксиомами математики.

Эта аналогия впоследствии послужит основой финального аккорда: «вы просто обречены.

»! Аплодисменты.

Занавес.

Противники побеждены.

Честно говоря, мне даже в голову не пришло использовать ООП в таком ортодоксальном варианте, как описывает Степанов.

ООП в моем понимании — это просто один из многих очень удобных инструментов.

ООП (парадигма) вполне съедобна (даже вкусна) даже без соуса «по умолчанию», который обязательно содержит ключевую идею о том, что все является объектом.

ООП не теряет своего очарования, если оно используется по мере необходимости, а не исключительно с точки зрения его всеобъемлющей основной идеи.

Да, похоже, концепция ООП вовсе не требует широкого использования исключительно объектов.

Но было бы неплохо переформулировать эту самую ключевую идею и перейти от варианта «все есть объект», например, к варианту «все можно представить как объект».

Подать можно, но это не обязательно! И не обязательно все будет плохо.

В основе цитаты — аналогия между доказательствами и аксиомами математики, с одной стороны, и алгоритмами и объектными интерфейсами — с другой.

Насколько обоснована эта аналогия? Похоже на ОЖИДАНИЕ ФОНДА? Аксиома, если я ничего не путаю, — это некое исходное утверждение, которое принимается за истинное без доказательства, а само служит основой для построения других доказательств (от набора аксиом требуется только непротиворечивость — собственно, так же, как и от интерфейсы, однако вряд ли автор цитаты именно это имел в виду).

Да-да, где-то в уголке моей памяти затаилась мысль, что многие утверждения, когда-то считавшиеся просто аксиомами, со временем нашли свое подтверждение.

Но это не повод говорить, что ход мыслей математиков всегда идет от доказательств к аксиомам.

Формально аксиомы почему-то входят в число теорем, а теоремы всегда доказываются, но это также не повод говорить, что аксиома всегда выводится на основании подходящих доказательств.

Звучит как ЛОЖНЫЙ СИЛЛОГИЗМ? Также в цитате абсурдом воспринимается прогресс разработки от интерфейсов к алгоритмам (якобы сначала должны быть алгоритмы, а уже потом формулирование непротиворечивых интерфейсов).

Я не понимаю почему.

Если мне вдруг кажется необходимым (удобным) где-то использовать какой-то объект, то я начинаю с зарисовок его структуры и интерфейса (то есть методов, посредством которых можно обмениваться данными с этим объектом).

По сути, здесь я просто создаю некий дополнительный уровень абстракции.

Я пока не буду вдаваться в детали реализации (алгоритмы) на этом этапе, и на мой взгляд это абсолютно не мешает придумать целостный интерфейс.

В процедурном программировании, когда мы определяем часть кода как процедуру или функцию, мы также можем начать с интерфейса (вставить в код заглушку — пустую функцию), а уже потом заниматься деталями его реализации.

И это не выглядит абсурдно.

Конечно, вполне возможен и процесс разработки в обратном направлении: сначала мы разрабатываем алгоритм реализации (или сразу несколько), а затем формализуем его как функцию или как метод создаваемого класса.

Но это не значит, что это нужно делать всегда.

Поэтому мне кажется, что эта часть цитаты тоже попахивает ОЖИДАННЫМ ФУНДАМЕНТОМ.

Я, конечно, допускаю, что при разработке действительно больших и сложных проектов все может быть именно так, как описывает Степанов.

Мой опыт не позволяет мне об этом судить, поэтому оставляю этот аспект на ваше усмотрение.

Однако в любом случае это также не является в принципе поводом считать ООП методологически некорректным, поскольку существует большое количество ситуаций, для которых методология ООП подходит вполне хорошо.

В конечном счете, ключевая заявленная идея ООП — все есть объект — тоже выглядит как СУЖЕНИЕ ВЫБОРА.

Почему необходимо, чтобы «все было объектом»? Почему бы не «все можно представить как объект»? Или это ошибка перевода?

Заключение

Мы с вами часто используем одну и ту же математику для мошенников совершенно интуитивно, просто как стереотип (шаблон!) общения.

Может стоит описать это в правилах и запретить использование в комментариях? ПС.

И простите, если я где-то накосячил с теорией программирования или математикой.

Буду рад исправлениям.

Целью этого поста было ни в коей мере не принизить авторитет Александра Степанова или кого-либо еще и уж тем более не показать, «какой я умный».

Я просто хотел обратить ваше внимание на то, что, когда мы учимся отстаивать свое мнение в дискуссиях, мы часто в конечном итоге прибегаем к софистике, даже не осознавая этого.

Оказывается, это математика для мошенников.



Математика для мошенников

Теги: #ООП #софистика #дискуссии #программирование

Вместе с данным постом часто просматривают: