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

 

 

 

556m

 

 

 

 

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

 

 

 

 

 

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

 

 

 

 

 

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

 

 

 

Программирование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

 

 

 

 

 

557Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

тели и их работа с настольными системами. В силу коммерческих при% чин целевыми платформами обычно являются самые распространен% ные – в настоящее время Windows и Mac OS. Хотя сейчас много говорят о программировании для Linux, это все еще не та область, в которой со% средоточена работа над приложениями (по крайней мере, в данное вре% мя). По мере того как портативные устройства становятся все более мощными, а среды разработки приложений для них все богаче, разра% ботка мобильных приложений переместилась из области встроенных приложений (см. раздел «Встроенное программное обеспечение» на стр. 563) в данный класс программирования приложений более обще% го назначения. Особые препятствия на пути разработки встроенных приложений в значительной мере устранены.

Для такого рода работы есть много языков и сред. Стандартно исполь% зуются C и C++. Мы также часто встречаем Visual Basic и Delphi, Java и .NET, а также ряд библиотек и структур типа MFC и Qt. Выбор дела% ется в соответствии с тем, что удобнее для разработчиков – хорошо им знакомо и обеспечивает все необходимые функции.

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

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

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

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

558m

 

 

 

 

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

 

 

 

 

 

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

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Есть два главных рынка программирования приложений: коробочные (shrink%wrap) продукты и заказные приложения (custom applications).

Коробочные продукты

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

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

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

Заказные приложения

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

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

 

 

 

 

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

 

 

 

 

 

559Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Целевая платформа

Обычно это такая же машина, как та, на которой вы занимае% тесь разработкой (как правило, это x86 Windows PC).

Среда разработки

Обычно код разрабатывается на такой же рабочей станции, на которой будет выполняться программа. Современные интег% рированные среды разработки (IDE) обеспечивают удобное рабочее окружение, объединяя редактор, компилятор, отлад% чик и справочную систему под единым интерфейсом, управ% ляемым мышью. Существуют многочисленные дополнитель% ные компоненты сторонних поставщиков, которые упрощают разработку стандартных задач. Применяется широкая гамма языков: от низкоуровневых C/C++ до BASIC и Java, а также языков сценариев.

Типичные задачи и проблемы

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