Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.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

 

 

 

Главаm

23. За гранью возможного

 

 

 

 

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

 

 

 

 

 

685Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

2.Считаете ли вы правильным текущий выбор процесса и стиля? Это лучший для данного момента способ разработки?

Если вы не знаете, то как вы производите программное обеспечение? Если ваш способ не самый лучший, какой был бы лучше и почему?

Опасайтесь методов ad hoc. Я видел много организаций, в которых нет установленного способа; один человек создает чистые ОО%проекты, а другой избегает ОО и пишет в структурном стиле. В итоге получается уродливый и непоследовательный код.

3.Признается ли в вашей организации, что существуют другие модели разработки, достойные рассмотрения?

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

Трудно ли будет убедить вашу организацию принять другую модель процесса?

Глава 23. За гранью возможного

Вопросы для размышления

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

Общего больше, чем может показаться вначале. Вот некоторые пере% крывающиеся области:

Программирование игр и веб%приложений можно считать специфи% ческими видами программирования приложений.

Веб%программирование – это вид программирования распределен% ных приложений.

Программирование масштаба предприятия может иметь вид веб%

приложений.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

686m

 

 

 

 

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

 

 

 

 

 

Ответы и обсуждениеClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Системное программирование может осуществляться для встроен% ных платформ.

Численное программирование можно оптимизировать с помощью параллельных и распределенных вычислений.

2. В какой из перечисленных областей труднее всего работать?

Каждый вид программирования выдвигает свой набор проблем, а каж% дая отдельная программа имеет индивидуальные сложности. Иначе для занятия программированием не требовалось бы особого мастерст% ва и этим мог заниматься каждый дурак. (Тот факт, что много идиотов все же занимается программированием, здесь не обсуждается!)

Более «сложными» сферами программирования можно считать те, ко% торые требуют более формального процесса для обеспечения нужного качества. Например, особенно чревата опасностями разработка про% грамм, надежность которых критически важна (о чем говорится в «Ре% зюме» на стр. 574). Не допускающие двойного толкования специфика% ции, крайне формализованные разработка и тестирование и сертифи% кация в соответствии со стандартами – вот что характерно для этой об% ласти наряду с устойчивостью к отказам.

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

3.Следует ли стремиться стать экспертом в одной конкретной области или лучше иметь хорошую подготовку во всех областях без узкой спе циализации?

Разбираться во всех областях полезно. Однако для настоящего успеха в какой%то области требуется специальное мастерство и опыт, который можно получить только в результате практической деятельности. Что% бы получить такой ценный опыт, следует сосредоточиться на одной конкретной области. Винсент ван Гог отмечал: «Если овладеть одной областью и хорошо в ней разбираться, то одновременно начинаешь по% стигать и разбираться во многих других». Изучите конкретные слож% ные вопросы, которые выделяют вашу сферу среди других.

4.С какой из областей программирования следует знакомить начинаю щих программистов?

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

Главаm

23. За гранью возможного

 

 

 

 

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

 

 

 

 

 

687Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Вопросы личного характера

1.В какой области программирования работаете вы в настоящее время? Какое влияние оказывает она на код, который вы пишете? Какие кон кретные решения в области архитектуры и реализации она потребова ла от вас принять?

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

2.Доводилось ли вам работать в нескольких областях программирова ния? Было ли вам легко принимать другой взгляд на вещи и приме нять технологии, присущие новой сфере?

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

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

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

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