- PVSM.RU - https://www.pvsm.ru -
Статья-конспект по книге Роберта Мартина «Идеальный программист» [1]. После прочтения книги у меня поменялось отношение к программистической жизни. В книге рассматривается процесс написания кода, сам код, отношение к задачам, TDD и много других полезностей. Читать нужно разработчикам и менеджерам проектов. Частично применимо к дизайнерам.
Непрофессионалы не берут ответственности за свою работу. Они делегируют эту ответственность выше по иерархии: ты начальник, — ты и отвечаешь. Если непрофессионал обкакался, — экскременты приходится убирать работодателю. Профессионал чистит за собой сам. Что ещё делают профессионалы и не делают дилетанты?
Рабам нельзя говорить «Нет», а наёмным работникам можно. Если же вы профессионал, — это ваша обязанность. Когда руководитель ставит нереальный срок, ваша обязанность сказать «нет». Если вам предлагают быстрое, но архитектурно слабое решение, ваша обязанность сказать «нет». Когда вам предлагают работать по ночам, ваша обязанность сказать «нет».
Самое ужасное, что можно сказать — это сказать, что «вы постараетесь». Нет ничего хуже. Отвечая так вы не выполняете свою работу, а ваша работа заключается в том, чтобы сказать: «нет, это невозможно». Вы можете пытаться избежать неприятных переговоров, но это просто малодушие:
— Нужно сделать поиск туров к пятнице.
— Это невозможно, на разработку и отладку поиска нужно две недели.
— Нам нужно показать клиенту в пятницу. Давай постараемся.
— Хорошо, я постараюсь.
Вы избежали конфликтной ситуации сегодня, но спровоцировали взрыв в пятницу. Это может привести к ссоре с клиентом и, в конце концов, к потере заказчика. Стойте на своём: невозможно — значит невозможно.
Фразы «я попробую», «я постараюсь, «я попытаюсь» нужно совсем исключить из своей лексики и не принимать такие ответы ни от кого другого. Если вам говорят такие фразы, — уточняйте и настаивайте на прямом ответе. «Я попытаюсь» — означает, что вы приложите дополнительные усилия для того, чтобы выполнить задачу. А какие это усилия? Неужели вы работали раньше не в полную силу? Или теперь вы готовы работать круглосуточно? Или вы взвалите это на плечи коллектива? Если у вас нет резервов энергии, нового плана и не собираетесь изменять своё поведение, — значит вы просто врёте. Не надо пытаться.
Один мой хороший, но неопытный друг встречался с клиентом по сайту и пригласил меня на переговоры. Пришёл мужчина и начал рассказывать о том, какой у него хороший проект, но он уже несколько раз обжигался на непрофессионалах; поэтому нам нужно сделать предварительные макеты. Я знаю о вреде предварительных макетов, а мой друг не знал и как только я собирался открыть рот, — он уже ответил, что «да, хорошо, мы сделаем». Так был сделан первый и единственный шаг к потере клиента. К заданному сроку он не сделал макет, не получил новый заказ и клиент разочаровался.
Обещание можно разделить на три части:
Сказать «да» — это значит, что нужно сказать, что вы что-то сделаете без каких-либо модификаторов. Что это за модификаторы? «Нужно» (мне нужно похудеть), «должен» (мы должны найти новых клиентов), «постараюсь» (я постараюсь уговорить инвестора), «хорошо бы» (хорошо бы сходить в кино), «надеюсь» (надеюсь, мы встретимся на следующей неделе), «давайте» (давайте сделаем аутентификацию к четвергу), «если будет время».
Проследите за своей речью и речью других. Обратите внимание, как часто эти слова встречаются вокруг нас и как часто вы пытаетесь снять с себя ответственность.
Серьёзное обещание говорит о том, что вы выполните конкретное действие. Даже если вы не можете сделать всё, что вас просят, вы можете сделать какую-то конкретную часть из предложенного.
— Сделай, пожалуйста, отчёт в Birt. Это нужно сделать к понедельнику.
— К понедельнику не смогу. Но к этому времени я подготовлю веб-сервисы.
В общем виде серьёзное обещание выглядит так: «Я сделаю то-то к такому-то времени».
Если вы не справились с обещанным, как можно быстрее сообщите об этом тому, кому вы обещали.
Готовность кода — это такое его состояние, когда решено сразу несколько задач:
Программистам много платят, потому что это сложная работа. Нужно сконцентрироваться на работе и, если это сделать не удастся, у вас получится плохой код. Если вы устали, — не пишите код, а лучше немного поспите [5]. Если от вас ушла жена, — не пишите код. Если ваша кошка только что родила семерых сыновей, — не пишите код.
Ночное программирование неприемлемо. Ваш ночной код будет словно бумеранг возвращаться к вам снова и снова на исправление и доработки. Почему так любят ночное программирование? Во-первых, оно позволяет выглядеть героем: «а работал всю ночь написал тонну говнокода». Во-вторых, ночью никто не отвлекает. Но ведь и днём можно организовать всё так, чтобы ничего не отвлекало. Пару раз в неделю я перевожу телефон и мессенджеры в самолётный режим, чтобы можно было спокойно подумать над задачей без отвлечений.
Зона потока — зло. Так программисты называют сверхпроизводительное время, когда удаётся писать-писать-писать код и не хочется ни на что не отвлекаться, а всё продолжать и продолжать. В этом состоянии программист считает себя суперменом, а свой код хорошим.
Проблема в том, что быстро написанный в Зоне код чаще становится причиной ошибок. Вы можете потерять часть общей картины и код будет плохо согласован с остальным частями или бизнесом. Если вы чувствуете, что входите в Зону, предпринимайте осознанные усилия, чтобы выйти из неё. Помогает pomodoro, парное программирование и жена.
Верный признак Зоны, — это когда вы невежливо отвечаете на телефонные звонки и не рады даже хорошим людям.
Творческий кризис можно преодолеть. Он обычно происходит от усталости или от однообразия. Вводите в свою жизнь что-то новое и больше отдыхайте. Читайте книги из разных областей: классическую литературу, естествознание, научную фантастику, Дарью Донцову. Творчество порождает творчество.
Сокращайте время отладки. Это время кажется разработчиком неизбежным, но чем меньше вы сидите за дебаггером, тем больше вы сделаете чего-нибудь действительно полезного. Помогает TDD/TLD и контрактное программирование.
Остановитесь. Программирование — это марафон, а не спринт. Не нужно засиживаться, только потому, что не смогли ещё доделать свою задачу. Ощущение, что «это дерьмо вот-вот заработает» может не покидать вас часами. Дайте голове отдохнуть и чаще используйте поговорку «утро вечера мудренее». Решение может прийти к вам позже по дороге домой, в душе или за завтраком. Позвольте этому случиться.
Есть такой класс людей, которые пытаются уверить до последнего, что всё будет хорошо, хотя, понимают, что к сроку не успеть и это понятно даже ёжику. Из недавней практики: мой друг, фотограф (Ф) и поэт заказал новогоднюю фотозону у парня по имени П. Ф поставил перед П задачу с дэдлайном на три дня раньше реального: 1 декабря. Реально, 4 декабря должны были начаться съёмки в по-новогоднему оформленной студии. Реально, фотозона делалась ещё неделю, в результате чего Ф проклинает П, строит сам, отменяет фотосессии, несчастлив.
Домашнее задание: приведите пример, когда вы облажались со сроками и всех подвели.
Мы будем отставать от графика. Вопрос лишь только, как мы будем это делать. Есть два важнейших момента: раннее обнаружение и прозрачность. Постоянно следите за ходом работы, относительно конечной даты. Делайте прогнозы завершения: оптимистичный, нормальный и пессимистичный. Для каждого сценария поставьте предполагаемые даты и ежедневно обновляйте их. Пусть все члены команды понимают, когда вы реально закончите задачу.
Не нужно надеяться, что вы успеете. Надежда убивает проекты и отношения. Спешить тоже не нужно, потому что самые большие косяки рождаются в спешке. Некоторые руководители предлагают сверхурочную работу. Согласиться на неё можно только если у вас есть резерв личного времени, аврал будет длиться недолго и это действительно поможет делу.
Некоторые разработчики пытаются впарить недоделку за готовый продукт. Получается плохая практика, когда смещается определение готовности и вся команда работает из рук вон плохо: потом переделаем.
Готово — это значит, что успешно пройдены все автоматизированные приёмочные тесты.
Если вы Программист с большой буквы, — помогите другим. Это важная часть профессиональной этики. Ваша работа не настолько важна, чтобы не помогать начинающим. Но это не значит, что вы должны отказаться от личного времени и оказывать помощь всегда и везде. Объявите во всеуслышание, что вы готовы помогать только с 14:00 до 16:00.
Принимать помощь — ещё большее искусство. Если предлагают, будьте признательны и выделите время на это. Если не предлагают, обязательно попросите. Выйдите в общий зал, встаньте на табуреточку, скажите: «мне нужна помощь» и нарисуйте на доске суть вопроса. Не стесняйтесь. Понятно, что многие становятся программистами, потому что им больше нравятся компьютеры, чем люди. Однако, для хорошего разработчика навык общения и приёма-передачи знаний жизненно необходим.
На этом первая часть окончена. Через неделю будет вторая часть, в которой рассмотрим TDD, тренировку, приёмочное тестирование, планирование, уклонение от работы, способы оценки, работу под давлением, работу в группе.
Иллюстрации нарисовал Александр Корнилов [6].
Акция: Сегодня, 11 декабря, у меня день рождения и по этому поводу розыгрыш: кто поздравит с ДР, тот получит электроверсию книжки в ЛС. Акция до 12 декабря включительно.
Автор: navff
Источник [7]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/219337
Ссылки в тексте:
[1] Роберта Мартина «Идеальный программист»: http://www.ozon.ru/context/detail/id/135465064/?partner=navff
[2] sympli: https://sympli.io
[3] мозги: http://www.braintools.ru
[4] раскладка Бирмана: http://ilyabirman.ru/projects/typography-layout/
[5] немного поспите: http://rusak.me/blog/all/daysleep/
[6] Александр Корнилов: https://vk.com/alexander_kudesnik
[7] Источник: https://habrahabr.ru/post/317312/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.