Идеальный программист. Как стать профессионалом разработки ПО

Мартин Роберт С.

11

Под давлением

 

 

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

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

А если врач потеет и ругается? Швыряет инструменты? Обвиняет руководство в нереалистичных требованиях и постоянно жалуется на нехватку времени? Как он должен вести себя – как профессионал или как типичный разработчик?

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

В 1988 году я работал в Clear Communications. Это была начинающая фирма, которая так никогда и не «поднялась». Мы прошли через первый цикл финансирования, потом второй и третий.

Исходная идея выглядела неплохо, но проектирование так и осталось на бумаге. Сначала продукт состоял из программных и аппаратных компонентов. Затем он стал чисто программным. Программная платформа изменилась – с PC мы перешли на Sparc. Заказчики сменили требования: с высокопроизводительных рабочих станций они переключились на низкопроизводительные.

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

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

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

Работая по 80 часов в неделю, можно было стать героем. Слепив на скорую руку демо-версию для заказчика, можно было стать героем. Если вы прилагали достаточно усилий, вас могли повысить. А если нет – вас увольняли. Это была начинающая фирма и здесь полагалось выкладываться «на полную». И в 1988 году, с моим 20-летним опытом, я «купился» на это.

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

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

И у меня в голове что-то щелкнуло. Я начал смеяться. Я смеялся над своими переживаниями. Я смеялся над стрессом. Я смеялся над человеком в зеркале; над несчастным болваном, который отравляет жизнь себе и другим во имя – чего?

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

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

 

Как избежать давления

 

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

 

Обязательства

Как мы узнали в главе 10, важно избегать принятия обязательств на сроки, в соблюдении которых вы не уверены. Бизнес всегда будет стараться добиться от вас таких обязательств, потому что он хочет полностью исключить риск. А мы должны позаботиться о том, чтобы риски объективно оценивались и представлялись бизнесу таким образом, чтобы тот мог правильно управлять ими. Принятие нереалистичных обязательств противоречит этой цели и оказывает плохую услугу как бизнесу, так и нам самим.

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

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

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

 

Как сохранить чистоту

Чтобы двигаться быстро и не нарушать сроков, в коде необходимо сохранять чистоту. Профессионал не поддается искушению устроить грязь в коде, чтобы быстро двигаться вперед. Грязно – всегда значит медленно!

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

 

Дисциплина в кризисных ситуациях

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

Если вы следуете методологии разработки через тестирование (TDD) в обычное время, но отказываетесь от нее во время кризиса, значит вы не верите в полезность TDD. Если ваш код остается чистым в обычное время, а в кризис вы разводите в нем грязь, значит вы не верите, что грязь замедляет вашу работу. Если вы используете парное программирование во время кризиса, но не в обычной ситуации, значит вы полагаете, что парное программирование эффективнее индивидуального.

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

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

 

Как вести себя в тяжелой ситуации

 

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

 

Без паники

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

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

 

Взаимодействие

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

 

Доверяйте своим методам

 

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

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

 

Помощь

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

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

 

Заключение

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