Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

384m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 16. КодерыClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

2.Один, но ему потребуется целая ночь и огромное количество пиццы и кофе.

3.Двадцать. Один будет решать задачу, а остальные девятнадцать отыскивать ошибки в том, что он напортачит.1

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

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

Мартышкин труд

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

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

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

1Думаете, это шутка? У меня есть знакомая, которая меняла лампочки два% жды в своей жизни. В первый раз весь ковер был усыпан битым стеклом. Во втором пришлось вызывать электрика, который заменил весь патрон.

2Мантра программистов, пишущих на Perl.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

Мартышкинm

труд

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

385Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Несмотря на это, такая наглая классификация высвечивает важные факты и подсказывает нам пути для самосовершенствования. Мы рас% смотрим следующие вопросы:

Какие мотивы движут различными типами программистов

Как работать с каждым из этих типов

Как любой программист может усовершенствовать себя

Чему можно у каждого поучиться

Читая описание каждого типа, задайтесь вопросами:

Относитесь ли вы к данному типу программистов? Насколько близ% ко описание соответствует вашему стилю программирования? Ка% кие выводы вы можете сделать, чтобы улучшить свой способ коди% рования?

Многие ли из ваших знакомых относятся к данному типу? Прихо% дится ли вам тесно работать вместе с ними? Нет ли способов улуч% шить ваши отношения?

Нетерпеливый

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

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

Достоинства

«Нетерпеливые» продуктивны – в смысле количества кода. Они пи% шут уйму кода. Они любят изучать новинки и с энтузиазмом – даже со страстью – относятся к программированию. Нетерпеливый лю% бит свою работу и искренне стремится писать хороший код.

Недостатки

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

1Я буду говорить обо всех кодировщиках как о лицах мужского пола только

для того, чтобы было легче читать текст.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

386m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 16. КодерыClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

предварительной умственной работы избавило бы его от многочис% ленных глупых ошибок и многих часов работы по их исправлению.

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

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

Как быть, если вы один из них

Не теряйте энтузиазма; это одно из лучших качеств программиста. Если радость вашей жизни в том, чтобы видеть, как программа ра% ботает, и восхищаться красотой кода, ищите практические пути для достижения этого. Хорошая идея – разрабатывать тесты моду% лей одновременно с кодом. Но обычно все сводится к простому сове% ту: остановись и подумай. Не спеши. Выработай личные правила, которые тебе помогут, вплоть до того, что напиши ДУМАЙ на бу% мажке и приклей ее себе на монитор!

Как работать с такими людьми

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

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

Нетерпеливые выигрывают при надлежащем руководстве ими, спо% собствующем дисциплинированности. Следите, чтобы его время было тщательно расписано в графике (писать план вместо него не нужно).

Кодер (Code Monkey)

Если вам понадобится набрать очень много программистов, скорее всего, вы выберете их из этой категории. (Хотя я бы не рекомендовал это делать; вы будете выбирать их о#очень долго!)

Кодер пишет крепкий, но лишенный вдохновения код. Полу% чив задание, он честно трудится над ним и готов получить сле% дующее. Поскольку они выполняют черную работу, их часто – возможно, несправедливо – называют «пехотой» (grunt pro# grammers).

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

Мартышкинm

труд

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

387Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Молодой Кодер может учиться и развиваться – при наличии времени и наставника, – но ему дают задания, не связанные с риском. Если Ко% дер пожилой, он, вероятно, закоснел и выйдет на пенсию все тем же кодером. Испытывать сожалений он при этом не будет.

Достоинства

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

В отличие от нетерпеливых, Кодеры хорошо рассчитывают время. Они методичны и дотошны.

Недостатки

Кодеры старательны и методичны, но они не проявляют воображе# ния. У них нет изобретательности и интуиции. Кодер будет слепо следовать принятому проекту, не думая о возможных проблемах. Поскольку они не отвечают за проект, то не берут на себя ответст% венность за возникающие проблемы и обычно не проявляют ини% циативы в их изучении и решении.

Научить кодера чему%то новому трудно; ему это неинтересно.

Как быть, если вы один из них

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

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

Как работать с такими людьми

Не смотрите на Кодера свысока, даже если у вас выше техническое мастерство и вы выполняете более ответственную работу. Ободрите его – похвалите код и покажите полезные для работы приемы. Пи% шите продуманный код, чтобы максимально облегчить работу про% граммиста сопровождения (т. е. сопровождающего кодера).