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

масштаба предприятия

 

 

 

 

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

 

 

 

 

 

571Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

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

Краткая информация

Я работаю в отделе ИТ крупного городского банка. Мы пишем программы для решения конкретных потребностей нашего бизнеса. Это важные задачи;

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

тысячи долларов, ошибиться нельзя.

Ричард (программист приложений масштаба предприятия)

Типичные продукты

Бизнес%системы целых компаний, управляющие их коммер% ческими операциями.

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

Специально сконструированная распределенная система.

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

Такая же, как для распределенных систем. Часто приходится работать с очень большими хранилищами данных, различны% ми технологиями баз данных, доставшимися от прежних сис% тем («legacy systems» на жаргоне менеджеров). Тут все поме% шаны на XML.

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

Такие же, как для распределенных систем.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

572m

 

 

 

 

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

 

 

 

 

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

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

Численное программирование

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

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

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

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

 

 

 

 

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

 

 

 

 

 

573Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Краткая информация

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

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

системы приемлемым и точным образом.

Энди (эксперт по программированию вычислений)

Типичные продукты

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

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

Суперкомпьютеры или компьютерные гриды и кластеры.

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

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

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

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

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

Для достижения нужной производительности здесь требуется тща% тельная оптимизация в соответствии с характеристиками целевой платформы.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

574m

 

 

 

 

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

 

 

 

 

Свобода от желания получить ответ очень важна для понимания проблемы.

Джидду Кришнамурти

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

В какой области вы работаете – какого рода программы делаете.

Какое влияние оказывает эта область на архитектуру. (Это много% уровневая система предприятия или крепко скрученный встроен% ный код? См. главу 14.)

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

Какими инструментами пользоваться – что доступно, а что нет.

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

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

Резюме

За поворотом могут оказаться новая дорога или тайная калитка.

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

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

Что мы выяснили? Общее у этих областей одно: наличие особенностей. Каждая область требует специфических проектных решений. Код уровня приложений в целом не годится для встроенной среды. Архи% тектура приложения для рабочей станции может не масштабировать% ся в применении к распределенной системе.

 

 

 

 

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

 

 

 

 

 

575Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

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

Хорошие программисты…

Понимают сущность про% блем, с которыми стал% киваются

Приспосабливают свой код и архитектуру к пред% метной области

Плохие программисты…

Обладают примитивно узким кругозо% ром в области программирования: не понимают, какие объективные обстоя% тельства требуют разработки разных типов ПО

Пишут код, плохо соответствующий предметной области (выбирают непод% ходящие архитектуры или неуместные идиомы кода)

См. также

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

Разным предметным областям соответствуют разное качество и спектр инструментов разработки.

Глава 14. Программная архитектура

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