УНИВЕРСИТЕТ ИТМО | ||||
![]() | ||||
![]() |
![]() |
Главная / Мысли / Картостроители и паковщики
(версия для печати)
![]() Картостроители и паковщики
http://progstone.nm.ru/ В программной инженерии некоторые люди на порядок, а то и на два, продуктивнее других людей. Если бы так было у каменщиков, то строительная индустрия заинтересовалась бы этим. Действия каменщика можно проанализировать, с великим программистом труднее. Программная инженерия находится в плачевном состоянии. Кризис был отмечен еще в 1968 году, но несмотря на огромные усилия и сотни опубликованных работ, общее состояние индустрии ужасающе. Назначение программной инженерии — гарантировать, что программы, которые нужны пользователям, будут работать у них. Авторы предполагают, что есть два типа мышления. Общепринятое мышление, называемое паковкой (packing), которое основано на действии. Стандарт ISO 9001 соответствует этому виду мышления. Мы живем в обществе, ориентированном на действие. У многих пропала потребность в интенсивном размышлении. Альтернативой является мышление, названное картостроением (mapping), поскольку программирование по сути треугольник - усвоение природы задачи, определение возможностей системы и желание. Результат выражается на языке программирования. При построении программы необходимо найти взаимосвязь (карту) между проблемной областью и семантикой системы, которая удовлетворит желание. «Желание» и «Понимание» — ключевые слова картостроения. Центральная проблема проектирования ПО состоит в построении оптимальной карты взаимосвязей между проблемой и семантикой системы. Карта в ООП — это вид объектной модели, в которой указано множество объектов и связей между ними. В общем случае карта дает понимание причин и следствий. Карты необходимы чтобы удержать в уме больше знаний. Без мысленных карт не может быть понимания. Один тип мышления основан на знаниях и действиях, а другой на мысленных картах и понимании. В первом случае ты перестаешь спрашивать себя: «Почему?». Без карты «мира» трудно быть уверенным в том, что делать. Не обладая ясностью, которая появляется при наличии даже наполовину упорядоченной карты, в спешке можно сделать что-то неэффективное. То, что у тебя нет карты, часто означает, что нет понимания происходящего. Логичность — соответствие карте. Если «карта» перестает работать, ее изменяют до тех пор, пока она вновь не станет «логичной». Великие мыслители — картостроители. Они показывают нам, как посмотреть на мир проще. Картостроитель испытывают «страсть» даже к «скучным» предметам. Картостроителям разрешается подпрыгивать и много кричать. Это означает их причастность к делу. Вероятно, они прервутся только сходив вместе на ланч, продолжив свои выкрики по возвращению. Картостроение можно рассматривать как поиск, а особенность поиска состоит в том, что неизвестно, где это искомое лежит. Найти что- либо легче, если есть уверенность, что объект поиска существует. В противном случае необходимо предусмотреть некоторый искусственный ограничитель, например, по времени. Картостроение — это интенсивное, поглощающее эмоции занятие. Картостроителям более комфортна модель работы в команде по принципу «победитель-победитель», а не по принципу «победитель-проигравший». Наши предки были не глупее нас, и, когда в четыре часа наступала темнота, им ничего не оставалось делать, как размышлять. Теперь все несколько иначе. Программа — это теория программиста относительно проблемной области. Грамотное программирование — это скорее отношение (позиция), а не инструмент. Вы можете использовать найденное решение миллион раз, не выполняя одни и те же действия дважды. Подход заключается в совете, даваемом одним опытным картостроителем другому, о том, как лучше всего решать проблему какого-то типа. Это приглашение посмотреть на мир определенным образом. Как и язык, подход получается тем проще, чем больше он специализирован на заданной предметной области. Создаются программные продукты, которые автоматизируют подход в виде высоко специализированного языка. Поэтому существуют языки, специализированные на определенном подходе. Smalltalk требует от пользователя рассматривать мир в виде объектов. Lisp требует применения неудобоваримых манипуляций с лямбда исчислением, которые приводят к появлению «собаки еды» (dog of food) вместо накормленной собаки. Методологии состоят частично из подхода, частично из языка. Создание языка и подхода, более или менее специализированного в какой-то предметной области — крупное достижение. Книга Страуструпа описывает объектный подход и язык С++ — это праздник стиля, интуиции, структуры, глубины и творчества. Это тяжелая книга, описывающая сложный язык программирования, но она написана великим картостроителем в действии, у которого нет внутренней неразберихи относительно предмета. Работа — это всегда понимание, а процесс определяет, какое понимание необходимо передать коллегам. Это определяет приемлемый для каждого документа язык. К сожалению, обычная практика - опускать в документе детали того, почему документированное решение было выбрано из других альтернатив. Идея документации сохранить знание. Это дает критерий, хотя и субъективный, что стоит включать в документ. Сложность в картинках не есть Плохая Вещь — это существо лежащей перед вами проблемы. В стопке текста гораздо труднее проследить мысль, чем при использовании формализации. Главное «видеть проблему, а не ее решение». На любой стадии программирования люди используют понимание, чтобы находить и предлагать паттерны. Картостроители стремятся получить общее понимание ситуации, применяя известные паттерны там, где они применимы, и создавая новые там, где их нет. Среди паттернов может быть, например, и такой: «Не ставь телегу впереди лошади». Система, управляемая событиями, реагирует на события из внешнего мира. Приложения с графическим интерфейсом большую часть времени находятся в ожидании, пока пользователь что-нибудь нажмет, для того чтобы отреагировать на событие. «Однорукие бандиты» — тоже управляемые событиями системы. У таких систем сложное пространство состояний и большая чувствительность к событиям. Часто для них ограничивается время ответа на событие. Система электронной почты — пример системы, управляемой данными. Тестовые классы иногда называют классами «янь» («yang»), а поставляемые классы — классами «инь» («yin»). | ||
![]() | ||||
|