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

 

 

 

 

 

 

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

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

7

Инструментарий программиста

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

В этой главе:

Инструменты,

используемые при создании кода

Эффективная работа с инструментами

Стандартные типы инструментов

Для нас опасны все средства искусства, более глубокого чем наше.

Дж. Р. Р. Толкиен

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

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

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

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

160m

 

 

 

 

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

 

 

 

 

 

Глава 7. Инструментарий программистаClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

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

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

Что такое инструмент программирования?

Для изготовления программного обеспечения мы пользуемся широ% ким спектром инструментов – программ, которые строят программы,

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

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

Сложность

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

 

 

 

 

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

 

 

 

 

 

161Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

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

Частота применения

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

Интерфейс

Есть инструменты с красивыми графическими интерфейсами поль# зователя (GUI). Другие сделаны попроще – запускаются из команд# ной строки (CLI) и направляют свои результаты в файл. Что выбе% рете вы, зависит от устройства ваших мозгов и выработавшихся привычек.

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

Интеграция

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

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

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

162m

 

 

 

 

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

 

 

 

 

 

Глава 7. Инструментарий программистаClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Стоимость

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

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

Качество

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

уменя возникало желание переписать их самому.

Сучетом рассмотренных характеристик нужно выбрать для себя инст% рументы, сделав приемлемые компромиссы. Хотя очень важно при% выкнуть к инструменту, которым вы часто пользуетесь, хорошо изу% чить его и эффективно применять, не стоит делать из него фетиш. Большинство пользователей Windows с презрением относятся к разра% боткам в стиле UNIX, а UNIX%специалисты смотрят свысока на тех, кто программирует в Windows и, следовательно, не может воспользо% ваться командной строкой. Будьте выше этого.

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

А зачем они нужны – инструменты?

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

1«Free» имеет в мире программирования два значения: free как в пиве (вы получите его бесплатно) и free как в свободе речи (программное обеспечение open source, код которого можно читать и модифицировать). Что для вас важнее, зависит от степени вашего идеализма. См. врезку «Лицензии» на

стр. 461.

 

 

 

 

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

 

 

 

 

 

163Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

очень полезны. Чтобы повысить свою продуктивность, качество кода и мастерство, полезно присмотреться к инструментам, которыми вы пользуетесь в данное время, и узнать, какие еще возможности они в се% бе таят.

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

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

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

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

одни программисты сами старательно пишут код для ее решения;

другие пишут нечто на языке сценариев, чтобы работа выполня% лась автоматически;

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

При наличии инструмента, который может решить проблему:

одни программисты играют с ним и так, и сяк, пока не добьются ре% зультата, близкого к нужному;

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

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

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