Современная электронная библиотека ModernLib.Net

The Programmers' Stone (Программистский камень)

ModernLib.Net / Carter Alan / The Programmers' Stone (Программистский камень) - Чтение (стр. 2)
Автор: Carter Alan
Жанр:

 

 


      В английском есть эта фраза "the penny dropped", говорящая о том, что один из этих моментов возник по воле случая (by chance), но нет способа сказать, что некто заставил такой момент наступить. Это нельзя сделать процедурно, но можно сделать умышленно (deliberately). Именно это происходит каждый раз, когда хакер намеревается упростить проблему в программе. Он или она как профессионал "знает", что к пятнице проблема будет решена, но у него/нее нет идеи -- как это будет сделано. У нас нет слова для этого высочайшего способа работы. Потому что в обществе M0 это не происходит (не случается), и никто не требует от нашей физики принять во внимание тот факт, что это действительно происходит."
      - С.К.]
      В противном случае, есть простой способ начать. Такой простой, что дети, так упорно старающиеся быть естественными картостроителями, часто его находят. Представь себе друга, такого же умного как ты сам, но который совсем ничего не знает о мире. То, что ты чувствуешь, ты должен передать ему - никому не нужно говорить, что оказалось проще разговаривать с персонажем из мультфильма - инопланетянином из маленькой тарелки с антеннами на голове. Или больше подойдет лукавый средневековый алхимик Шона Коннери из "Имени розы" (Sean Connery in The Name of the Rose). Объясни все своему воображаемому другу. Для чего это. Откуда это. Где это происходит.
      Сначала для этого упражнения требуется все внимание, но через некоторое время поиск логики между пакетами знаний становится таким же автоматическим, как вождение автомобиля, а ваше внимание привлекают лишь необычные ситуации: кусочки вашей карты, которые нужно заполнить, либо противоречия, которые нужно разрешить. Это работает. По мере построения карты возможно обсуждение методов, поскольку мы все знаем, о чем мы говорим.

Пути картостроителей и паковщиков

      Будет неожиданностью обнаружить, что вокруг нас есть два отдельных состояния ума. Это похоже на то, как если бы вы узнали, что кто-то, кого вы знали долгое время, неграмотный. Сначала вы изумитесь: это невозможно! Но потом, вы осознаете, что кто-то другой может жить совсем иначе чем вы, хотя на поверхностный взгляд это выглядит почти также.
      В этом разделе мы рассмотрим различия этих двух стратегий. Когда мы это сделаем, многое в современной жизни, особенно в области высоких технологий, превратится в простую картинку - признак полезной теории! Помните - большинству людей, картостроители они или паковщики, нет повода думать, что есть какой-то другой склад ума, чем у них самих.
      Что такое паковка? Это когда ты перестаешь спрашивать себя: "Почему?". Ты перестаешь обновлять свою карту мира, поэтому ты не обнаруживаешь многие содержащиеся внутри нее структуры, которые картостроители используют для "плутовства". Ты учишься медленнее, поскольку усваиваешь маленькие пакеты знаний, которые ты не можешь проверить до конца, поэтому вокруг тебя неожиданно возникает множество маленьких проблем. Ты редко приходишь в состояние, когда большая часть карты отсортирована так, что ты можешь просто увидеть, как идет проработка остальной ее части. В таких требующих интенсивного мышления областях, как физика и математика, картостроители могут понять достаточно, чтобы получить аттестат за две недели, хотя в большинстве школ тратится более трех лет на запихивание (зазубриванием) пакетов знаний в память, где они лежат необработанными, поскольку дети послушны и не размышляют. Это не самый эффективный путь в эру информации.
      Без карты мира, выверяемой относительно самой себя и объясняющей буквально все вокруг, очень трудно быть уверенным в том, что делать. Подход, который ты вынужден брать на вооружение в любой ситуации - сканировать бездумно память, пока не найдешь маленький пакет знаний, который подходит к ситуации (в основе этого есть немного размышления, но оно прекращается как можно быстрее). Затем ты убеждаешься, что список условий соответствует ситуации, поэтому ответное действие определяется твоим "знанием".
      Если так случилось, что твой приятель извлек другой пакет "знаний", и вы начинаете "спор", в котором твой друг показывает, в каких пунктах твой список не соответствует его списку и говорит, что ты ошибаешься, а он прав, то в конце концов ты соглашаешься и делаешь то же, что и он. Ты не пытаешься построить карту, которая включила бы в себя оба знания и поэтому высветила бы правильный ответ, поскольку ты не имеешь доступа к необходимым навыкам картостроения, а без опыта очень трудно поверить, что это возможно сделать за приемлемое время. Не обладая ясностью, которая появляется при наличии даже наполовину упорядоченной карты, ты скорее сделаешь в спешке что-то неэффективное, чем создашь что-то действующее. Когда на свет появится уродец, ты скажешь, что тебе не повезло.
      Последствия идут дальше. То, что у тебя нет большой карты, означает, что ты часто не понимаешь происходящего даже в знакомой обстановке (дома или на работе). Ты предполагаешь, что это означает, что ты не усвоил соответствующий пакет знаний, и на это можно посмотреть как на моральный просчет с твоей стороны. Наконец, с детства тебе внушали, что хорошо потреблять пакеты знаний и складывать их стопкой в голове как тарелки, только ленивый этого не делает.
      Ты также преувеличенно озабочен уверенностью. Картостроители обладают богатой, сильной, внутренне согласованной структурой, которую они могут детально исследовать и по которой могут выверять ситуацию и соответствующие ответные действия. Логичность для них - это соответствие карте, и они честны, когда карта перестает работать. Это не проблема, они просто изменяют ее до тех пор, пока она вновь не становится "логичной". Без картостроения ты вынужден использовать хрупкие цепочки вывода, которые поддержаны только с одного конца. Поскольку они хрупкие, ты очень переживаешь о том, насколько каждая связь абсолютна, подходяща, полностью корректна (чего на самом деле никогда не достичь). Ты вынужден отвергнуть аргумент, в котором ты "не уверен" (хотя это могло бы быть не так, если бы твоя карта была побольше), и часто ограничиваешь себя действиями, в абсолютной правильности которых ты смог себя убедить (и это во внутренне противоречивом мире).
      Проблема уверенности затем становится доминирующей. Люди не желают думать о чем-то (строить хрупкие цепочки) до тех пор, пока они не станут "уверены", что "процедура" даст гарантированный результат, потому что, как они верят, так действует мудрый.
      Тебя поглощает страх оказаться "в заблуждении", из-за идеи о том, что "добро" достигается правильным пакетом знаний, действующим в любой ситуации. Мысль о том, что мир замкнут и полностью постигаем (но не тобой) принимается по умолчанию. Мысль о новом становится настолько нежелательной, что ты редко обращаешь внимание на это новое, когда оно происходит, хотя картостроители постоянно подмечают новизну. Твой подход фокусируется на действиях, которые ты не смеешь "критиковать", даже если их бесполезность, или даже вредность (в смысле снижения производительности), очевидна. Ты настаиваешь на своих специфических (ритуальных) действиях, предписанных в твоей работе, даже когда твоя карта уже достаточно хороша, чтобы принять под личную ответственность достижение целей, что более приличествовало бы твоему достоинству.
      У некоторых люди настолько мало опыта непосредственного понимания, добываемого с помощью картостроения, что они не могут поверить, что можно что-то понять, до тех пор, пока кто-то еще не расскажет им в подробностях, как делать абсолютно все. Они верят, что единственной альтернативой всеобщей регламентации может быть лишь полная анархия, но только не группа людей, способная получить результат.
      Теперь, когда ты привык беседовать с воображаемым другом о своей карте мира, продолжаешь находить в ней дыры и латать их, ты стал менее зависимым от ее текущего состояния в любой конкретный момент времени. Иногда ты все же зависишь от карты, если находишь абстракцию, которая была прекрасным сюрпризом, когда ты ее обнаружил, и была полезной, но теперь должна уйти. Важно всегда помнить, что удовольствие только нарастает: если открытие чего-то доставило удовольствие, то открытие чего-то более глубокого будет еще большим удовольствием. Обычно ты даже не возражаешь, когда твой воображаемый друг откалывает кусочки карты, если они не работают. Поэтому ты не возражаешь, если настоящие друзья тоже это делают! Когда вы видите вещь с разных сторон, то вы пытаетесь понять карты друг друга и прорабатываете различия. Две несогласованные карты часто показывают путь к более глубокому взгляду на вещи.
      Великие мыслители -- картостроители. Они редко занимаются возведением зданий огромной концептуальной сложности. Скорее, они показывают нам, как посмотреть на мир проще.
      Картостроители организуют свое обучение как внутренний процесс в ответ на внешние и самостоятельно генерируемые стимулы. Паковщики строят свое обучение как еще одну задачу, которую требуется выполнить, обычно в классе, используя соответствующее оборудование. Особенно в ранние годы эффективное обучение картостроителя требует внутренних методов для исследования взаимосвязей концепций и распознавания истин, в то время как эффективное обучение паковщика сконцентрировано на навыках запоминания.
      Особенности обучения картостроителя требуют более высоких затрат, чем обучение паковщика, и у этого есть последствия. Концентрация на сжатом, структурированном знании означает, что плохо структурированные не имеющее отношения к предмету соображения могут побудить к решению непропорционально большого числа проблем, не имеющих прямого отношения к проблеме, над которой размышляет картостроитель. Если ребенок пытается понять новую идею с точки зрения как можно большего из того, что он знает, то очень вероятно, что разум ребенка будет рассредоточен над стольким "базовым знанием", насколько это уже возможно. Необходимость рассмотреть вопрос: "Отнесу ли я сегодня книги в библиотеку?" приносит с собой концептуально связанные вопросы: "Где мой ранец?", "Будет ли дождь?", "Будет ли дождь завтра?" и т.д., которые становятся дополнительной нагрузкой для ума, которая у ребенка-паковщика при аналогичных обстоятельствах просто не возникает. У ребенка-паковщика (например) просто никогда не возникает такой формы растекающихся потоков, являющихся следствием из кривых спроса и предложения в экономике (которые могут на самом деле иметь такое же представление, которое используется для хранения, скажем, составляющих понимания термодинамики), которые будут замещены таким простым вопросом о библиотечной книге.
      Восприятие факта и готовность к следующему также различны в картостроении и паковке. Ум картостроителя должен исследовать этот факт и сравнить его с базовым знанием, чтобы увидеть, либо он является следствием, уже имеющим место в концептуальной карте мира, либо этот факт представляет новое знание, которое требует структурных изменений.
      Картостроители, вероятно, гораздо более обеспокоены сравнительной надежностью информации. В то время как паковщики стремятся рассматривать знание плоско, как ряд имеющих место быть утверждений, картостроители стремятся связать утверждения взаимными ссылками, чтобы проверить их и свести к более глубоким истинам. Более чем вероятно, что картостроители работают с совокупностью утверждений типа: "Если X истинно, то Y также должно быть истинно, Z несомненно истинно, а W - чепуха, хотя все говорят, что это правильно". Картостроители, скорее всего, недоумевают над отсутствием у паковщиков доводов.
      Особенность склада ума паковщиков, которая заставляет картостроителей лезть на стену, заключается в том, что паковщики редко замечают изъяны своей логики и не слышат их, даже когда произносят. Хуже того, когда на эти изъяны им указывают, они с большой вероятностью оправдают свою логику, бодро признав изъяны, административной целесообразностью. Обоснованность их собственного мнения не так важна, как закрепленное обучением поведение, и кажется, что они не видят смысла соотношений, когда проводят анализ стоимость/полезность. Это происходит потому, что паковщики не создают обобщенные концептуальные картинки из максимального количества знаний, которым они обладают. Картостроитель может обратить внимание на факт, но это один факт среди многих других. У паковщика нет концептуальной картины ситуации, которая выделяет важные положения, поэтому в своих действиях он в основном руководствуется набором процедурных реакций, которые задают выбираемое к исполнению действие. Процедура выбора действия напоминает лотерею. Для картостроителя наличие факта, который должен быть помещен на карту, но не подходит к ней, вызывает подозрения к карте. Эта неувязка может перемещаться как складка на ковре, пока не придет к чему-нибудь важному. Обе стороны согласны, что им следует делать "логичные" вещи, но два человека могут не сходится в логике, когда один видит соотношения, которые другой старается не замечать.
      У картостроителей много хороших идей, основанных на глубоком погружении в соотношения, которые паковщик редко когда принимает во внимание.
      Частично необычайная гибкость и скорость обучения картостроителей происходит из преимуществ поиска понимания, а не данных, но остальное происходит из-за тщательного изучения того, с чем они имеют дело. Для картостроителя совершенно естественно проводить каждый свободный миг в верчении предмета в голове (обдумывании проблемы), а все выходные полностью фокусируясь на нем. Фокусирование картостроителя -- страшная вещь. За несколько часов он может достичь таких результатов, которых группа паковщиков будет достигать месяцами. Это знает каждый IT менеджер, который видел картостроителя в действии.
      Картостроители демонстрируют тенденцию говорить в терминах концентрированного знания, в которое они прессуют свой опыт. Хотя картостроители часто используют различные внутренние представления области рассуждений, они эксперты во взаимном согласовании терминологии при обсуждении предмета между собой, и это один из способов картостроителей распознать друг друга. Это распознавание возникает вследствие последовательности взаимодействий, в которых один прослеживает маршрут на карте, останавливается и приглашает других выяснить, где же они расходятся. Цель этого упражнения - согласовать мысленные карты, но это также выявляет, прежде всего, наличие карт у других!
      Картостроители склонны к частому изменению описаний и подходов, поскольку видят в этом способ упрощения, которое очень способствует пониманию, ведь кто хозяин карты? В общественных или административных ситуациях, это может привести к недоразумениям, поскольку картостроитель не догадывается, что у паковщика нет карты, которую он мог бы передавать по кусочкам. Для картостроителей паковщики выглядят упрямыми невежами, для паковщиков картостроители - большие путаники. В контексте программной инженерии этот коммуникационный барьер приводит к стычкам. Картостроитель хочет двигаться от массивного программного обеспечения к чему-то компактному, более надежному из-за структуры, которая необходима и достаточна. Паковщики не пытаются разобраться в этой новой структуре, а видят лишь маньяка, который стремится изменить каждый файл, встречающийся ему на пути.
      Картостроители напрямую чувствуют эффективность своих размышлений и поэтому они в большинстве случаев чувствуют, что природа неведомым путем "играет честно" с ними, и даже награждает их чудесными сюрпризами, если они копнут достаточно глубоко. Это часто усиливает "спиритические" и "мистические" элементы их характера, даже в ситуациях, когда паковщики падают духом.
      Прежде чем приступить к проблеме, картостроители убеждаются, что известные элементы этой проблемы содержатся в их сознании. Они берут на вооружение самые сильные черты своего характера, чтобы найти мотивы для выполнения тяжелой работы, заключающейся в исследовании происходящего в фоновом режиме. Чтобы найти решение проблемы, картостроитель напрягает все свои силы и получает в награду восторг, либо ощущение измены, если что-то не получается так, как хотелось. Картостроители испытывают "страсть" к "скучным" предметам.
      Картостроители превосходны за концептуально сложной работой, такой как решение сложных задач со многими взаимосвязанными элементами. Они могут проявлять требуемое задачами чутье, или воображение, чего совершенно нельзя ожидать от паковщика. Высококачественная программная инженерия, математика и физика, с присущими им сложностью и уникальностью - наиболее привлекательные для картостроителя научные дисциплины. Традиционно считающиеся искусством поэзия и музыка - области, где способности картостроителя манипулировать структурой являются существенным преимуществом, хотя может иметь смысл переопределить "Искусство" как то, что картостроители делают хорошо. Мощь великого искусства подвластна только мышлению картостроителя, поскольку художник использует массу звуков или цветов, самих по себе неинформативных, но затрагивающих глубокие пласты сознания. Концентрация на структуре может перенести эту структуру в сознание, и художник включается в карты зрителей!
      Все эти различия - это просто следствия того, что у одного человека есть большая карта, построенная путем упорядоченного (дисциплинированного) обдумывания, а у другого ее нет. То, что эти различия между двумя группами людей существуют - главный сюрприз предлагаемого подхода. Это означает, что маловероятно взаимопонимание между людьми из разных категорий (картостроитель плохо понимает образ мыслей паковщика и наоборот).

Паковка как самоподдерживающееся состояние

      Мы живем в обществе, ориентированном на действие. Так пошло со времен изобретения земледелия и создания стабильной среды обитания, в которой выполняемые задачи определялись самой средой. Пропала потребность в интенсивном размышлении. У нас мало опыта обсуждения и управления субъективными, внутренними состояниями - хотя в субъективном имеется столько же общего (для разных людей) опыта, как и для внешних видимых всеми объектов. У нас есть общая эвристика, которая говорит, что следует ограничить наши наблюдения лишь видимым вовне, которое врывается к нам, чтобы предотвратить исследование субъективных явлений прежде, чем у них будет шанс получить результаты и скорректировать себя.
      Когда все происходит не так, как нужно, мы ищем объяснения событию, и добываем более хорошие описания более эффективных действий. В ситуациях, где гибкость - ценное качество, это ведет к ослаблению желаний. Если все происходит в соответствии с процедурой, описанной на бумаге, считается, что все идет хорошо, а цена усилий просто не принимается во внимание.
      Хуже того, поведение людей, лишенных понимания, может подстегивать друг друга. Если человек просто не понимает того, что происходит, он смотрит на других людей (по его мнению, явно знающих, что они делают) и чувствует себя уязвленным, поскольку считает отсутствие у него нужного пакета знаний своим просчетом. Они держат носы по ветру и лопочут о "соответствующих соображениях" и "подходящем действии", как будто "несоответствующие соображения" и "неподходящие действия" у них тоже есть, но не предполагают даже, каким же могло бы быть подходящее действие на самом деле.
      Есть дело - все его делают! Так развивается эта стыдливая конспирация поддержания этикета хвастовства. Если кто-то пренебрегает этим этикетом, то он будет атакован внутренне невежественными возражениями и прочими методами давления, чтобы "соответствовать", очевидно ради этого. Это не может быть выражено ориентированными на действие терминами, только ссылками на случайные соотношения, полностью знать которые может только один человек. Картостроение в пакующем мире может быть мучительным и тягостным занятием, особенно если кто-то не понимает действительность, в которой живут паковщики.
      В патологических ситуациях это может вести к постоянной деградации, когда решение любой проблемы пытаются спихнуть кому-то еще, на процедуру, или механизм распределения ответственности. Это напоминает попытку держать в одной руке зубную щетку и палочки для еды - если вы держите палочки в точности как на рисунке, то, что щетка упирается в нос и мажет пастой все вокруг, вас не должно беспокоить!
      Напоминаем, мы описали причины этой мистики не лопоча о "человеческом факторе" или "струнах души" наших коллег, а, определенно, социально обусловленным избеганием "фантазирования"!

Коммуникационный барьер картостроитель/паковщик

      Стоит повторить некоторые ключевые положения:
      Картостроение и паковка - очень разные стратегииПаковка - это усердно насаждаемая общественная нормаМир приспособлен для паковщиковЯзык бизнеса - это язык паковщиковРезультаты картостроения называют "здравым смыслом"Здравый смысл не так распространенКартостроители считают паковщиков циниками или лентяямиПаковщики считают картостроителей иррациональнымиПаковщики проводят большую часть своего времени играя в политикуПоследнее, что учитывают в политике, - разумКартостроители часто заблуждаются насчет психологии паковщикаПаковщики обычно правильно понимают психологию паковщикаКартостроители часто заблуждаются насчет психологии картостроителяПаковщики всегда неправильно понимают психологию картостроителяУ картостроителей нет руководящей ими культурыБольшинство картостроителей учатся сами, как МауглиКартостроители могут обучить себя сами!Картостроители могут научиться у другихКартостроители часто сталкиваются с вызовом со стороны обществаКартостроители в наше время редко реализуют свой потенциалЕсли уж ситуация понята, она может быть изменена.


Для чего служит программная инженерия?

      Всякий раз, когда мы запутываемся, мы должны оказаться способными увидеть, куда мы идем, чтобы знать, какое действие предпринять. Мы должны знать, чего мы пытаемся достичь.
      Мы инженеры-программисты. Почему? Для чего служит программная инженерия? Что делают инженеры-программисты? Мы получаем самые курьезные ответы на этот вопрос. Один чудак сказал: "Они следуют процедурам Стандартов Программной Инженерии!" Другой добавил: "Они переформулируют (transliterate) требования!"
      Боже. Мы предполагаем, что инженеры-программисты просто обеспечивают работу программ, которые нужны пользователям на их компьютерах. Это означает, что наши программы должны делать правильные вещи. Они должны быть устойчивыми. Иногда мы должны знать вполне определенно, что они устойчивы (надежны), а иногда нам требуется уметь это доказать. Нам всегда бы понравилось оказаться способными все это делать! Необходимые программы должны работать так же и завтра, что обычно означает, что наши программы сегодня должны быть поддерживаемыми. Мы должны делать нашу работу эффективно по стоимости, иначе не получим шанс написать эти программы вообще. Доставка должна быть вовремя.
      Мы используем всю нашу изобретательность и опыт, содержащийся в нашей дисциплине, чтобы добиться этих целей. Все наши технологии, стандарты, инструменты, языки предназначены помочь нам добиться этих целей.
      Мы ничего не делаем ради этого.

Программная инженерия - распределенное программирование

      Традиционный взгляд на работу состоит в том, что команда выполняет работу, а отдельный человек вносит вклад в общие усилия. Но как картостроители мы можем попытаться посмотреть на вещи всеми возможными способами, чтобы проверить, насколько они информативны. Мы можем обрисовать границу системы вокруг программирующей команды и заметить, что там нет ничего, что не смог бы сделать отдельный программист. Такие действия, как формулировка требований, проектирование, реализация, тестирование, управление, рецензирование, компилирование (build), архивирование и управление конфигурацией, должны быть выполнены отдельным программистом даже для выполнения небольшой работы. Поэтому мы можем рассматривать деятельность в программной инженерии как распределение того, что один человек мог делать совершенно эффективно в "любительском" ("непрофессиональном") режиме во время обучения!
      Мы распределяем программирование по тем же причинам, по которым распределяем любой вид обработки: пригодность (availability), параллелизм и специализация.
      Такой взгляд приносит понимание. Мы должны аккуратно выделить различия между задачами. Иногда мы можем получать преимущества от выполнения двух задач одним человеком, когда нас не должно волновать, что они объединены. Например, во многих организациях принята практика разделения идентификации требований и выбора архитектуры, но когда они переходят на технологию моделирования объектов в стиле Буча, то внимают совету и объединяют эти задачи. Когда мы разделяем навыки разработки и тестирования, мы можем извлечь из этого дополнительные преимущества, контролируя взаимодействие между стадиями таким образом, что мышлению инженера-тестера не угрожает мышление проектировщика. Был менеджер проекта, скорее всего паковщик. Он не имел ясного понимания того, что он делал и почему, а отсутствие какой-нибудь позитивной модели своей работы привело его к мысли, что ключевая цель состоит в предотвращении какого бы то ни было взаимодействия. Тестеры не должны были знать, как установить (создать) условия для компонентов, которые они должны были тестировать, а проектировщикам не дозволялось об этом говорить. Яростные споры продолжались днями. Это реально произошло тогда, когда мы потеряли ощущение большой картины.
      Мы должны удостовериться, что взаимодействие между распределенными задачами эффективно, и это означает, что мы должны, помимо соответствия протоколу, держать в голове потребности друг друга. Все, что вам нужно держать в голове для выполнения своей задачи и передачи ее другому, также должны держать в голове ваши коллеги. Ваш результат не поможет никому, если он не говорит о том, что им нужно для выполнения следующего действия. Нам нужно использовать наши собственные способности выполнять работу друг друга, не важно насколько неумело, чтобы контролировать собственную работу.
      Наконец, мы должны понять, что в команде все еще существует черный ящик отдельного программиста. Поток информации -- это не линейная последовательность преобразований, как на конвейере автозавода, для проектировщика это скорее расходящийся веер возможностей, сводящийся к единственному решению. Интуиция проектировщика пока еще не распределена. Такое достижение было бы самым значительным результатом искусственного интеллекта (ИИ).

Что такое программирование?

      Чтобы понять программную инженерию, мы должны понять программиста. Давайте позволим программисту определять требования (идентичные требованиям пользователя) и исследуем сценарий, который заканчивается созданием наипростейшей возможной программы.
      Ада сидит в комнате.
      Вечером в комнате становится темно.
      Ада включает свет.
      Это фундаментальное действие программирования. Есть проблемная область (комната), которая динамична (становится темной). В динамике проблемной области есть порядок (темно будет до утра), который можно анализировать. Есть система, которая может функционировать в проблемной области (лампочка), и у этой системы есть семантика (состояние выключателя).
      Есть желание (в комнате должно быть светло), и есть понимание (что воздействие на выключатель удовлетворит желание).
      Динамические предметные области, системы и семантика детально где-то обсуждаются. Но здесь мы концентрируемся на лучшем осознании, что есть желание и что есть понимание.
      Здесь стоит отметить, что мы подразумеваем под словом "программист". Робот, пишущий все ту же RPG 3 для распечатки счетов, все еще не делает никакого реального программирования вообще, но менеджер проекта, используя Excel для получения интуитивного понимания того, когда бюджет сократится и в чем главные причины, несомненно занимается реальным программированием.

Программирование - игра картостроителя

      У нас есть разумное, имеющее смысл описание того, что на самом деле делают программисты. Два ключевых слова - "желание" и "понимание" - это вещи, которые трудно обсуждать осмысленно на бизнес-языке паковщика, который концентрируется на "объективных" явлениях. Хотя это очень хорошая идея там, где это возможно, но она может тормозить прогресс, когда применяется как абсолютное правило (как паковщики часто и применяют правила).
      Здесь стоит обратить внимание на философский аспект. Для того, чтобы произошло взаимодействие, я должен ссылаться на то, что уже есть в твоей голове. Один из способов, чтобы вещь попала в твою голову, - попасть туда в виде образа чего-то из внешнего мира, а другой - быть частью твоего собственного опыта. Если часть твоего опыта уникальна (например, ассоциация между дымом трубки и вкусом рождественского пудинга, из-за визитов к родным), мы не можем говорить об этом без первоначального определения терминов. Даже после этого у меня нет опыта такой ассоциации, только представление о такой ассоциации. Но если часть твоего опыта разделяется всеми людьми (наша реакция на крик птенца альбатроса [наверное, очень противно кричит - С.К.]), мы можем говорить об ее "объективности", как если бы реакцию на птенца можно было получить с самим птенцом, чтобы взвесить и измерить.
      Необходимость ограничится на работе "объективным" языком аргументируют тем, что это ограничение исходит из структуры организации работы [определяемой сводом положений - законами, правилами, инструкциями и т.д. - С.К.]. Это просто глупо. Как работают журналисты, архитекторы (гражданского строительства) или даже судьи? Это область, где менеджеры вынуждены использовать свое понимание для уменьшения риска из-за ошибок.
      Мы предполагаем, что реальный вывод отсюда -- это то, что мы еще плохо умеем делать программы. Вероятно, мы никогда не научимся этому -- наши аппетиты будут постоянно расти. Мы ограничены культурой и все больше подвержены влиянию тщательно продуманных объективных метрик, которые обычно используют наши коллеги из физики, а не из информационных дисциплин.
      Чтобы достичь чего-либо в программировании, мы должны быть вольны обсуждать и улучшать субъективные факторы, а объективные метрики оставлять для отчетов об ошибках.

  • Страницы:
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12