Это перевод. Автор текста: Ведущий разработчик и менеджер проектов Никлас Миллард.

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

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

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

if-else vs. полиморфизм

Дорогие мои, разве я подозревал, каких размеров осиное гнездо я разворошу, когда писал статью "Прекратите использовать if-else" ("Stop using if-else"). Опубликованный материал получил более 100 000 просмотров всего за несколько дней (а это по стандартам Medium, на минуточку, уже признак вирусного контента). Статья породила даже целую ветку хейтеров на Reddit. Я полагаю, что существует целая секта поклонников плохих практик, приветствующих традиционное ветвление, в том числе с использованием инструкций if-else. Наиболее ортодоксальных представителей этой секты раздражает существование объектно-ориентированного программирования, как наиболее сложного и непонятного процесса, особенно для начинающих программистов.

Оценка задач непрофессионалами

Оценку одного из моих первых проектов проводил коллега, имеющий степень магистра, но... в сфере политических наук. Нам нужно было создать "с нуля" проект, который включал: установку окружения на трех облачных структурах, создание модели базы данных, написание бизнес-логики и реализацию, в том числе front-end и back-end.

Так вот, подсчеты коллеги установили следующие затраты времени и ресурсов:

  1. 34-36 часов,

  2. 1 разработчик.

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

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

Статьи о программировании

Публичные материалы часто обращают внимание или делают вызов давно устоявшимся традициям, в том числе в области программирования. Я часто получаю комментарии следующего типа: "Я работаю в данной области более 20 лет, всегда делаю X, и это работает".

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

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

Чужой код

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

/* Same line */
if (something) {
}
else {
}

/* Seprate line */
if (something)
{
}
else
{
}

/* K&R 1TBS (the One True Braces Style) */
if (something) {
} else {
}

А еще мы, конечно, обратим внимание на отступы: табы или пробелы? А если пробелы: 2 или 4?

Code review и pull request

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

Многие из нас относятся к обзору кода, как к публичной порке.

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

Комментарии

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

let number = 0;
number++ // increment 'number' by one

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


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

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


  1. Hivemaster
    06.02.2022 10:33
    +21

    Я считаю, что нет более токсичного сообщества, чем сообщество разработчиков, программистов и инженеров.

    Сразу видно полное отстутствие у автора опыта работы в медицине или например автомеханником.


    1. gatoazul
      06.02.2022 10:37
      +16

      Не говоря уже о школе. Или, прости господи, о коридорах власти.


      1. aamonster
        06.02.2022 19:45

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


      1. Timofeuz
        07.02.2022 12:16
        +1

        Автор иностранец. Может там в школах и медицине другая атмосфера.


    1. Diamon33
      07.02.2022 03:55
      +1

      А как насчет сообщества геймеров (MOBA games?), echo chambers в твиттере, однобокие телеграм-каналы, анонимные имиджборды, сетевой маркетинг? I can tolerate everything except the outgroup?

      Либо автору предстоит множество открытий, либо он сознательно лукавит. Что иронично - эта фраза про токсичное сообщество в оригинальном материале - top highlight, который можно либо выделить на медиуме, либо поделиться в том же токсичном твиттере.


  1. shaggyone
    06.02.2022 11:04
    +2

    Думаю стоит разделять чужой код, нелюбимый codestyle и комментарии вида `for (i=0; i< 10; i++) // Цикл по i` это одно, в свою очередь оценка задач непрофессионалами -- совершенно другое.

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

    Второе -- интереснее. Это вопрос взаимодействия с менеджментом. По мне, под таким заголовком как у вас, просится раскрытие именно этого вопроса.


    1. RabraBabr
      06.02.2022 13:09
      +1

      Минутка юмора.

      В тему разолить разработчика.

      Перестаньте уже наконец использовать циклы вида for (i=0; i< 10; i++)  чего то там.

      Вкл зануду. Они крайне не безопасны,можно запросто выйти за пределы коллекции.

      Используйти итераторы. Пример:

      std::string s("hello");
          std::transform(s.begin(), s.end(), s.begin(),
                         [](unsigned char c) -> unsigned char { return std::toupper(c); });


      1. aamonster
        06.02.2022 14:03
        +3

        Да, зачётный юмор)

        Как раз сразу с пояснением, почему на C++ люди до сих пор используют цикл по индексу, несмотря на все его недостатки.


        1. Bigata
          06.02.2022 15:18

          Банально быстрее


      1. shaggyone
        07.02.2022 08:26

        Где вы увидели С++? Это C99.

        char *s = "hello";
        for (x=s; *x!=0; x++) { // Цикл по строке



  1. aamonster
    06.02.2022 13:01
    +7

    Хм... На "разозлить" тянет только история с оценкой времени (ибо подстава). Тут впору было сказать коллеге "Ok, делай сам за это время/деньги". Остальное – банальные темы для срачей, состояние "вы все дураки и не лечитесь, одна я в белом пальто стою красивая" вряд ли можно назвать злостью.


  1. dimti
    06.02.2022 17:40

    Конечно же больше всего меня бесит когда фигурную скобку ставят на следующей после if строке:

    if (true)
    {
    
    }

    Нет ничего, чтобы раздражало больше чем это.

    Или вот сравнение на 0 ещё:

    $arr = [];
    
    if (count($arr) < 1) {
        ...
    }

    Camm on, серьезно? Нет, послушай, ты реально считаешь, что там может быть что-то отличное от 0 быть? (Привет Tobias)


    1. dom3d
      06.02.2022 18:58
      -1

      Конечно же больше всего меня бесит 

      Если Вас что то бесит, то у Вас могут быть проблемы.
      Изгоняйте своих бесов.


    1. rubinstein
      09.02.2022 06:20

      Всегда ставлю скобку на следующей строке после if. Это в первую очередь наглядно, а во вторых так привык.

      Проверку на ноль пишу всегда так X == 0, но не так !X. Ибо первый вариант гораздо нагляднее и сразу виден и понятен. А второй надо ещё рассмотреть + "перевернуть".


      1. dimti
        09.02.2022 07:58

        Посмотрите пункт 1.1 в предлагаемой сводке стандартов PSR-2: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md

        PhpStorm автоматически форматирует код в соответствии с данными принятыми правилами (есть такая там штука: Ctrl+Shift+L, которая позволяет даже html автоматически разминифицировать и расставить отступы). Обычно я ей пользуюсь когда вижу что код отформатирован не в соответствии со стандартами принятыми внутри команды, о которых я сразу сообщаю разработчикам, делаю style guide, где описываю общие правила для популярных конструкций кода.

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

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

        Есть какие-то ситуации, когда математические операции не дают целочисленный 0 - может быть компьютерные вычисления не могут оставить равноценный остаток между, казалось, бы одинаковыми числами с плавающей точкой. Возможно это знание пришло из других языков, где это и правдо было актуально и теперь используется по привычке: https://github.com/OFFLINE-GmbH/oc-mall-plugin/issues/730


  1. third112
    06.02.2022 17:59
    +4

    ИМХО из статьи видно, что разозлить разработчика очень трудно. И это видно по другим обсуждениям на Хабре. Заголовок "Stop using if-else", конечно, вызвал у меня недоумение — пожал плечами и прошел мимо (я занят разработкой много лет). Помните статью "Настоящие программисты не пишут на Паскале"? Когда эта статья была издана, я не без удовольствия ее прочитал — местами остроумно, но продолжил писать на Паскале, а позже на ОО Паскале.


    Думаю, что опытного разработчика статьями типа "чем ЯП Х хуже/лучше ЯП Y, и почему нужно забыть ООП" не разозлить. Максимум негативных реакций — ему будет скучно читать такую статью.


    Но очевиден рецепт, как разозлить: понизить ЗП раза в 2 :)


  1. morosov_a_s
    06.02.2022 20:14
    +5

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


    1. dimti
      09.02.2022 08:13

      Я вот живу в своем собственном маленьком мире и использую Eloquent (даже при дорогостоящих операциях, где допустим условный join будет в 10 раз быстрее чем where exists).

      Пока доводилось поработать только с низко нагруженными проектами и там это не встаёт проблемой - использование фреймворка хватает чтобы закрывать потребности.

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


  1. vvbob
    07.02.2022 08:17
    +3

    >>когда писал статью "Прекратите использовать if-else" ("Stop using
    if-else"). Опубликованный материал получил более 100 000 просмотров
    всего за несколько дней (а это по стандартам Medium, на минуточку, уже
    признак вирусного контента). Статья породила даже целую ветку хейтеров
    на Reddit. Я полагаю, что существует целая секта поклонников плохих
    практик, приветствующих традиционное ветвление, в том числе с
    использованием инструкций if-else. Наиболее ортодоксальных
    представителей этой секты раздражает существование
    объектно-ориентированного программирования, как наиболее сложного и
    непонятного процесса, особенно для начинающих программистов.

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

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

    Доводилось работать в проектах, в истоках которых стояли такие вот разработчики - ненавистники if-else. Код их выглядел жутким ООП лабиринтом, в котором было крайне трудно понять как данные перемещаются по разлапистой иерархии объектов, и в каком месте возникает ошибка. Яркий пример того как можно какой-то простой алгоритм реализовать максимально сложно. Но зато, там действительно было по минимуму if-else, это да!

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

    Когда с этим работал - искренне скучал по старому, доброму спагетти-говнокоду, там хотя-бы все было линейно, чаще всего.


    1. mixsture
      07.02.2022 12:20
      +2

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


  1. StupidMouse
    08.02.2022 10:39

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

    А что произойдет, если назвать его "компьютерщиком", "тыжпрограммистом" и т.д.?


    1. nibb13
      09.02.2022 06:46

      Дурацкая шутка юмора

      Нерадивых инженеров привязывают к ракете-носителю в качестве бустеров и на старте над площадкой громогласно разносится: "...три...два...один...вы разработчики!..компьютерщики!..тыжпрограммисты!..пуск!"


  1. Dartflame
    08.02.2022 10:40
    +1

    Как разозлить разработчика - нет более надёжного способа, чем когда тестировщик говорит тебе "чет ничего не работает", ты полгода пытаешься найти проблему, воешь на луну, а потом тестировщик говорит "ой это я неправильно там кое что настроил, все норм"