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