Картостроители и паковщики



Если чья-то мысль Вас заинтересовала, то Вы всегда можете получить информацию о человеке, ее высказавшем, так как находитесь в Интернете.

Alan Carter and Colston Sanger (1997)
http://progstone.nm.ru/

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

Программная инженерия находится в плачевном состоянии. Кризис был отмечен еще в 1968 году, но несмотря на огромные усилия и сотни опубликованных работ, общее состояние индустрии ужасающе.

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

Авторы предполагают, что есть два типа мышления.

Общепринятое мышление, называемое паковкой (packing), которое основано на действии. Стандарт ISO 9001 соответствует этому виду мышления. Мы живем в обществе, ориентированном на действие. У многих пропала потребность в интенсивном размышлении.

Альтернативой является мышление, названное картостроением (mapping), поскольку программирование по сути треугольник - усвоение природы задачи, определение возможностей системы и желание. Результат выражается на языке программирования.

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

«Желание» и «Понимание» — ключевые слова картостроения.

Центральная проблема проектирования ПО состоит в построении оптимальной карты взаимосвязей между проблемой и семантикой системы.

Карта в ООП — это вид объектной модели, в которой указано множество объектов и связей между ними. В общем случае карта дает понимание причин и следствий. Карты необходимы чтобы удержать в уме больше знаний. Без мысленных карт не может быть понимания.

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

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

Логичность — соответствие карте. Если «карта» перестает работать, ее изменяют до тех пор, пока она вновь не станет «логичной».

Великие мыслители — картостроители. Они показывают нам, как посмотреть на мир проще.

Картостроитель испытывают «страсть» даже к «скучным» предметам. Картостроителям разрешается подпрыгивать и много кричать. Это означает их причастность к делу. Вероятно, они прервутся только сходив вместе на ланч, продолжив свои выкрики по возвращению.

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

Картостроение — это интенсивное, поглощающее эмоции занятие.

Картостроителям более комфортна модель работы в команде по принципу «победитель-победитель», а не по принципу «победитель-проигравший».

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

Программа — это теория программиста относительно проблемной области.

Грамотное программирование — это скорее отношение (позиция), а не инструмент.

Вы можете использовать найденное решение миллион раз, не выполняя одни и те же действия дважды.

Подход заключается в совете, даваемом одним опытным картостроителем другому, о том, как лучше всего решать проблему какого-то типа. Это приглашение посмотреть на мир определенным образом.

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

Создаются программные продукты, которые автоматизируют подход в виде высоко специализированного языка. Поэтому существуют языки, специализированные на определенном подходе. Smalltalk требует от пользователя рассматривать мир в виде объектов. Lisp требует применения неудобоваримых манипуляций с лямбда исчислением, которые приводят к появлению «собаки еды» (dog of food) вместо накормленной собаки.

Методологии состоят частично из подхода, частично из языка.

Создание языка и подхода, более или менее специализированного в какой-то предметной области — крупное достижение.

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

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

Идея документации сохранить знание. Это дает критерий, хотя и субъективный, что стоит включать в документ.

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

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

Среди паттернов может быть, например, и такой: «Не ставь телегу впереди лошади».

Система, управляемая событиями, реагирует на события из внешнего мира. Приложения с графическим интерфейсом большую часть времени находятся в ожидании, пока пользователь что-нибудь нажмет, для того чтобы отреагировать на событие. «Однорукие бандиты» — тоже управляемые событиями системы. У таких систем сложное пространство состояний и большая чувствительность к событиям. Часто для них ограничивается время ответа на событие.

Система электронной почты — пример системы, управляемой данными.

Тестовые классы иногда называют классами «янь» («yang»), а поставляемые классы — классами «инь» («yin»).