Почему программисты добавляют новые функции, но не убирают лишние?

в 7:35, , рубрики: Без рубрики
Почему программисты добавляют новые функции, но не убирают лишние? - 1

В этой конструкции Lego крыша поддерживается блоком в одном углу здания. Когда сверху кладут кирпич, крыша падает на фигурку человечка. Как решить эту проблему? Источник: научная работа Адамс и др., Nature vol. 592 (2021)

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

Конечно, ожирение сайтов и софта сопровождается повышением производительности компьютеров. И в каком-то смысле стимулирует этот рост производительности. То есть налицо цикл положительной обратной связи, грех жаловаться. Но всё-таки возникает вопрос: что же мешает разработчикам удалять лишние функции? Частичный ответ мы находим в научной работе «Люди систематически упускают субтрактивные изменения», опубликованной 7 апреля 2021 года в журнале Nature. Этот феномен проявляется не только в программировании, но и в решении других задач: при улучшении различных объектов, идей или ситуаций, и в целом в жизни людей.

Рассмотрим конструкцию на КДПВ. Фигурка человечка стоит под крышей, которая удерживается одним блоком в углу. Авторы исследования задали респондентам вопрос: «Как дешевле изменить структуру, чтобы на крышу можно было положить кирпич, не раздавив фигурку, если каждый новый блок стоит 10 центов?»

Большинство участников опроса предложили добавить блоки, поддерживающие крышу. Хотя более простым и дешёвым решением является убрать единственный блок в углу, чтобы крыша свободно легла на основание (такой вариант выбрал всего 41% респондентов).

Почему программисты добавляют новые функции, но не убирают лишние? - 2
Процент респондентов, выбравших варианты с добавлением элементов (оранжевый) и варианты с удалением (бирюзово-синий) в разных экспериментах

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

Например, Адамс с коллегами проанализировали архивные данные своего университета. Они отметили такую особенность: когда новый президент университета запросил предложения по изменениям, которые позволят лучше обслуживать студентов и сообщество, только 11% ответов касались отмены существующих регламентов, практик или программ. Абсолютное большинство студентов предлагали что-то добавить.

Или вот ещё один эксперимент. Участников исследования попросили сделать симметричной сетку из зелёных и белых элементов 10×10.

Почему программисты добавляют новые функции, но не убирают лишние? - 3

Как вы уже понимаете, 51% участников добавляли зелёные блоки в пустую половину сетки, и только 49% удаляли лишние. Эффект наблюдался даже в том случае, когда удаление было более эффективным решением. Например, участники предпочитали добавить девять блоков, а не удалить три.

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

Почему программисты добавляют новые функции, но не убирают лишние? - 4
Иллюстрация к вопросу, как улучшить поле для мини-гольфа, из научной статьи

Авторы научной работы доказали, что оптимальные решения с вычитанием элементов просто не приходят людям в голову. Когда в инструкциях прямо упоминалась возможность таких решений или когда участникам давали больше времени подумать или попрактиковаться, вероятность таких предложений возрастала с 41% до 61%.

Судя по всему, эвристика «что здесь можно добавить?» принята в качестве стратегии по умолчанию для простых и быстрых решений. Этот шаблон мышления можно преодолеть, если приложить дополнительные когнитивные усилия.

Учёные также предполагают, что к такому мышлению «по умолчанию» участников эксперимента может подталкивать предыдущий жизненный опыт. Точно так же члены университетского сообщества могут неявно предположить, что новый президент хочет от них принятия новых инициатив, а не критики существующих.

Следствия «накопительного» мышления мы видим повсюду вокруг: в разбухании ПО, ожирении сайтов, увеличении количества организационных структур и расширении свода государственных нормативных актов… И даже в наших домах, где встречается довольно много необязательных объектов.

Почему программисты добавляют новые функции, но не убирают лишние? - 5

Например, если человек не удовлетворён обстановкой в квартире, то склонен решать проблему покупкой новой мебели вместо того, чтобы убрать лишнюю мебель, которая занимает пространство и портит вид. То же самое происходит с бытовой техникой, посудой, одеждой и другими вещами. Людям не приходит в голову избавиться от ненужных вещей. В результате происходит накопление сущностей, что не решает проблему, а иногда и усугубляет её.

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

В попытках улучшить маршрут путешествия только 28% респондентов исключают пункты маршрута. Попытки улучшить эссе (сочинение) приводят к его увеличению в 83% случаев. В огромном диапазоне контекстов люди просто не склонны удалять сущности.

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

Сложение проще, чем вычитание?

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

  • Мы не знаем, по какой причине некий фрагмент кода (функция) были добавлены нашими предшественниками. Следственно, мы рискуем столкнуться с непредвиденными последствиями. Например, в картинке на КДПВ мы не знаем, можно ли опустить крышу — а вдруг она неспроста приподнята над основанием? Это классический пример забора Честертона:

    В вопросе направленных преобразований, в отличие от деформаций, существует один простой и очевидный принцип, который даже можно назвать парадоксом. Допустим, существует конкретный закон или институт, для простоты примера забор или ворота, расположенные поперёк дороги. Современный тип реформатора, с энтузиазмом предлагает: «Я не вижу никакой пользы от этого; давайте уберём его с дороги». На что более разумный реформатор способен ответить: «Если вы не видите пользы от этого сооружения, я точно не могу позволить вам избавиться от него. Найдите время и подумайте. Только затем, когда вы вернётесь и сможете объяснить мне, что вы видите применение ему, возможно, я позволю вам исполнить ваше намерение.

    — Гилберт Честертон

    Почему программисты добавляют новые функции, но не убирают лишние? - 6

  • В системе из n элементов поиск решения с вычитанием элемента требует понимания функциональности всех элементов в системе и их взаимодействия, что приближается к O(n^2). В то же время решение с добавлением элемента требует понимания только одного нового элемента и того, как он один взаимодействует с системой, что больше похоже на O(n). В математике сложение концептуально проще вычитания: отсутствует концепция отрицательных чисел. С другой стороны, в математическом анализе интегралы (сложение) вроде бы аналитически сложнее, чем производные (вычитание).
  • В сложных системах решение зачастую принимается в результате консенсуса, с учётом мнения всех заинтересованных сторон. Самое безопасное решение редко бывает оптимальным, а «добавить» что-то кажется более комфортным: это удобный итеративный процесс.
  • Многие разработчики и менеджеры воспринимают программный код как ценный актив. В эту ментальную модель не вписывается польза от удаления кода.

Возможно, данную особенность человеческого мышления стоит учитывать при моделировании поведения общества и отдельных индивидуумов, в том числе для полезного манипулирования человеческим поведением со стороны будущего ИИ.

Люди не видят простых решений с вычитанием функций

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

Почему программисты добавляют новые функции, но не убирают лишние? - 7

В некоторых европейских городах дизайнеры избавляются от светофоров и дорожных знаков. Оказывается, зачастую можно обойтись вообще без них: движение становится проще и безопаснее (количество ДТП снижается).

Почему программисты добавляют новые функции, но не убирают лишние? - 8
В некоторых городах Нидерландов реализована концепция общего пространства, когда в отсутствие светофоров, дорожных знаков, дорожной разметки и других строгих правил люди используют общее пространство более эффективно: водители, велосипедисты и пешеходы действуют сообща

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

Антуан де Сент-Экзюпери говорил: «Совершенство достигнуто не тогда, когда нечего добавить, а тогда, когда нечего убрать». Однако при решении реальных проблем люди склонны действовать иначе, добавляя элементы, а не удаляя их.

Работа Адамс с коллегами указывает на способ избежать этих ловушек в будущем — политики и руководители организаций могут явно запрашивать предложения на уменьшение/удаление. Например, президент университета может явно указать, что ожидаются и приветствуются рекомендации по устранению комитетов или правил. Как отдельные лица, так и учреждения могут принять меры самоконтроля. Например, потребители могут минимизировать пространство для хранения вещей, чтобы ограничить покупки.

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

Научная статья опубликована 7 апреля 2021 года в журнале Nature (doi:10.1038/s41586-021-03380-y).

См. также:


На правах рекламы

Эпично! Мощнейшие виртуальные серверы на базе новейших процессоров AMD EPYC для размещения проектов любой сложности, от корпоративных сетей и игровых проектов до лендингов и VPN.

Подписывайтесь на наш чат в Telegram.

Почему программисты добавляют новые функции, но не убирают лишние? - 9

Автор: Анатолий Ализар

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js