Книга «Наш код. Ремесло, профессия, искусство»

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

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

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

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

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

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

    Глава 1
    Адриан


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

    Добытчики и недобытчики


    Я сказал секретарю:

    — У меня встреча с Крисом, он меня ждет.

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

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

    — На самом деле это она, — сухо ответила секретарь.

    Крис появилась через минуту. Мы идем в переговорку, она предлагает кофе, но я прошу стакан воды. Она выходит, и я на автомате достаю свой телефон и проверяю Facebook. Крис возвращается со стаканом воды и в сопровождении чувака в темной футболке с логотипом GitHub. Она говорит, что очень рада знакомству, и уходит. Чувака зовут Адриан, он разработчик. Мы начинаем разговор. Своими вопросами он производит впечатление человека достаточно опытного. Я чувствую себя довольно комфортно — очевидно, что в технологическом плане я превосхожу его, так что беспокоиться мне явно не о чем.

    — Нам нужен кто-то, кто исправит нашу архитектуру, — резюмирует Адриан через полчаса.

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

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

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

    Он задает мне непростой вопрос:

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

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

    — Пожалуй, недели хватит для завершения всех дел.

    Я говорю то, что должен сказать, хотя сейчас у меня нет ни проекта, ни работы, ни дохода. Я не могу сказать ему правду — необходимо соблюдать правила игры. Я должен выглядеть востребованным и очень занятым. А с другой стороны, разве обещание завершить все дела за неделю выглядит логичным? Что это за проект такой, над которым я сейчас работаю, что я его мог бы завершить всего-навсего за неделю? Само собой, мы оба понимаем, что это вранье… но понимаем также то, что не можем с этим ничего поделать.

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

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

    — Два года, — отвечает Адриан.

    — Вы создали большинство проектов компании?

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

    Я вижу, с каким уважением Адриан о нем говорит. Еще бы, ведь Тони платит ему деньги.

    — Буду рад познакомиться с ним! — ответил я, и мы завершили разговор.

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

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

    «Сколько может платить работодатель?» — правильный вопрос, который должен задать себе специалист.

    Честно говоря, я думаю, что именно такое мое отношение и было реальной причиной проблем, с которыми я столкнулся на предыдущей работе (да и на нескольких работах до того). Все хотели, чтобы я был хорошим сотрудником, а я хотел заниматься тем, что мне нравится: воплощать собственные идеи с помощью написания кода на Java. Меня уже четыре раза увольняли, а ведь мне всего 29. Пока не очень впечатляющая карьера. Что я делаю не так?

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

    Поначалу каждая новая компания, команда или проект — загадка. Неважно, сколько вопросов вы задаете об их DevOps-процессах, принципах управления и статическом анализе, ведь любой ответ может быть ложью, их выдумкой или все может работать совсем не так, как они это себе представляют. Я никогда не слушаю, что они говорят на первых собеседованиях. Вот на что я обращаю внимание: 1) деньги, которые они мне готовы заплатить; 2) численность команды; 3) должность, которую мне предложат.

    Вопрос денег очевиден: чем больше зарплата, тем лучше. Не только потому, что я жадный и предпочел бы «Мерседес-Бенц», а не «Шевроле», но и потому, что хорошее финансирование означает, что проект ценный и интересный. Рассмотрите это с точки зрения рынка: если они могут заплатить больше, чем другие, у них откуда-то есть деньги.

    Заработная плата — это основной явный показатель важности вашего вклада в рынок.

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

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

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

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

    Большие компании слишком политичны, маленькие — слишком хаотичны.

    А шансы на выживание маленьких компаний довольно малы (так утверждает статистика). Я предпочитаю держаться подальше от проектов, в которых занято меньше 20 технических специалистов.

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

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

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

    Вы когда-либо слышали об эксперименте, который Дидье Дезор с коллегами провел в университете Нанси?2 Они взяли десять одинаковых клеток, в каждую посадили пять или шесть самцов крыс. Чтобы добыть пищу, грызунам нужно было пробраться сквозь маленькое отверстие, через аквариум доплыть до кормушки с пищей, взять немного еды и уплыть обратно, чтобы съесть ее (есть прямо из кормушки было невозможно). К концу эксперимента во всех клетках крысы разделились на две группы — добытчиков и недобытчиков. Добытчики плавали за едой, а недобытчики эту еду у них воровали.

    Чему нас учит эта история? Тому, что вы либо работаете, либо крадете. Крысы не знали о десяти заповедях. Они понятия не имели, что воровство — грех. Похоже, природа не имеет ничего против воровства (для нее это естественное распределение ролей). Точно так же для одних людей работа выступает предпочтительным видом деятельности. Для других более привычно воровство.

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

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

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

    Подавляющее большинство команд в сфере разработки ПО не способны заставить программистов выкладываться по полной. Руководство, особенно на высших уровнях, не понимает разницу между Java и JavaScript. С другой стороны, на более низком уровне сложнее одурачить начальника, притворяясь, будто пишешь код, а на самом деле публикуя в это время новый пост в Facebook. Вот почему чем выше моя позиция, тем лучше. Никто не поймет, что я на самом деле делаю, поэтому я могу делать то, что хочу. Я участвую в проектах, за которые мне платят, но предпочитаю делать это тогда, когда мне хочется и когда это действительно необходимо. А не в девять утра.

    » Более подробно с книгой можно ознакомиться на сайте издательства
    » Оглавление
    » Отрывок

    Для Хаброжителей скидка 25% по купону — Наш код
    Издательский дом «Питер»
    372,54
    Компания
    Поделиться публикацией

    Похожие публикации

    Комментарии 3

      +1
      И вся книга о том, «как работать и не зарабатывать»?
        +1

        В эксперименте с крысами был ещё "автоном" — сам добывал, сам съедал, покусившимся отвешивал.

          0
          Начало статьи:
          Быть программистом может быть интересно и весело, но быть разработчиком программного обеспечения — это сущий ад. Компьютеры логичны, люди — нет.

          Глава 1:
          Быть программистом может быть интересно и весело, но быть разработчиком программного обеспечения — это сущий ад. Компьютеры логичны, люди — нет.

          Найдите 1 отличие.

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

          Самое читаемое