Текст книги "Программист-фанатик"
Автор книги: Чед Фаулер
Жанр:
Программирование
сообщить о нарушении
Текущая страница: 8 (всего у книги 17 страниц) [доступный отрывок для чтения: 8 страниц]
Совет 19
Прямо сейчас
Представь, что ты принимаешь участие в конкурсе с призом 100 000 долларов наличными. Приз достается команде, успевшей первой создать программу для получения новых неоплаченных счетов. Твоя рабочая группа подала заявку на участие. Работа должна быть выполнена за выходные. Код должен обеспечить реализацию минимального набора указанных функциональных возможностей, и его следует полностью протестировать. Вы приступаете в субботу утром. Выигрывает команда, которая до утра понедельника первой предоставит готовое приложение. Если до этого момента ни одна из команд не закончит работу, приз достанется тому, кто реализует максимальное количество функциональных возможностей.
Что можно сделать прямо сейчас?
Ты уверенно читаешь технические требования. Глядя на перечень функциональных возможностей системы, ты понимаешь, что масштабом и параметрами она напоминает те многочисленные системы, с которыми тебе приходилось работать раньше. И в то время как целью группы является завершение проекта к середине воскресенья, ты начинаешь задавать себе вопрос: каким образом приложение, по масштабу аналогичное тем, над которыми ты работал в офисе неделями, может быть закончено за одни выходные?
Но как только наступает время приняться за работу и ты принимаешься писать код, становится понятно, что группа достигнет поставленной цели. Все в ударе, реализуют одну функциональную возможность за другой, исправляют ошибки, за доли секунды принимают проектные решения, и работа оказывается выполненной. Это потрясающее ощущение. В офисе во время анализа проектов и планерок ты часто предавался мечтам о том, как здорово было бы с небольшой командой оторваться от бюрократической среды и сотворить новое приложение в рекордные сроки.
Об этом мечтают многие. Мы знаем, что рабочий процесс нас тормозит. И не только он. Скорость окружения также негативно влияет на сроки выполнения.
Закон Паркинсона гласит: «Работа заполняет все отпущенное на нее время». Печально то, что даже не желающие подчиняться этому закону могут попасть в ловушку, особенно при наличии задач, решать которые нет никакого желания.
В случае соревнования, длящегося всего пару дней, у тебя попросту нет времени на откладывание задач. Ты не можешь задержаться с принятием решения и не задерживаешься. Ты не можешь избежать скучной работы и знаешь, что все нужно сделать настолько быстро, что ни одна задача не успеет тебе надоесть слишком сильно.
Закон Паркинсона является результатом наблюдений, а не неизбежным приговором. Ощущения неотложности, даже надуманного, достаточно, чтобы легко удвоить, а то и утроить твою продуктивность. Попробуй и сам убедишься. Ты можешь справиться с делом быстрее. Можешь сделать все прямо сейчас. Можешь закончить работу, а не обсуждать, как ее закончить.
Восприняв рабочий процесс не как пребывание в тюремной камере, а как соревнование, ты сможешь завершить его куда быстрее. Создавай движение. Становись тем, кто толкает вперед. Не расслабляйся.
Всегда будь тем, кто спрашивает: «А что мы можем сделать прямо сейчас?»
Действуй!
1. Посмотри на список стоящих перед тобой задач. Найди задачи, попавшие туда в незапамятные времена, проекты, которые уже начали покрываться плесенью, или те, выполнение которых несколько застопорилось – из-за бюрократии или неоправданно больших затрат на анализ и проектирование.
Выбери задачу, решением которой ты можешь заняться в рабочий перерыв, в то время, которое обычно тратится на просмотр сайтов в интернете, проверку почты или долгие перекусы. Преврати многомесячный проект в задачу, которую нужно решить меньше чем за неделю.
Совет 20
Читай чужие мысли
Довелось мне работать с парнем по имени Рао. Он родился в Южной Индии, в штате Андхра-Прадеш, но жил в США и работал в нашей фирме. Рао мог превратить в код все, что вы попросите. К нему обращались, когда требовалось низкоуровневое программирование систем. Если речь заходила о высокоуровневом программировании приложений, он тоже мог удовлетворить практически любой запрос.
Но по-настоящему уникальным Рао был потому, что он делал все до того, как его об этом просили. Он обладал необъяснимой способностью предугадывать, какую задачу ему могут поручить, и решал ее еще до того, как начальству в голову приходила подобная идея. Это напоминало магию. Кажется, в какой-то момент я обвинил его в обмане, но было непонятно, как он это делает. Я сказал: «Рао, я решил поменять способ инкапсуляции контроллера в среде разработки приложений. Достаточно внести небольшие изменения, и мы сможем использовать эту среду не только для веб-приложений. Что ты по этому поводу думаешь?»
«Я уже сделал это на той неделе, – ответил он. – Это зафиксировано в системе управления версиями. Посмотрите». И такие вещи происходили с Рао постоянно. Это случалось настолько часто, что объяснить подобные совпадения можно было, только представив, что Рао проделывает все мыслимые изменения каждого фрагмента кода, поддержкой которого занималась наша группа.
В это время я руководил группой, отвечающей за архитектуру приложений. Кроме всего прочего, мы занимались созданием и поддержкой программных сред, на основе которых работали выпускаемые нашей компанией приложения. Мои коллеги тратили много времени на обсуждение способов улучшения разработки программного обеспечения. Много говорилось и о роли, которую в этих улучшениях играли базовые компоненты инфраструктуры.
Именно здесь скрывалась основа магических трюков Рао. Он практически не принимал участия в этих разговорах, но очень внимательно слушал. И в отличие от настоящих фокусников он поделился со мной своим секретом. Он выполнял только те пожелания, которые я озвучивал. Но пожелания озвучивались настолько неявно, что даже я сам этого не осознавал.
Например, стоя в очереди за кофе, я мог рассуждать о том, как здорово было бы реализовать в коде новые более гибкие функциональные возможности. И если подобные рассуждения звучали достаточно часто или я высказывался достаточно убедительно, несмотря на отсутствие этих задач в списке текущих дел нашей группы, Рао заполнял перерывы в работе, проверяя целесообразность реализации моих пожеланий. И если это можно было легко (и дешево) внедрить, писал код и проверял его.
Хороший трюк с телепатией приводит к тому, что люди начинают от тебя зависеть.
Телепатия применима не только к руководству, но и к заказчикам. Наводящая информация дает возможность добавлять функциональные возможности, о которых заказчик только собирается попросить или о которых он попросил бы, если бы считал, что это возможно. Всегда делая, что просят заказчики и когда они это просят, ты доставляешь им удовольствие. А сделав больше или раньше, чем тебя просят, ты восхитишь их – разумеется, если способность читать мысли тебя не подведет.
Трюк с чтением мыслей не совсем безопасен. Без страховки на этот канат лучше не ступать. Вот перечень основных рисков (с вариантами сглаживания отрицательных последствий):
♦ Делая работу, которую тебя никто не просил делать, ты тратишь деньги фирмы. А что, если ты ошибаешься? Начинай с малого. Реализуй свои догадки только в перерывах, чтобы это никак не отражалось на выполнении твоих рабочих обязанностей. Если у тебя есть к этому склонность, делай дополнительную работу в свободное время.
♦ Каждое добавление кода в систему рискует сделать ее менее отказоустойчивой. Избегай работы, которая может повлиять на архитектуру системы или каким-то образом ограничить ее функциональность. Если влияние изменений достаточно велико, нужно принимать бизнес-решение. Разработчики практически никогда не имеют полномочий самостоятельно решать подобные вопросы.
♦ Модификация некой функциональной возможности в соответствии с пожеланиями заказчика может отрицательно сказаться на функциональности приложения в целом или дать другие нежелательные последствия. Когда дело доходит до пользовательского интерфейса, с догадками лучше быть крайне осторожным.
Руководство людьми и проектами – трудная и интересная работа. Люди, обеспечивающие бесперебойную работу над проектом без многочисленных указаний сверху, высоко ценятся постоянно занятыми начальниками и заказчиками. Правильно применяемый трюк с чтением мыслей приведет к тому, что люди начнут от тебя зависеть – отличный рецепт карьеры, направление которой ты выбираешь сам. Эту способность стоит осваивать и развивать.
Действуй!
1. Первый рецензент этой книги Карл Брофи предлагает тебе записывать свои соображения по поводу возможных просьб руководства и заказчиков для твоего следующего проекта или поддерживаемой системы. Будь изобретательным. Попытайся посмотреть на систему с их точки зрения. Составляя список неочевидных функциональных возможностей, которые могут потребоваться, подумай о способах их максимально эффективной реализации. Вспомни о граничных ситуациях, о которых пользователи могут сразу не вспомнить.
Столкнувшись с проектом или с заявками на расширение, подсчитай число своих угадываний. Какое количество записанных тобой функциональных возможностей действительно попросили реализовать? Когда о них зашла речь, смог ли ты воспользоваться идеями, рожденными во время мозгового штурма?
Совет 21
Ежедневные победы
Нам всем нравится верить в силу собственных знаний, в то, что мы хорошие программисты, способные легко обеспечить решение задач и достичь высот производительности. Немногие счастливчики (коим, я настаиваю, сказочно повезло) действительно добиваются успеха при помощи подобной стратегии.
А вот извлечь выгоду из планирования и мониторинга может кто угодно. Здравый смысл подсказывает, что для попадания в список лучших достаточно превзойти ожидания руководства. Превышение ожидания работодателя является вполне достойной целью, однако на удивление немногие из нас знают, как достичь этой цели.
Как всегда бывает с подобными задачами, в выдающегося исполнителя проще всего превратиться при наличии конкретной запланированной работы. Когда ты в последний раз выходил за пределы своих должностных обязанностей? Твой начальник об этом знал? Как сделать более заметными проявления подобного поведения?
Мой друг и коллега Джеймс Макмурри[13]13
Его персональный сайт http://www.semanticnoise.com
[Закрыть] на заре нашей с ним карьеры поделился разработанной им системой, которая гарантировала хороший результат работы. Система поразила меня своей глубиной, особенно если учесть небольшой опыт ее создателя (возможно, он учел уроки, полученные от родителей), и я пользуюсь ею до сих пор. Не уведомляя руководство, он фиксирует хиты дня. Его задача – каждый день делать нечто такое, о чем можно было бы с гордостью доложить наверх. Это может быть пришедшая ему в голову идея или некое действие, могущее улучшить работу его отдела (см. Одна неделя хитов).
Простое обозначение целей (на день, на неделю, на сколько можешь) и фиксация достигнутых результатов позволит быстро поменять твое поведение. Необходимость составления списка хитов естественным образом заставляет оценить свою деятельность и расставить приоритеты в соответствии с коммерческой ценностью отдельных рабочих заданий.
Одна неделя хитов
Понедельник. – Автоматизировать сборку!
Вторник. – Написать тесты для синтаксического разбора кода.
Среда. – Разобраться с инструментами объектно-реляционного проецирования, чтобы можно было больше вообще не писать SQL-запросы.
Четверг. – Написать сценарий развертывания веб-приложения.
Пятница. – Избавить проект от предупреждений компилятора.
Достаточная частота фиксации хитов гарантирует отсутствие простоев: человек, который должен создавать хит каждый день, уже просто не сможет тратить две недели на совершенствование результатов своего труда. Такой тип мышления и работы становится привычкой. И подобно разработчикам, испытывающим энтузиазм при виде зеленой полосы в интерфейсе тестирования модулей, ты ощутишь внутреннюю потребность в каждодневных достижениях. Тебе не придется слишком заботиться о мониторинге состояния работ, так как функционирование на данном уровне больше напоминает нервный тик, чем выполнение заданий из списка, созданного в приложении Microsoft Project.
Действуй!
1. Выбери для себя полчаса, сядь с карандашом и бумагой в тихом месте, где никто тебе не помешает. Вспомни о небольших проблемах, с которыми твоя группа сталкивается каждый день. Перечисли их на бумаге. Что это за досадные мелочи, заставляющие группу каждый день впустую тратить несколько минут, с которыми никто не может или не хочет ничего сделать?
Какие выполняемые вручную задания текущего проекта можно было бы автоматизировать? Перечисли их. Как насчет сборки или развертывания? Есть ли там аспекты, которые нужно привести в порядок? Как уменьшить количество сбоев при сборке? Запиши все идеи, пришедшие тебе в голову.
Выдели на подобные раздумья двадцать минут. Запиши все идеи, как хорошие, так и плохие. Не отвлекайся от процесса, пока двадцать минут не истекут. Когда список будет готов, на новом листе выпиши пять наиболее раздражающих тебя позиций. На следующей неделе в понедельник сделай что-нибудь с первым пунктом получившегося списка. Во вторник проработай второй пункт. В среду – третий и т. д.
Совет 22
Помни, на кого работаешь
Легко сказать: «Позаботься о том, чтобы твои цели и твоя работа совпадали с целями нанявшей тебя на работу компании». Легко сказать, но трудно сделать, особенно если ты программист и над тобой столько организационных слоев, что ты с трудом представляешь себе работу самой компании. В начале моей карьеры мне довелось попасть в группу разработчиков программного обеспечения в крупную фирму, занимающуюся доставкой грузов. Там существовала настолько огромная иерархическая структура, что я на своем уровне ни разу не столкнулся ни с чем, что позволило бы мне проникнуть в суть бизнеса доставки грузов. Вспоминаю, как во время посещения ежеквартальных общих собраний члены нашей группы чувствовали себя совершенно разобщенными и чужими. «Что за достижение мы празднуем? Что значат все эти показатели?»
Конечно, на том этапе своей карьеры я больше интересовался построением элегантных систем и исследованием программ с открытым исходным кодом, чем сутью бизнеса по доставке грузов. (Должен признать, что и сейчас мои приоритеты не изменились) Но если бы у меня тогда возникло желание согласовать свою работу с основными целями фирмы, не уверен, что знал бы, с чего начинать.
Итак, у нас есть прекрасный постулат о том, что мы должны согласовывать свою деятельность с целями компании, чтобы гарантированно влиять на конечный результат работы и все такое. Но по правде говоря, многие из нас со своего уровня просто не видят, как этого добиться. За деревьями леса не видать.
Возможно, это не наша вина. Возможно, мы хотим от себя слишком многого. Возможно, идея непосредственно влиять на конечный результат работы фирмы напоминает попытку вскипятить океан. Итак, нам требуется более детальное представление, разбивающее океан бизнеса на отдельные доступные для кипячения лужицы.
Начинать имеет смысл с самой очевидной лужи – своей рабочей группы. Скорее всего, она достаточно мала и специализированна, чтобы ты смог составить представление о ее сущности. Скорее всего, ты понимаешь проблемы, с которыми она сталкивается. Ты знаешь, над улучшением каких аспектов она работает, будь это производительность, доход, сокращение ошибок или что-то еще. Информацию, в которой ты не уверен, можно уточнить у своего непосредственного начальства.
В конечном счете в хорошо структурированной среде цели руководства являются целями группы. Реши проблему своего начальника и ты решишь проблему группы. Кроме того, если ваш начальник придерживается аналогичного подхода, то проблемы, которые ты решаешь для него, на самом деле являются проблемами уже его начальства. И так далее, вплоть до самых верхов фирмы – генерального директора, акционеров или даже заказчиков.
Делая свою небольшую часть работы, ты вносишь вклад в достижение целей фирмы. Это позволяет почувствовать свое предназначение. И придает твоей работе смысл.
Возможно, у тебя не возникнет желания следовать подобной стратегии. «Я не собираюсь делать за него работу». Или «он просто поставит мои результаты себе в заслугу!»
Ну да. Примерно так это и работает. Том ДеМарко и Тимоти Листер пишут в книге «Человеческий фактор. Успешные проекты и команды» (Peopleware: Productive Projects and Teams), что роль хорошего начальника – это не подмена подчиненных, не знание, как выполнить работу всей группы, не приход на помощь в трудных ситуациях. Хороший начальник расставляет подчиненным приоритеты, следит за тем, чтобы у группы было все, что требуется для выполнения рабочих обязанностей, поддерживает мотивацию и продуктивность и в конечном счете обеспечивает нужный результат. Хорошая работа группы означает хорошую работу ее начальника.
Успех твоего начальника – это и твой успех тоже.
Если работа твоего начальника – знать и расставлять приоритеты, а не лично выполнять все задания, то твоя работа состоит именно в выполнении всех заданий. Ты делаешь не работу начальника, а свою работу.
Если тебя волнует, кому в заслугу поставят выполненную тобой работу, вспомни, что твоя карьера (по крайней мере в этой фирме) зависит от начальника. В большинстве организаций за аттестацию сотрудников, уровень зарплаты, бонусы и продвижение по карьерной лестнице отвечает непосредственное руководство. Так что признание, которого ты ждешь, в конечном счете превращается в наличные именно начальством.
Помни, на кого ты работаешь. Тогда ты не только будешь действовать заодно с целями бизнеса, но и бизнес начнет отвечать твоим нуждам. Если ты собираешься достичь высот в исполнении своих служебных обязанностей, это даст тебе уверенность, что ты движешься в верном направлении.
Действуй!
1. Запланируй встречу со своим начальником. Ведь ты заинтересован в том, чтобы понять цели, которые начальник ставит перед твоей группой на следующий месяц, квартал и год. Узнай, как ты можешь помочь в их достижении. После встречи подумай, как твоя ежедневная работа согласуется с целями группы. Смотри на все через призму этих целей. На их основе определи приоритеты различных рабочих задач.
Совет 23
Будь на своем месте
Как руководитель могу рассказать, что больше всего меня раздражает общение с сотрудниками, стремящимися на следующую ступеньку карьерной лестницы. Ты знаешь таких парней: оказавшись во время обеда за твоим столом, он обязательно начнет разговор о том, какое повышение получил тот или иной сотрудник. Он всегда готов к распространению офисных сплетен и придерживается корпоративных политик как сюжетной линии своей любимой мыльной оперы. Он жалуется на профессиональную несостоятельность руководства и с горечью несет бремя служебных обязанностей, будучи полностью уверенным, что справился бы с работой начальника куда лучше, чем сам начальник. Начальство просто слишком некомпетентно, чтобы оценить его потенциал.
Он считает ниже своего достоинства браться за многие задания. Избегает их, если это возможно, а если уклониться не получается, выполняет неохотно (и медленно). Он тщательно выбирает работу, которая, как ему кажется, пусть даже на подсознательном уровне, соответствует его уровню и может приблизить столь желанное ему повышение.
Будь честолюбив, но не показывай этого.
Поскольку мысленно подобные сотрудники трудятся на более высокой должности, со своими текущими обязанностями они справляются крайне посредственно. Я сам был в подобной ситуации много лет назад. Ненавижу стричь газоны. Это занятие заставляет тебя чесаться и потеть. Хуже всего, что оно не дает тебе заняться тем, чем ты хочешь. Для стрижки газонов обычно кого-то нанимают. Вот таким наемным парнем и был я в студенческие годы. Что я делал, когда нужно было стричь газон? Спешил. Делал все небрежно. Все время думал о том, как я закончу эту нудную работу и займусь куда более приятными вещами. Словом, результат моего труда взгляд не радовал.
К счастью, в данном случае никто не наблюдал за тем, что я делаю, и не оценивал меня (хотя моя жена крайне недовольна состоянием газона перед нашим домом). Но вид газона после того, как я закончил с ним возиться, это моя и только моя проблема. Никто не вынудит меня всю жизнь работать «простым газонокосильщиком» из-за качества моей работы. А вот в сфере информационных технологий подобное поведение может привести к карьерной катастрофе.
Вернемся к парню, описанному в начале этого раздела. Как, с твоей точки зрения, будет смотреть на него руководство? Поймет ли начальник, что недооценивал его гениальность и такой бриллиант нуждается в продвижении? Дадут ли ему повышение, просто чтобы сделать его счастливее?
Разумеется, нет. Он – посредственный исполнитель с плохими психологическими установками. Так что даже если он и обладает высоким потенциалом, он его никак не демонстрирует. Его потенциал не приносит фирме дохода. Акционеры не будут держаться за свои инвестиции, если их ожидания не оправдаются. Более того, такая позиция вызовет у руководства желание прекратить вкладываться в подобного сотрудника.
Именно так видит ситуацию начальство. Тут я, разумеется, должен признать свою вину. До некоторой степени я сам проявлял описанные черты. С той стороны все выглядит не лучше. Ты все время чего-то хочешь. Это стремление не дает тебе почувствовать себя довольным. Проснувшись утром, ты должен тащиться на «проклятую работу», где никто не подозревает о твоих гениальных способностях. С раздражением ты несешь бремя служебных обязанностей, продумывая стратегию продвижения по карьерной лестнице. Ты фантазируешь, как бы ты поступил на месте своего начальника в ситуации, когда тот допустил ошибку, уверенный, что вышел бы из положения куда лучше. Ты откладываешь свою жизнь в трудовом коллективе до тех времен, когда сможешь работать на должности, которой заслуживаешь.
Здесь есть один секрет: это чувство не покинет тебя никогда. Когда ты наконец получишь желанное повышение, о котором столько мечтал, то быстро ощутишь усталость и поймешь, что это вовсе не та работа, для которой ты предназначен, – твое место еще выше. И все повторится. Я еще не достиг вершины, но сильно подозреваю, что существуй такая должность и займи я ее, я оглянулся бы назад и понял, что гонялся за призраком. Все мои карьерные устремления прошли впустую.
Но разве у людей не должно быть честолюбия? Разве появились бы компании Microsoft или General Electric, будь их основатели лишены честолюбия и не имей они далеко идущих целей?
Разумеется, это нужное качество. Я не защищаю апатию и бездеятельность. Наличие целей и жажда преуспеть – это здорово. Но вспомни обиженного парня, с описания которого начался этот раздел. Думаешь, ему суждено преуспеть? Это кажется парадоксальным, но при концентрации на настоящем продвижение к цели осуществляется куда продуктивнее, чем при концентрации на самой цели.
Сначала это сложно понять. Отказ от насущного стремления к преуспеванию звучит как аскетическая недосягаемая цель. Однако со временем ты поймешь прагматичность такого подхода. Концентрация на настоящем позволяет получать удовольствия от маленьких побед в ежедневной рабочей рутине: чувство хорошо сделанной работы, чувство, что тебя привлекают как эксперта по важным экономическим проблемам, чувство принадлежности к сплоченному рабочему коллективу. Все это пройдет мимо тебя, если ты будешь мысленно витать в облаках. Ты до бесконечности будешь ждать великих свершений, игнорируя повседневные мелочи, которые и придают смысл твоим походам на работу.
Не только ты сам почувствуешь себя лучше, это почувствуют и окружающие. Твои коллеги, начальство и клиенты. Это отразится на твоей работе. Как бы парадоксально ни выглядел этот постулат, но избавившись от желания преуспеть, ты станешь куда более способным к успеху.
Ты вплотную работаешь с клиентами. Рядом с тобой находятся руководители и ответственные лица, формирующие твою карьеру в краткосрочной, а возможно, и в долгосрочной перспективе. Разработчики из Филиппин или Индии лишены подобного преимущества. Поэтому будь там, где ты есть.
Действуй!
1. Забудь на неделю о своих карьерных устремлениях. Составь список планов, связанных с текущей работой. Думай не о том, на какое место ты хочешь попасть после повышения, а о задачах, которыми придется заняться, завершив текущие дела. Что выдающегося ты можешь сделать на текущей должности? Напиши стратегический и тактический планы. В течение недели используй разработанную тактику для достижения долгосрочной цели – «завершить» выбранную работу.
Сосредоточь вокруг этой цели разговоры с коллегами во время обеденных перерывов. Избегай бесед о продвижении по службе и офисной политике. Избегай сплетен.
В конце недели подведи итоги своим попыткам достичь заданных целей. Сколько времени займет завершение всех заданий, которые тебе нужно выполнить в текущей должности? Как понять, что все закончено? Распланируй следующую неделю и повтори всю процедуру.


























