Теория разбитых окон в разработке программного обеспечения: почему важны детали

Теория разбитых окон в разработке программного обеспечения: почему важны детали

28 февраля 2023 г.

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

Разбитые окна

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

Я часто представлял себе, что мой велосипед BMX — это Формула-1, и что я соревнуюсь с Найджелом Мэнселлом, Аленом Простом или Айртоном Сенной. Затем, близко к финишу, я совершал превосходные обгоны и одерживал победу.

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

Я никогда не забуду, как впервые остановился, чтобы отдохнуть и созерцать здание. Помню, я подумал: «Странно! Почему не у дороги?... Кто-то закидал камнями и разбил несколько окон... Почему их не починили? Выглядит загадочно, но мрачно. Мне лучше держаться подальше, что-то не так». Тогда я бы уехал на велосипеде и больше никогда не заходил бы в эту область.

Шли годы, и в конце концов лес был прорезан дорогой, и постепенно рядом с ней выросли новые здания. Но, по крайней мере, какое-то время старый склад простоял. Тем не менее, с каждым годом все больше окон приходилось поддаваться брошенным в них камням.

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

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

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

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

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

Я впервые столкнулся с теорией разбитых окон много лун назад, когда читал Pragmatic Programmer. Если вы новичок в мире разработки программного обеспечения, это стоит прочитать.

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

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

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

Я надеюсь, вы поняли, что разбитые окна в этой старой истории со складом провоцируют антиобщественное поведение, которое также заставит прохожих, словно руководствуясь автоматическим предчувствием беды, отступить от нее и вычеркнуть ее из головы.< /p>

Технологии и преступность

Чтобы вы не думали, что я слишком стар, позвольте мне использовать TikTok Kia Challenge в качестве еще одного примера (который может также включать разбивание окна автомобиля).

Если вы не знакомы с этим, речь идет о видео, размещенном на этой платформе, которое привело к серии краж автомобилей, нацеленных на Kia и Hyundai, в основном подростками, что привело к повреждению имущества, горю, гибели людей и другим гнусным преступлениям. последствия, причем все негативные… за исключением прибыли TikTok и дальнейшей известности платформы.

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

An image of a car factory

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

Мне интересно, что сегодняшняя молодежь скорее будет инфлюенсером, пусть даже послом зла, чем пожарным, доктором или космонавтом. Молодцы СМИ! (моя попытка сарказма для тех, кому трудно понять сарказм).

Таким образом, в этом примере мы можем признать, что разбитое окно (и USB-кабель) даже непреднамеренно может привести к более серьезным последствиям, чем просто разбитое стекло.

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

Проект разработки программного обеспечения: пример HTTP-заголовка Referer

Примером из мира программного обеспечения, который уже много лет является разбитым окном, является заголовок HTTP Referer, который представляет собой неправильное написание слова referrer. Это доставило мне проблемы, возможно, вам, а также сотням, если не тысячам людей.

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

Кого волнует, что другие люди теряют время, когда легко научить, что нужно делать что-то неправильно, потому что это правильный способ сделать это? Или, вот забавная мысль, почему бы нам не поменять словарь? Тогда это уже не будет ошибкой.

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

Результаты могут вас удивить.

:::

Разбитое окно, оставленное без ремонта, приводит к еще большему количеству разбитых окон, но если даже эксперты не заботятся о них, то почему это должны делать остальные? Почему бы не разбить больше окон? Конечно, однажды все должно быть исправлено.

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

Возьмем среднюю зарплату программиста в США в 2021 году, которая составляла $93 000 согласно этому источнику. Предположим, что у вас 40 часов в неделю и 52 рабочих недели, чтобы получить почасовую стоимость в 44,71 доллара США (очевидно, американцы не очень любят отпуск).

Учитывая, что только в США, согласно этому источнику, насчитывается 4,3 миллиона программистов. . Даже если мы возьмем только 5% из них (значение выбрано произвольно), мы получим 215 000 программистов, которые так или иначе столкнулись с опечаткой и должны были предпринять шаги, чтобы понять и устранить ее.

Если бы каждый из этих программистов потерял в среднем всего 1 час, разбираясь с побочными эффектами и понимая, почему они вообще существуют, то стоимость их первой встречи составила бы 9,6 миллиона долларов. Если бы это было 30% (1 290 000 человек), значение составило бы 57,7 миллиона долларов. Опять же: только для США.

Даже если вы выберете другой произвольный процент, потери все равно будут огромными.

An image of a person holding money in both hands as if counting

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

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

Я жду того дня, когда добрая душа где-нибудь поделится: «Кстати, мы это исправили, и в версии X старый способ будет объявлен устаревшим». Потому что для меня, если только люди, ответственные за простую ошибку, не настолько презренные, что их следует помнить за эту опечатку, то лучшее время для ее исправления было вчера. (Знаете кого-нибудь из Apache Foundation или кто работает с Nginx? Пожалуйста! Напишите им!)

"Начинайте с конца", включая то, что вы сделали или не сделали для других.

Тем не менее, это всего лишь пример из мира программного обеспечения, а не единорога, у нас есть и другие.

Корпоративная зрелость и разбитые окна

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

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

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

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

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

An image of several stacked dossiers

Общество не жалует неудачников, мы чествуем победителей! Таким образом, человеку свойственно защищаться, когда совершает ошибки или терпит неудачу. Мы требуем, чтобы все, кроме нас, никогда не пропускали пенальти или штрафные удары. Кроме того, программисты определенно недоброжелательны друг к другу, но это не только их проблема.

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

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

Звучит глупо, не так ли? Посмотрим, что может произойти.

Если мы устроимся поудобнее, пытаясь сопротивляться нашим собственным предубеждениям, возможно, многие из нас смогут заметить то же самое: группа людей, которые зарабатывают на жизнь решением проблем, могут уверенно и легко распознать разбитые окна. А поскольку некоторые из них никогда не будут исправлены, люди будут искать способы перестать беспокоиться и удалить их из списка невыполненных работ.

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

Заключение

Когда это обычное поведение, которое несет в себе негатив и является нежелательным, становится неприемлемым? Только ли когда люди разбиваются и происходит смерть?

Если так, то есть вещи, которые никогда не исправишь… давайте продолжать проигрывать, или, точнее, пусть другие продолжают проигрывать.

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

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

И, пожалуйста, перестаньте мусорить, потому что другие тоже.

И если это эксперты, бросьте им вызов! Они люди, они совершают ошибки и, возможно, даже не замечают их. Если они реагируют как придурки, ответьте: «Добро пожаловать».

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

Но я всегда стараюсь сделать одну вещь: исправить их, как только узнаю о них. Вы тоже должны!

Маленькие вещи, они важны. И если не именно они, то что означает их присутствие.

:::информация Не оставляйте «разбитые окна» (плохой дизайн, неправильные решения или плохой код) без ремонта. - The Pragmatic Programmer, Дэйв Томас и Энди Хант

(включая самых маленьких)

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE