Зачем? И весь ужас удара бритвой по Оккаму

в 3:11, , рубрики: бритва оккама, зачем, нафиг, нафига, почему, с какого

Самое страшное слово для инноватора или очень уж упёртого студента, который проходит практику у вас в компании: «Зачем?»

Давай, расскажи, я слушаю внимательно

Давай, расскажи, я слушаю внимательно

Знаете почему? Потому что в 80% случаев ответа вам на этот вопрос не дадут. Давайте разберёмся, причём здесь Оккам и что ему от нас нужно.

Бри́тва О́ккама (иногда ле́звие О́ккама) — методологический принцип, в кратком виде гласящий: «Не следует множить сущее без необходимости» (либо «Не следует привлекать новые сущности без крайней на то необходимости»). (Википедия)

Хотя, если честно, то в английской Вики рассказано намного лучше. Более многословно, но проще.

В философии бритва Оккама — это принцип решения проблем, который рекомендует искать объяснения, построенные с использованием наименьшего возможного набора элементов. Она также известна как принцип бережливости или закон бережливости. Приписываемый Уильяму из Оккама, английскому философу и теологу XIV века, он часто цитируется как «Сущности не должны умножаться сверх необходимости», хотя Оккам никогда не использовал эти точные слова. Популярно принцип иногда неточно перефразируется как «Самое простое объяснение обычно является лучшим».

Теперь давайте разберёмся в том, как можно использовать вопрос «Зачем», чтобы избежать 80% всех сложностей с которыми вы можете столкнуться.

Обновления системы

Посмотрим, например, вот на этот коммент на Хабре. Пользователь @h1pp0 предлагает мне купить новый ноутбук. Зачем? Ответа на этот вопрос нет. Объяснения тому, зачем это надо делать нету. Просто потому что новый процессор будет быстрее? А что мне с того?

Да, действительно, сегодня существует много bloatware и ПО растёт как на дрожжах. Но я‑то разработчик. Я просто использую свой ноут для программирования. Его задача — поддерживать мульти‑мониторную систему, выводить на экран браузер, уметь хоть как‑то делать зум и компилировать относительная простые коды. Я разрабатываю на NodeJS, Rust и Golang. Это три компилятора, которые установлены у меня в системе. Если надо сбилдить что‑то действительно тяжёлое, то у меня для этого настроен AWS CodeBuild. А для скриптиков на моём любимом Убунту мне вполне хватает сил.

Процессоры могут быть либо слишком быстрыми, либо слишком медленными. На данный момент процессор у меня слишком быстрый. VSCode открывается в мгновенье ока, а вимом так и подавно можно открывать и то быстрее. Да, если я попытаюсь запустить на этом ноуте какой‑то видео редактор, то всё быстро пойдёт под лёд. Я не дождусь завершения работы до следующего явления Христа народу. На этом ноуте я заработал много денег. Я мог бы его обновить, но не хочу. Зачем? Он пока выполняет свои функции.

Установка новой ОС

То же касается и Убунты, которая на нём установлена. Да, мне не раз говорили, что мне надо сменить дистрибутив на [Arch|Gentoo|Pop|Crystal|Clear]. Зачем? systemd слишком жирный? Ну так а мне что с того? Я что, могу это как‑то заметить?

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

Когда мне надо — я открываю компилятор, и с матюгами лезу в модули ядра, перекомпилировать этот вонючий evdi, который вечно недопачен, и из‑за которого у меня вечно отваливается второй монитор. Но когда я его скомпилировал, я не обновляю ядро по пол‑года. Зачем? Новомодная уязвимость в nvme‑over‑TCP стеке? Так я его не использую. Новые дрова для какой‑то там приблуды? Так у меня её нет.

На самом деле, если бы мне под руку попался установщик Дебиана, я бы на нём и сидел. Но я не буду делать distro‑hopping, потому что Зачем?

Обновления сервера

Я проходил мимо одной конторы. У них не было администратора, а всю сеть администрил эникейищк. В сети стоял старый телефонный сервер на Asterisk. Уже в то время версия была устаревшей. В 2015 году сервер работал на версии 1.4, которая была выпущена в 2008 году.

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

Я посмотрел на всё это дело, и спросил, когда они будут слезать с этого сервера. Они сказали, что никогда. Я спросил их, что они будут делать, если сервер внезапно ляжет. Они ответили, что перейдут на проводные телефоны. Я посмотрел на статистику использования серверов и увидел, что год за годом она постоянно уменьшалась, тихо умирая. Потом я узнал, что в США вводятся новые законы, которые делают использование подобных серверов практически бесполезным. Если в 2008 году ты мог серьёзно сэкономить на телефонном трафике, то в 2015 году делать это стало трудно. В попытках борьбы со спамом любой телефонный трафик с частных VOIP серверов отмечался спамом и никуда не шёл.

Плюс, оригинальная конфа занимала 2 мегабайта файлов. И в добавку ко всему, сам сервер был скомпилирован со специальным набором драйверов для поддержки hardware encoding, так как сервер был оснащён телефонными картами, которые выдавали звонки на внутренние телефоны в компании. Можно ли было всё это портировать на новейший на тот момент Asterisk 16? Да, конечно. Но я понял, что во‑первых, они не хотели платить за сотни часов переписывания конфигов. Во‑вторых они не наняли бы нового админа, который бы обновлял бы конфиги и астериск.

И тут я подумал — так сервер‑же подключен к «наруже» только через телефонный провод! И я нашёл выход, который удовлетворил всех. Я пошёл на eBay и купил пол‑дюжины SCSI дисков Cheetah Seagate на 30 гигабайт. (Вот, наслаждайтесь стариной). Потом заказал два точно таких же сервера, с той же прошивкой и памятью, по 50 баксов за сервер, и ещё блоков питания и пару запасных телефонных карт. Сервер уже был на Mirror raid, так что мы перепрошили контроллеры так, чтобы диски из мёртвого сервера можно пересадить в живой, или просто поменять диск, если он умрёт.

К 2022 году сервера перестали работать. Не потому что они не могли дальше работать, а просто потому что они стали не нужны. Все разговоры перешли на email и Whatsapp, а телефонная обзвонка клиентов оказалась там, где ей и следовало быть — на свалке.

Проблема была решена за 500 долларов. Да, я сделал так, что система из 2008 года проковыляла до 2022, а потом от неё отказались за ненадобностью. И это было самое удачное инвестирование средств. Иначе пришлось бы вкладывать тысячи долларов на обновление системы. А зачем?

Правильный ответ на вопрос Зачем

В 1942 году в ВМФ США появился очень интересный документ. Он был озаглавлен «Доктрина завершенной штабной работы».

Следующий меморандум был воспроизведен бесчисленное количество раз военными и гражданскими организациями с момента Второй мировой войны и стал широко принят как определение того, что делают эффективные сотрудники штаба. Исходный меморандум был подготовлен для Генерального прокурора, армии США, полковником Арчером Дж. Лерчем, заместителем генерального прокурора. Он был опубликован в выпуске от 29 января 1942 года журнала Army and Navy Journal.

ЗАВЕРШЕННАЯ ШТАБНАЯ РАБОТА

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

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

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

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

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

  1. Начальник защищен от сырых идей, обширных меморандумов и незрелых устных представлений.

  2. Штабному офицеру, у которого есть настоящая идея, легче найти рынок.

Когда вы закончите свою «завершенную штабную работу», окончательный тест таков:

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

Если ответ отрицательный, заберите его и доработайте, потому что это еще не «завершенная штабная работа.»

Эта доктрина говорит о том, что начальник должен получить от штабного офицера уже полностью собранные данные, которые полностью решают сложившуюся проблему. Иначе подобное «решение» должно отклонятся.

Вот и вы в некоторых случаях должны вести себя так же. Когда к вам приходят и говорят, что вам надо сейчас‑же обновиться до новой версии пакета, переписать систему, внедрить CI/CD или сделать что‑то, чего вы раньше не делали, вы должны понять, что пора по‑быстрому доставать бритву Оккама и задавать грозное «Зачем?»

Пример

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

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

Подбробное объяснение и технические данные выложены на сайте https://xkcd.com/1354/ .

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

Решение: Необходимо немедленно отключить все сервера нашей компании и собрать всех сотрудников на сверхурочную работу. Сотрудники должны применить патч (ссылка) на всех серверах компании.

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

Мы только что получили новую версию фреймворка. Давайте переписывать весь код. Зачем? Потому что в нём есть новая фитча, которая позволяет заменить хуки на шмуки. Это как раз та самая фитча, которую в Реакте все ждут уже пол‑года.

А это тут вообще при чём? Зачем? Как? Почему? Кто бы знал.

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

Ну или вот

Необходимо закупить новое оборудование. В отдел IT требуются новые ноутбуки. Зачем? Потому что старые устарели. Но старые покупались только 2 года назад! Но отделу IT надо быть на высоте, и соответствовать новейшим трендам в области. Зачем? Но им же надо писать код на новой платформе! Зачем? Они всё на golang, там на сайте даже нет требований к ОС. Зачем им новые ноутбуки? Ну они же хотят компилировать быстрее! Компиляция занимает 1 секунду, это проект из 500 файлов на golang, мы не браузер собираем. Но нам…

И так далее и тому подобное.

Сохраните себе время, и если вам после первого Зачем? не выдали чёткий ответ, то можете даже не слушать.

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

Ок, одобряю. (Это, кстати, реальный пример)

В жизни

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

Купи шоколадные вафли новый Samsung S123+++ JBQTLUltra. Зачем? У него больше памяти! Так у меня и так 50% свободно. У него лучше камера. Меня и эта устраивает. У него быстрее процессор, да и мой пока не тормозит.

Никогда не принимайте решения, которое не основано на проверенных данных. Всегда спрашивайте себя (или того, кто вынес это решение) Зачем?

Да, можно действовать на основе хайпа или моды. Иногда вам просто хочется. Иногда вам надо внедрить новый фреймворк, чтобы его изучить. Иногда вам действительно хочется побаловать себя новой игрушкой. И да, это может быть ответом на вопрос Зачем?. Но в таком случае, вы должны на него так и ответить. «Я проверил свой кошелёк. У меня нет голодных детей, у меня достаточно хорошо выплачивается ипотека, и с кредитом всё хорошо. Положить 100к рублей на новый телефон для меня — это так, сущие пустяки. Покупаю».

Но вы же ответили на этот вопрос. И вас этот ответ удовлетворил.

Так что поймите, не всё в жизни разработчика должно быть таким сложным и непонятным. Ответ на вопрос «зачем мой сотрудник конючит, когда я его попросил сепулькать»? Может быть простым и понятным. В таком случае, пожурите своего сотрудника, который не сказал вам почему это он сепулькает, но пусть себе сепулькает. Но если причин своего сепулькания он не рассказал от слова совсем, то возможно надо выдать ему как следует, и заставить его канючить. Ведь вы же понимаете, зачем это делается.

Автор: Ivan Roganov

Источник

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


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