Привет, Хабр!

Предлагаю вашему вниманию перевод статьи "Too Clean?" автора Robert C. Martin (Uncle Bob).

image

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

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

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

Это не то, что я рассматривал или выражал ранее; хотя это всегда было то, что я застенчиво практиковал.

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

Вот фотография моего офиса, сделанная сегодня. Что вы видите?

image

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

Но вокруг также имеется немного беспорядка. Рядом с принтером, расположенным в крайнем левом углу, находится BUG-A-SALT, готовый справиться с вторгшейся мухой. Справа, на вершине Тардис, выглядывающей через крайний правый экран, находится рулон туалетной бумаги. На случай, если я пролью свой кофе или захочу чихнуть. Вы сможете найти спиннер? Видите, кучу инструментов для рисования слева? А как насчет всех этих стикеров, фотографий и… А что в мире внутри всех этих дырок в шкафу?

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

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

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

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

Например, я очень стараюсь отделять presenters от views. Код, который помещает данные в презентабельную форму, не должен находиться рядом с кодом, который выводит эти данные на экран. С другой стороны, когда вы пытаетесь заставить экран выглядеть и функционировать должным образом, очень сложно переключаться между двумя различными файлами. Иногда просто имеет смысл снова объединить код, получить все, что работает так, как вам нравится, а затем повторно разделить код. Эта техника известна под названием „Лучше хуже“.

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

Комментарии (31)


  1. Maksclub
    16.11.2019 13:43

    For example, I am a real stickler about separating presenters from views.
    я очень стараюсь отделять ведущих от зрителей.

    My English is badly, but даже я ужаснулся некоторыми моментами :)
    Обычно presenters, views (UI) не переводят (для понимания разработчиками).
    Архитектура приложения по Мартину
    image


    1. Oxoron
      16.11.2019 13:56

      Будьте аккуратнее с badly. Например, work badly/work hardly могут ознать не совсем то, что вы ожидаете.

      А идея в статье очень даже разумна.


      1. Maksclub
        16.11.2019 13:58

        идея нормальная,
        просто добавил про команду и примеры, когда иногда нужно строже к порядку относиться…

        про badly — ну так я же про себя :)


    1. yanaharchencko Автор
      16.11.2019 14:01

      То есть, лучше для понимания будет: «Например, я очень стараюсь отделять presenters от views»?


      1. Maksclub
        16.11.2019 14:06

        Ну или немного иначе

        Вид (англ. View) — реализует отображение данных (из Модели), обращается к Presenter за обновлениями.
        Представитель (англ. Presenter) — реализует взаимодействие между Моделью и Видом.
        Источник: ru.wikipedia.org/wiki/Model-View-Presenter

        Также ниже про форму в презентере


        1. yanaharchencko Автор
          16.11.2019 14:07

          Спасибо!


    1. ardraeiss
      16.11.2019 14:01

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


      1. Maksclub
        16.11.2019 14:07

        ну тем не менее, команда разрабов-бекендеров в большой команде — тоже часть производственной линии


    1. GeorgKDeft
      16.11.2019 19:05

      Если взять кухню в ресторане и команду поваров — там работают армейские порядки:

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


      1. Maksclub
        16.11.2019 19:52

        Неспроста же привел пример — работал на горячем цеху по студенчеству в нескольких ресторанах. Мужиков там много (если не больше), кроме холодных/кондитерских цехов. В запару может быть беспорядок, но если не следить за чистотой — через час уже работать в беспорядке объективно невозможно и приходится на уборку так или иначе тратить время. На баре у барменов также… попробуй в запаре оставь бутылку не того ни там — сколько времени убьется и суеты добавится.


        1. GeorgKDeft
          16.11.2019 21:53

          Насчет беспорядка согласен… но как показывает практика у каждого свое понимание что это такое. Хотя сейчас такая армия что сравнивать ее с современной кухней в принципе уместно. По крайней мере понятия культуры во многом схожи.


  1. ChDm
    16.11.2019 14:05

    Про «ерундовый спиннер» — «Can you find the fidget spinner?» — fidget spinner, hand spinner — переводится как просто «спиннер».
    И про «если наш код выглядит немного прожитым» — «if our code looks a little bit lived in» — вместо «прожитым» уместнее «обжитым» или «по-домашнему».


    1. yanaharchencko Автор
      16.11.2019 14:06

      Спасибо! Ваши замечания исправила!


      1. tmin10
        16.11.2019 17:46

        cubby holes это не квадратные отверстия. Судя по гуглу это такой тип полок.
        Неужели вас не смущали эти кривости перевода при вычитке? При чтении очень цепляют такие неточности.


        1. vectorplus
          19.11.2019 04:16

          Да, в этом тексте можно просто "полки".


    1. ardraeiss
      16.11.2019 14:10

      Ещё "что в мире внутри всех этих дырок в шкафу?" — ну явно в исходнике было "What in the world...", что скорее может звучать как "И что вообще понапихано внутрь всех этих полок?"


      1. ChDm
        16.11.2019 14:13

        «And what in the world is inside all those cubby holes?» — в данном контексте так и должно переводиться — «в конце концов», «черт возьми» и т.п.


        1. ardraeiss
          16.11.2019 14:18

          Там ещё и "cubby holes" употреблено, что может быть как про полки шкафа, так и про выдвижную стойку слева под столом — и вообще про что угодно(включая едва видные ящики справа и даже подоконник). Погуглив сей термин, могу его общий смысл более-менее понять; но вот подобрать аналог на русском затрудняюсь.


          1. ChDm
            16.11.2019 14:25

            In the United States, a cubby-hole most often refers to a small square or rectangle-shaped space where children may keep their personal belongings, such as in a preschool or kindergarten setting. These cubby-holes are often constructed out of the same materials as bookshelves and have a similar appearance save for the division of the cubbies themselves.
            Судя по фото — речь про «открытые полки».
            Для выдвижных ящиков чаще используют «drawer».


            1. ardraeiss
              16.11.2019 14:32

              О, спасибо за уточнение.


    1. excoder
      17.11.2019 08:44

      А мне понравился вариант про ерундовый спиннер :)


  1. uvelichitel
    16.11.2019 14:38

    В этом случае, идея о том, что программные системы должны быть «пригодными для жизни» представляет собой интересное понимание.
    Режет, не литературно как то.(


    1. yanaharchencko Автор
      16.11.2019 14:46

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


      1. uvelichitel
        16.11.2019 15:19
        +1

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


        1. mSnus
          17.11.2019 15:11

          "если отбросить придирки" тогда уж. Если придираться))


  1. Ar20L80
    16.11.2019 17:01

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


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

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


  1. QtRoS
    17.11.2019 11:14
    +1

    Видимо, перевод в первой версии статьи был настолько специфичный, что все сфокусировались на нем. Но статья-то интересна в первую очередь своим посылом! Я вот с ней полностью согласен, и в частности с тем, что некоторые общие правила можно нарушать локально, если так действительно лучше. По крайней мере у команды есть такое право — обсудив, сделать так, как по коллективному решению уместнее.


  1. granvi
    17.11.2019 12:03

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


  1. aikixd
    17.11.2019 12:28

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


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


  1. zorn_v
    17.11.2019 13:02


  1. LonelyCruiser
    17.11.2019 13:43

    Кусочек из книги Фейнмана. Вы, конечно, шутите, мистер Фейнман!
    Когда я был студентом в Массачусетском технологическом, там построили
    новый циклотрон, и как он был прекрасен! Сам циклотрон был в одной комнате,
    а контрольные приборы — в Другой. Все было прекрасно оборудовано. Провода,
    соединявшие контрольную комнату с циклотроном, шли снизу в специальных
    трубах, служивших для изоляции. В комнате находилась целая панель с кнопками
    и измерительными приборами. Это было сооружение, которое я бы назвал
    позолоченным циклотроном.
    К тому времени я прочел множество статей по циклотронным экспериментам,
    и лишь совсем немногие были выполнены в МТИ. Может быть, это было еще
    начало. Но была куча результатов из таких мест, как Корнелл и Беркли, и
    больше всего из Принстона. Поэтому, что я действительно хотел увидеть, чего
    я ждал с нетерпением, так это ПРИНСТОНСКИЙ ЦИКЛОТРОН. Это должно быть нечто!
    Поэтому в понедельник первым делом я направился в здание, где
    размещались физики, и спросил: «Где циклотрон, в каком здании?»
    — Он внизу, в подвале, в конце холла.
    В подвале? Ведь здание было старым. В подвале не могло быть места для
    циклотрона. Я подошел к концу холла, прошел в дверь и через десять секунд
    узнал, почему Принстон как раз по мне — лучшее для меня место для обучения.
    Провода в этой комнате были натянуты повсюду'. Переключатели свисали с
    проводов, охлаждающая вода капала из вентилей, комната была полна всякой
    всячины, все выставлено, все открыто. Везде громоздились столы со сваленными
    в кучу инструментами. Словом, это была наиболее чудовищная мешанина, которую
    я когда-либо видел. Весь циклотрон помещался в одной комнате, и там был
    полный, абсолютный хаос!
    Это напомнило мне мою детскую домашнюю лабораторию. Ничто в МТИ никогда
    не напоминало мне ее. И тут я понял, почему Принстон получал результаты.
    Люди работали с инструментом. Они сами создали этот инструмент. Они знали,
    где что, знали, как что работает, не вовлекали в дело никаких инженеров,
    хотя, возможно, какой-то инженер и работал у них в группе. Этот циклотрон
    был намного меньше, чем в МТИ. Позолоченный Массачусетский? О нет, он был
    полной противоположностью. Когда принстонцы хотели подправить вакуум, они
    капали сургучом, капли сургуча были на полу. Это было чудесно! Потому что
    они со всем этим работали. Им не надо было сидеть в другой комнате и
    нажимать кнопки! (Между прочим, из-за невообразимой хаотической мешанины у
    них в комнате был пожар — и пожар уничтожил циклотрон. Но мне бы лучше об
    этом не рассказывать!)