The Programmers Stone (Программистский камень) - Alan Carter
Шрифт:
Интервал:
Закладка:
Картостроители напрямую чувствуют эффективность своих размышлений и поэтому они в большинстве случаев чувствуют, что природа неведомым путем «играет честно» с ними, и даже награждает их чудесными сюрпризами, если они копнут достаточно глубоко. Это часто усиливает «спиритические» и «мистические» элементы их характера, даже в ситуациях, когда паковщики падают духом.
Прежде чем приступить к проблеме, картостроители убеждаются, что известные элементы этой проблемы содержатся в их сознании. Они берут на вооружение самые сильные черты своего характера, чтобы найти мотивы для выполнения тяжелой работы, заключающейся в исследовании происходящего в фоновом режиме. Чтобы найти решение проблемы, картостроитель напрягает все свои силы и получает в награду восторг, либо ощущение измены, если что-то не получается так, как хотелось. Картостроители испытывают «страсть» к «скучным» предметам.
Картостроители превосходны за концептуально сложной работой, такой как решение сложных задач со многими взаимосвязанными элементами. Они могут проявлять требуемое задачами чутье, или воображение, чего совершенно нельзя ожидать от паковщика. Высококачественная программная инженерия, математика и физика, с присущими им сложностью и уникальностью — наиболее привлекательные для картостроителя научные дисциплины. Традиционно считающиеся искусством поэзия и музыка — области, где способности картостроителя манипулировать структурой являются существенным преимуществом, хотя может иметь смысл переопределить «Искусство» как то, что картостроители делают хорошо. Мощь великого искусства подвластна только мышлению картостроителя, поскольку художник использует массу звуков или цветов, самих по себе неинформативных, но затрагивающих глубокие пласты сознания. Концентрация на структуре может перенести эту структуру в сознание, и художник включается в карты зрителей!
Все эти различия — это просто следствия того, что у одного человека есть большая карта, построенная путем упорядоченного (дисциплинированного) обдумывания, а у другого ее нет. То, что эти различия между двумя группами людей существуют — главный сюрприз предлагаемого подхода. Это означает, что маловероятно взаимопонимание между людьми из разных категорий (картостроитель плохо понимает образ мыслей паковщика и наоборот).
Паковка как самоподдерживающееся состояние
Мы живем в обществе, ориентированном на действие. Так пошло со времен изобретения земледелия и создания стабильной среды обитания, в которой выполняемые задачи определялись самой средой. Пропала потребность в интенсивном размышлении. У нас мало опыта обсуждения и управления субъективными, внутренними состояниями — хотя в субъективном имеется столько же общего (для разных людей) опыта, как и для внешних видимых всеми объектов. У нас есть общая эвристика, которая говорит, что следует ограничить наши наблюдения лишь видимым вовне, которое врывается к нам, чтобы предотвратить исследование субъективных явлений прежде, чем у них будет шанс получить результаты и скорректировать себя.
Когда все происходит не так, как нужно, мы ищем объяснения событию, и добываем более хорошие описания более эффективных действий. В ситуациях, где гибкость — ценное качество, это ведет к ослаблению желаний. Если все происходит в соответствии с процедурой, описанной на бумаге, считается, что все идет хорошо, а цена усилий просто не принимается во внимание.
Хуже того, поведение людей, лишенных понимания, может подстегивать друг друга. Если человек просто не понимает того, что происходит, он смотрит на других людей (по его мнению, явно знающих, что они делают) и чувствует себя уязвленным, поскольку считает отсутствие у него нужного пакета знаний своим просчетом. Они держат носы по ветру и лопочут о «соответствующих соображениях» и «подходящем действии», как будто «несоответствующие соображения» и «неподходящие действия» у них тоже есть, но не предполагают даже, каким же могло бы быть подходящее действие на самом деле.
Есть дело — все его делают! Так развивается эта стыдливая конспирация поддержания этикета хвастовства. Если кто-то пренебрегает этим этикетом, то он будет атакован внутренне невежественными возражениями и прочими методами давления, чтобы «соответствовать», очевидно ради этого. Это не может быть выражено ориентированными на действие терминами, только ссылками на случайные соотношения, полностью знать которые может только один человек. Картостроение в пакующем мире может быть мучительным и тягостным занятием, особенно если кто-то не понимает действительность, в которой живут паковщики.
В патологических ситуациях это может вести к постоянной деградации, когда решение любой проблемы пытаются спихнуть кому-то еще, на процедуру, или механизм распределения ответственности. Это напоминает попытку держать в одной руке зубную щетку и палочки для еды — если вы держите палочки в точности как на рисунке, то, что щетка упирается в нос и мажет пастой все вокруг, вас не должно беспокоить!
Напоминаем, мы описали причины этой мистики не лопоча о «человеческом факторе» или «струнах души» наших коллег, а, определенно, социально обусловленным избеганием «фантазирования»!
Коммуникационный барьер картостроитель/паковщик
• Стоит повторить некоторые ключевые положения:
• Картостроение и паковка — очень разные стратегии
• Паковка — это усердно насаждаемая общественная норма
• Мир приспособлен для паковщиков
• Язык бизнеса — это язык паковщиков
• Результаты картостроения называют «здравым смыслом»
• Здравый смысл не так распространен
• Картостроители считают паковщиков циниками или лентяями
• Паковщики считают картостроителей иррациональными
• Паковщики проводят большую часть своего времени играя в политику
• Последнее, что учитывают в политике, — разум
• Картостроители часто заблуждаются насчет психологии паковщика
• Паковщики обычно правильно понимают психологию паковщика
• Картостроители часто заблуждаются насчет психологии картостроителя
• Паковщики всегда неправильно понимают психологию картостроителя
• У картостроителей нет руководящей ими культуры
• Большинство картостроителей учатся сами, как Маугли
• Картостроители могут обучить себя сами!
• Картостроители могут научиться у других
• Картостроители часто сталкиваются с вызовом со стороны общества
• Картостроители в наше время редко реализуют свой потенциал
• Если уж ситуация понята, она может быть изменена.
Глава 2. Мысли о программировании
Для чего служит программная инженерия?
Всякий раз, когда мы запутываемся, мы должны оказаться способными увидеть, куда мы идем, чтобы знать, какое действие предпринять. Мы должны знать, чего мы пытаемся достичь.
Мы инженеры-программисты. Почему? Для чего служит программная инженерия? Что делают инженеры-программисты? Мы получаем самые курьезные ответы на этот вопрос. Один чудак сказал: «Они следуют процедурам Стандартов Программной Инженерии!» Другой добавил: «Они переформулируют (transliterate) требования!»
Боже. Мы предполагаем, что инженеры-программисты просто обеспечивают работу программ, которые нужны пользователям на их компьютерах. Это означает, что наши программы должны делать правильные вещи. Они должны быть устойчивыми. Иногда мы должны знать вполне определенно, что они устойчивы (надежны), а иногда нам требуется уметь это доказать. Нам всегда бы понравилось оказаться способными все это делать! Необходимые программы должны работать так же и завтра, что обычно означает, что наши программы сегодня должны быть поддерживаемыми. Мы должны делать нашу работу эффективно по стоимости, иначе не получим шанс написать эти программы вообще. Доставка должна быть вовремя.
Мы используем всю нашу изобретательность и опыт, содержащийся в нашей дисциплине, чтобы добиться этих целей. Все наши технологии, стандарты, инструменты, языки предназначены помочь нам добиться этих целей.
Мы ничего не делаем ради этого.
Программная инженерия — распределенное программирование
Традиционный взгляд на работу состоит в том, что команда выполняет работу, а отдельный человек вносит вклад в общие усилия. Но как картостроители мы можем попытаться посмотреть на вещи всеми возможными способами, чтобы проверить, насколько они информативны. Мы можем обрисовать границу системы вокруг программирующей команды и заметить, что там нет ничего, что не смог бы сделать отдельный программист. Такие действия, как формулировка требований, проектирование, реализация, тестирование, управление, рецензирование, компилирование (build), архивирование и управление конфигурацией, должны быть выполнены отдельным программистом даже для выполнения небольшой работы. Поэтому мы можем рассматривать деятельность в программной инженерии как распределение того, что один человек мог делать совершенно эффективно в «любительском» («непрофессиональном») режиме во время обучения!