Для начала немного обо мне: я и практикующий дантист, и разработчик ПО. Со вторника по четверг я пишу код, а с пятницы по воскресенье принимаю пациентов. До того, как стать дантистом, я работал в таких компаниях, как Allstate Insurance, Lockheed Martin и ICS. Освоив обе эти профессии, я заметил, что разработчики ПО могут многому научиться у дантистов и наоборот. Я решил записать эти уроки в надежде, что они кому-то могут помочь. Это просто общие рекомендации — не стоит рассчитывать, что они идеально подходят для любой ситуации.

▍ Dx-навыки важнее, чем Tx-навыки


Хирург может иметь самые ловкие руки в мире, но это ничего не стоит, если он не знает, что делает и почему это делает. В медицине/лечении зубов мы ценим способность врачей диагностировать (diagnose, Dx) гораздо больше, чем их способность просто лечить (treat, Tx).

Я заметил, что это применимо и к разработке ПО. Мне довелось поработать во множестве успешных программных проектов и в гораздо большем количестве провалившихся проектов. Ни разу я не слышал, чтобы у проекта менялись сроки или его отменяли только из-за того, что один из разработчиков не смог придумать оптимизированный алгоритм. Обычно причины бывают такими: «нам не хватает времени, чтобы написать всё до даты релиза» (самая частая), «появился серьёзный баг и мы не знаем, как его устранить», «плохое решение руководства». Когда у программистов (в том числе и у меня) возникают проблемы, то это редко бывает из-за того, что нужно написать новый код; чаще причина в необходимости отладки уже имеющегося кода.

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

Способность инвертировать двоичное дерево — это один навык, а найти ошибочный код инвертирования двоичного дерева и объяснить, почему теряется узел при нечётном N — совершенно другое умение.

▍ Клиенты должны явным образом давать согласие на принятие очень плохих решений


При лечении зубов мои пациенты часто настаивают, чтобы я предпринимал очень плохие действия; в основном это связано с финансовыми причинами. Например, когда вместо коронки пациент хочет композитную реставрацию; поначалу это кажется хорошей идеей, но спустя пару лет обернётся катастрофой. Некоторых пациентов это устраивает. В таких случаях я прошу подписать дополнительную форму согласия, в которой, по сути, написано «Я понимаю, что это плохая идея, но всё равно хочу этого» (эта форма используется вдобавок к остальным формам юридического согласия).

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

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

▍ Замена (некоторых) совещаний тестами


Для организации совещаний есть несколько весомых причин. Например, чтобы группа людей приняла решение по какой-то теме или чтобы распространить информацию. Многие люди считают вторую причину необязательной, из-за чего даже возник мем «Это совещание могло быть электронным письмом». Но правда в том, что большинство людей не читает письма. А если и читают, то только мельком. Очень часто совещание организуют просто для того, чтобы все точно были в курсе дела по определённой теме.

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

То же самое можно сделать и с доброй частью совещаний. Допустим, вы управляете двадцатью с лишним разработчиками и вам нужно создать новое правило, например, «у всех баг-репортов, имеющих статус resolved, в комментариях должен быть id коммита с патчем». Если вы разошлёте письма, то большинство людей не прочитают их и продолжат менять статус багов без id коммитов. Если вы проведёте совещание, то оно отнимет у каждого сотрудника не только по 30-60 минут, но и то время, которое необходимо ему для возвращения «в колею». Если же устроить обязательный для прохождения, но короткий тест, то разработчики не только смогут проходить его между задачами, но и с большей вероятностью прочитают презентацию/документ вместо того, чтобы витать в облаках на протяжении всего совещания. Тест должен оцениваться, а не быть простым опросом. Почему? Потому что если вам нужны отзывы о новой политике, то я гарантирую, что люди поделятся своим мнением, если будут недовольны полученной в тесте оценкой.

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


Не так давно я анализировал рентгеновские снимки зубов одной своей пациентки и заметил, что пломбы выглядят очень плохо. Было похоже на то, как будто врач не знал, как пользоваться матрицей для нанесения композита. Однако изучив рот пациентки, я понял, в чём дело: её зубы имели такие смещения, что было очень трудно наносить композит и, учитывая условия, ставивший пломбы врач проделал потрясающую работу. Большинство врачей не оценивают работу своих коллег, не получив полную картину. Как бы нам ни хотелось сказать: «Ха! Ужасный врач! Я бы справился лучше!», нас не было рядом при выполнении процедуры и мы не можем судить другого врача, пока не узнаем историю целиком. Поэтому когда мы видим результаты лечения, которые выглядят странно, то первым делом думаем: «Наверно, что-то заставило врача сделать именно так».

Думаю, тот же принцип должен применяться и при анализе кода. Легко посмотреть на код и сказать: «Ого! Этот код ужасен! Разработчик должен был сделать X вместо Y», не изучив предварительно остальные обстоятельства. Например, когда-то давно я анализировал код на Java, который выглядел ужасно. В нём была куча целочисленных констант, хотя разумнее было бы использовать enum. Первым делом я подумал: «Он что, не знает о enum?», а потом спросил у коллеги, в чём может быть причина. Он ответил: «А, да, этот код писали до Java 5, поэтому он не мог использовать enum». И тогда я осознал, что не должен судить разработчика, ведь он сделал максимум, что было возможно в его условиях.

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

▍ Лучше говорить с людьми, которые пользуются продуктом, а не с теми, кто его создавал


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

Тот же принцип актуален и в разработке ПО. Только то, что компания разрабатывает SDK/API/тулкит, не означает, что она будет наилучшим источником информации о решении проблемы, с которой вы столкнётесь. Лучше всего обсуждать их с коллегами-разработчиками, использующими это ПО. Иногда их «best practices» лучше, чем у компании, создавшей продукт. У некоторых компаний есть строгие политики, запрещающие разработчикам говорить о проблемах с внешними разработчиками. Я считаю, что в долговременной перспективе это оказывается ошибкой, потому что общение с разработчиками, использующими SDK, может быть бесценным ресурсом, а такие строгие политики могут нивелировать преимущества скрытности. Я не рекомендую разработчикам нарушать их NDA; я просто считаю, что им следует просить руководство быть более снисходительным к тому, что они могут и не могут публиковать онлайн.

Telegram-канал со скидками, розыгрышами призов и новостями IT ?

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


  1. uuger
    25.03.2024 13:47
    +31

    я и практикующий дантист, и разработчик ПО

    кто-то решил заработать все деньги мира


    1. Yohohori-san
      25.03.2024 13:47
      +2

      просто индус


      1. GrifasOfficial
        25.03.2024 13:47
        +2

    1. Halt
      25.03.2024 13:47

      Бывает. Кон Коливас, к примеру, активный контрибьютор ядра Linux (подсистемы I/O и планировщиков задач CPU), в миру еще и практикующий анестезиолог.


  1. MainEditor0
    25.03.2024 13:47
    +2

    До того, как стать дантистом, я работал в таких компаниях, как...

    Вот с этого момента поподробнее, как разработчик ПО стал дантистом? А то я тоже хочу "заработать все деньги мира". Ну ладно, я просто шучу, но мне все же интересно, как это произошло


    1. Vlad_IT
      25.03.2024 13:47
      +1

      А это перевод зарубежной статьи https://zenfamily.dental/csLearnDental.php Надо писать туда, иначе никогда не узнаем


  1. muxa_ru
    25.03.2024 13:47
    +2

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

    Может уже пора и к программистам применить?


    1. Dolios
      25.03.2024 13:47

      Кто будет оплачивать этот банкет? Средняя зарплата дантиста в 2+ раза выше средней зарплаты программиста там, где живёт автор. РФ в пример не нужно приводить, у нас с зарплатами врачей аномалия какая-то.


      1. radioxoma
        25.03.2024 13:47
        +2

        У нас приявзка стоимости специалиста к дороговизне расходных материалов. Кожу нитками шьёшь - одна цена, стенты сосудистые ставишь - другая, ЭКМО подключаешь - третья.
        Терапевты вообще, наверное, бесплатно должны работать. Деньги там нужны только на амортизацию стоимости халата и стетоскопа)


        1. Dolios
          25.03.2024 13:47

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


      1. muxa_ru
        25.03.2024 13:47

        Сейчас Вы оплачиваете банкет непрерывных исправлений того что они сами же и нарукожопили.

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


        1. Dolios
          25.03.2024 13:47

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


          1. muxa_ru
            25.03.2024 13:47

            А это только к программистам относится?

            Если вам стоматолог изуродует челюсть и скажет что Вы могли бы открыть свою стоматологию, Вы сочтёте это нормальным ответом?


            1. Dolios
              25.03.2024 13:47

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


              1. muxa_ru
                25.03.2024 13:47

                Программист принимает решение о том какие буковки писать.
                Водитель принимает решение куда руль крутить.
                Хирург принимает решение куда скальпелем тыкать.
                Бухгалтер принимает ренешение какие цифры вписывать.

                Почему же всем остальным светит уголовная статья, а программисту новая пачка печенок/крекеров?


                1. Dolios
                  25.03.2024 13:47

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

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


                  1. muxa_ru
                    25.03.2024 13:47

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

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

                    Написал код с ошибкой из-за который окирпичилось 1000 смартфонов по 1000 долларов каждый - ущерб в особо крупном размере.


                    1. Dolios
                      25.03.2024 13:47

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

                      Давайте же скорее сюда эту статью. Причинение вреда чему?

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


                      1. muxa_ru
                        25.03.2024 13:47

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

                        Это настолько круто, что я даже скриншотик сделаю :)


                      1. Dolios
                        25.03.2024 13:47

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

                        Вы, кстати, кем работаете? Ща мы вам тоже статью придумаем. Статью приведёте или продолжите балаболить и фантазировать?


                      1. muxa_ru
                        25.03.2024 13:47

                        И водителя за любую ошибку на Колыму тогда. Превысил скорость - 2 года лес валить. И бухгалтера. Ошибся в отчетности - на зону. Ненадлежащее исполнение обязанностей жеж.

                        Не за любую, там от размера ущерба зависит.

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

                        Не готов - иди делай веб-сайты для мелких магазинов.

                        Не готов отвечать за смерть пациента - не бери скальпель в руки.

                        Не готов отвечать за салон полный людей - не садись за руль автобуса.

                        Вы, кстати, кем работаете? Ща мы вам тоже статью придумаем.

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

                        Статью приведёте или продолжите балаболить и фантазировать?

                        239 УК РФ - " Халатность, то есть неисполнение или ненадлежащее исполнение должностным лицом своих обязанностей вследствие недобросовестного или небрежного отношения к службе либо обязанностей по должности, если это повлекло причинение крупного ущерба или существенное нарушение прав и законных интересов граждан или организаций либо охраняемых законом интересов общества или государства [...] "


                      1. Dolios
                        25.03.2024 13:47

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

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

                        239 УК РФ

                        По этой статье судят стоматологов и бухгалтеров, серьёзно?

                        В общем, можете не продолжать, уже даже не смешно.


                      1. muxa_ru
                        25.03.2024 13:47

                        О, уже ущерб какой-то появился, а до этого просто за ошибки расстреливать предлагали.

                        У меня сразу было написано о ненадлежащем исполнении обязанностей

                        239 УК РФ

                        Опечатка - 293

                        По этой статье судят стоматологов и бухгалтеров, серьёзно?

                        О том, по каким статьям судят стоматологов написано вот тут - https://e-stomatology.ru/publication/dangerous_article.php

                        Про бухгалтеров тут - https://www.klerk.ru/law/articles/597/

                        А ещё есть "Причинение смерти по неосторожности" - отличная статья для программистов работающих над самоуправляемыми автомобилями и медицинскими роботами.

                        Уже упомянутая халатность должностного лица - для программистов автоматизирующих предоставление государственных услуг.


  1. hphphp
    25.03.2024 13:47
    +3

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


  1. KidBox
    25.03.2024 13:47
    +1

    Я вот врач психиатр и немножечко айти директор, который начинал с обжимки utp.

    Кодерам у стоматологов учиться не чему!

    И те и другие, отлично умеют выпаривать клиентам лажу о неминуемой важности своих действий - вы только денег отгружайте.


  1. Yuriy_75
    25.03.2024 13:47
    +3

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


    1. denticulus
      25.03.2024 13:47
      +6

      Опенспейс был стандартной планировкой советской областной поликлиники


    1. rustabapclub
      25.03.2024 13:47

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