Как пасти котов. Наставление для программистов, руководящих другими программистами
Шрифт:
• Поощрение связности объектов. Не следует воспринимать объекты как контейнеры для размещения совокупности процедур – скорее это органы, выполняющие конкретную функцию. Как известно, сердце не пытается дышать, а легкие не качают кровь.
• Ограничение взаимозависимости объектов. В отсутствие серьезных аргументов в пользу иной точки зрения взаимозависимость приносит одни неприятности, превращая сопровождение в сплошной кошмар [69] . Чтобы однажды сделанные взаимозависимыми объекты превратить в независимые, требуются дополнительные временные и финансовые ресурсы.
69
Что такое
Со временем, по мере того как вы будете нарабатывать опыт руководства проектами, приведенный список можно будет расширить. Наилучшие методики деятельности в области разработки программных средств обнаруживаются и утверждаются постепенно. Не сомневаюсь в том, что у вас есть несколько любимых авторов, чьи труды по мере обучения серьезно помогли. Если так, не изменяйте им. На тот случай, если в вашей личной библиотеке не хватает полезных книг, я составил библиографический список. Ведь учиться у предшественников и современников совершенно необходимо. Сегодня в качестве руководства вы выбрали мою книгу. Я стремлюсь к тому, чтобы поведать вам суть различных принципов разработки и объяснить причины, по которым вы как технический лидер должны пропагандировать эти принципы среди своих подчиненных.
Даже самая шикарная библиотека не гарантирует успешной деятельности в роли технического лидера. Ее наличие – это лишь одно из многочисленных условий достижения профессиональных высот. Ничто не мешает вам выстроить на полках увесистые тома, пытаясь тем самым впечатлить себя и окружающих. Но от этого вы не станете лучше как технический руководитель. Обширная библиотека должна быть в ваших мозгах – лишь при таком условии вы сможете взвешенно организовать процесс проектирования. Взвешенность приходит с опытом, являясь следствием осмысления ошибок. Вот почему каждый раз, когда я совершал какую-нибудь ошибку, мой отец говорил «мотай на ус». Конечно, некоторые ошибки не проходили бесследно, однако понимание того, что это в порядке вещей, меня несколько успокаивало.
Обширная библиотека должна быть в ваших мозгах – лишь при таком условии вы сможете взвешенно организовать процесс проектирования.
А вы боитесь совершать ошибки? Не стоит питать иллюзий – ошибок в суждениях в процессе руководства подчиненными вам не избежать. Ошибки допускаются регулярно, и иногда за них приходится отвечать по полной программе – в особенности когда вы не успеваете к контрольным срокам. Впрочем, с опытом вы усовершенствуете свои навыки, и, будем надеяться, проблемы с соблюдением сроков отпадут – ох, как же вас тогда зауважают сотрудники других отделов! На входе в офис вас будут встречать восторженные поклонники и петь вам гимны. Ну, может быть, я немножко преувеличиваю, но в одном нисколько не сомневаюсь – если вам удастся повысить продуктивность сотрудников своей рабочей группы, ваши уверенность в себе и преданность работе обязательно поднимутся до заоблачных высот. Одержимость работой – вещь заразная, и вы должны всеми силами стараться распространить ее на всех своих коллег.
Теперь вернемся к конкретике: есть ли у меня какое-то универсальное решение? Есть, и я о нем уже говорил: сосредоточьтесь и лидируйте. О том, как сосредоточиться, мы рассуждаем в этой главе. Что же касается лидерства – думайте сами. В конце концов, роль лидера в вашей компании по праву принадлежит вам – так что играйте ее убедительно. Как говорил Шекспир, «весь мир театр, и люди в нем актеры».
Знание – это лишь исходное условие; по мере накопления опыта вы должны стремиться к принятию взвешенных решений, последовательно культивировать качества лидера.
Грег слыл отъявленным неряхой. И дело не в том, как он ел,
Мы только что приступили к работе над новой программой последовательной связи, и наш отдел продаж требовал поставить ее как можно быстрее. В те времена такого понятия, как отдел тестирования, еще не существовало – штат сотрудников проекта ограничивался кодировщиками, пытавшимися всеми силами успеть к срокам, установленным отделом продаж. Грег в нашей компании трудился уже довольно долго и, надо сказать, весьма успешно, поэтому к постоянному давлению привык. По крайней мере, мне так казалось. У него даже была репутация ценного сотрудника – в основном потому, что он единственный из нас всех умудрялся сопровождать код старых приложений, которые уже не продавались.
В отделе все стояли на ушах. Платформа Windows 3.0 только что появилась, и наши старания по части разработки приложений сочетались с попытками постичь идиосинкразическую природу интерфейса прикладного программирования Windows. И, между прочим, у нас это неплохо получалось. В нашем отделе у каждого программиста было собственное помещение, и в этих помещениях даже были двери, которые, как это ни странно, закрывались. Это и погубило Грега.
Однажды, показывая заказчикам условия, в которых мы работали, директор с вице-президентом появились в отделе разработки. Познакомившись с парой инженеров, группа направилась в кабинет Грега. Что же они увидели, открыв дверь? Грег мирно спал за столом, водрузив на него ноги. Повсюду были разбросаны пластиковые пакеты из-под еды, иногда с древними остатками самой еды, да и вообще комната представляла собой весьма унылое зрелище и вряд ли могла кому-то понравиться. Меня в тот момент там не было, поэтому я говорю с чужих слов.
А рассказали мне много интересного. Вице-президент по продажам настоял на том, чтобы уволить Грега немедленно. Директор согласился. Выбора у меня не было. Вскорости я сообщил Грегу неутешительные новости, после чего был вынужден наблюдать жалкую сцену мольбы о пощаде и последнем шансе. Я ему сказал, что это не в моей власти, что мне ужасно жаль, и еще до обеда его рабочее место очистили от мусора, а его самого выставили за дверь.
Какова мораль? Очевидно, она в том, чтобы не спать на работе. Но это еще не все. К сожалению, некоторые программисты не выдерживают нагрузки. Мы должны работать в высоком темпе, а с теми, кто за ним не поспевает, приходится прощаться. Это жестокая реальность. Надеюсь, у Грега все нормально, – ведь с тех пор я его ни разу не видел.
Кодовая полиция
Переместимся из XVI в XX век – как говаривал Элиотт, «Это один из вариантов конца света/Без треска, но с воем» [70] . Не стоит делать программы по этому принципу. Для того чтобы избежать этого, вам придется играть роль кодового полицейского. Если выражаться более знакомыми терминами, вам предстоит проводить регулярные критические обзоры кода, направленные на проверку соответствия архитектурной базе и принципам проектирования. Вспомним принцип, который я сформулировал в главе 2, – без регулярных проверок нельзя рассчитывать на хорошие результаты. Именно поэтому критические обзоры кода так важны.
70
T.S. Elliot, Collected Poems 1909–1962 (New York: Harcourt Brace Jovanovich, 1971), p. 82.