понедельник, 18 марта 2002 г.

Психотипы в истории программирования

Tак уж случилось, что программирование в истории прошедшего века стало явлением не только научным и технологическим, но также и психологическим, и культурным. А раз так, то к нему может быть применено не только техническое, но и психологическое рассмотрение.
Мне бы хотелось взглянуть на историю программирования через призму Юнговских психотипов. Но я понимаю, что эта задача слишком велика для отдельной статьи, и потому ограничусь только одним признаком - экстраверсией/интроверсией. Рассмотрев, как сказывается проявление этого признака на разных этапах истории программирования.

Понятие экстраверсии/интроверсии в Юнгианской психологии несколько отличается от бытового представления об этих признаках и потому я начну с того, что приведу слова Юнга:"Термины и понятия, под которыми понимается механизм интроверсии и экстраверсии, всегда приспособлены к точке зрения индивидуального наблюдателя. Несмотря на различие формулировок, мы постоянно видим один и тот же общий принцип в основном понимании вопроса, а именно: в одном случае движение интереса направлено на объект, а в другом случае оно отворачивается от объекта и направляется к субъекту, на его собственные психические процессы."

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

Эти философско-психологические рассуждения с возникновением программирования напрямую оборачиваются нюансами технологии. Поскольку те самые "универсалии" (как-то: "человек", "энергия", "товар") зачастую оказываются основными действующими понятиями конкретных программ, в которых вопрос о их существовании уже отпадает сам собой. Так можно ли на этом основании назвать тип "идеального программиста" интровертным? Будь это на самом деле так, история программирования была бы куда проще... и совсем другой.

Однако, если мы посмотрим на программирование шестидесятых-семидесятых годов, на то, что иногда называют "золотым веком" программирования, мы увидим некую подобную картину. Расхожие анекдоты о программистах того времени лишь довершают картину. Это действительно была "интровертная установка" в программировании, которая породила много поистине гениальных концепций и понятийных систем. Родила целый веер языков программирования. Воспитала людей, которые легко оперировали одновременно многими из них. Но эта же "интровертная установка" оставила в стороне конечного пользователя и реальный прагматический мир за стенами комьпьютерных залов. Причем дело здесь было даже не в технических ограничениях, а именно в психологии. Достаточно обратить внимание на тот факт, что возникновение "экранного доступа" к вычислительным машинам не привело к возникновению "экранного интерфейса". На двумерных экранах очень долго использовался строчно-командный (по сути одномерный) интерфейс. Фокус внимания, сосредоточенный на концепциях, упускал из внимания внешнее ("неповторимое, индивидуальное, вещественное").

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

На мой взгляд, в настоящее время второй этап истории программирования подходит к концу. Раздробленность частных реализаций "вещно-чувственного" подхода к программированю достигла предела. Предела экономической целесообразности. Можно сказать большое спасибо этому второму этапу за концепции интерфейсов, за поворот лицом к экономической реальности и к конкретным людям, и двигаться дальше... Вот только куда?
Давайте прикинем, что получится, если присмотреться внимательно к этапам разработки коммерчески успешных программ в наше время. Тех, что показали "неожиданно высокий" коэффициент эффективности. У истоков большинства из них стоял какой-нибудь один автор, пусть даже с помощниками, которые подключились потом. Я ограничусь случаями "малых программ", полностью выполненных одним человеком, чтобы исключить из рассмотрения влияние "внутрифирменных технологий" на процесс программирования. Какие шаги при этом проходит человек от возникновения внешнего заказа до создания продукта, являющегося ответом на него?

Давайте прикинем, что получится, если присмотреться внимательно к этапам разработки коммерчески успешных программ в наше время. Тех, что показали "неожиданно высокий" коэффициент эффективности. У истоков большинства из них стоял какой-нибудь один автор, пусть даже с помощниками, которые подключились потом. Я ограничусь случаями "малых программ", полностью выполненных одним человеком, чтобы исключить из рассмотрения влияние "внутрифирменных технологий" на процесс программирования. Какие шаги при этом проходит человек от возникновения внешнего заказа до создания продукта, являющегося ответом на него?

1)Изучение и формулировка потребностей заказчика. Слово "потребностей" здесь существенно - именно потребностей, а не требований. Поскольку одна и та же потребность может быть удовлетворена различными способами, а именно ее итоговое удовлетворение и является существенным. То есть "свобода средств" остается на этом шаге еще открытой. По своей сути это интровертный шаг - обращенный к часто неосознаваемым субьективным потребностям заказчика.

2) Шаг, который порой кажется излишним, но о котором в той или иной форме мне довелось слышать от всех разработчиков "гениальных" программ. Поиск аналогичных потребностей, возникающих ранее у других заказчиков (для которых, возможно, уже были написаны программы), или которые когда-то обдумывали и отказались от заказа разработки. Неважно, возможно ли получить от них заказ, важна информация о "поле потребностей". Ощущение и представление этого поля. Это огромный массив информации, это слухи, разговоры, мнения, это чужие написанные программы. Но тем не менее это вовсе не "маркетинговое исследование", которое может быть заказано сторонней фирме. Это именно "сырые данные" и непосредственные личные мнения. Они в основном не подлежат вербализации и формулированию, по ним не пишут отчетов... Это экстравертный шаг, ориентация в чувственном пространстве.

3) Формулирование "универсалий" данной предметной области. Формулирование концептуального пространства и определение действующих в нем сущностей. В этот момент происходит "свертка" всей информации, накопленной на предыдущем шаге. Получающееся концептуальное пространство отражает не только один конкретный заказ, но все поле сходных потребностей. И в то же время это концептуальное пространство достаточно просто, поскольку свободно от потребности прямо отражать чувственно-предметное окружение конкретного заказчика или любую иную "объективную реальность". Это ярко выраженный интровертный шаг.

4) Описание на общедоступном (порой полухудожественном) языке сформировавшегося образа виртуального мира. Иногда здесь производится согласование с заказчиком требований заказа. То есть перевод заказа из описания потребностей к описанию требований к конкретной реализации. Выбор путей реализации, поиск аналогий в концепциях других продуктов. Возможно, некоторая коррекция понятийного пространства, если находятся аналоги выбранным понятиям, которые можно использовать. Экстравертный шаг.

5) Программная реализация "универсалий". Прописывание их "абстрактной жизни". Интровертный шаг.

6) Создание "индивидуальных настроек" или индивидуального интерфейса, конкретизирующего абстрактный виртуальный мир под требования конкретного заказа. Экстравертный шаг.

Легко заметить, что эта последовательность шагов никак не вписывается ни в первый - интровертный этап истории программирования, ни во второй - экстравертный. Этот второй этап тоже подходит к концу, и глядя на "гениев сегодняшнего дня", мы можем немножечко заглянуть в будущее. Каково оно, это будущее? Приведенная последовательность шагов кажется противоречащей Юнговскому мнению об устойчивости психотипа у каждого конкретного человека. Как же реализовать ее? Может, разделить между разными людьми? Такие попытки были, но достаточно безуспешные. Дело в том, что объем информации на 2-3-4 шагах превышает возможности вербализации и, следовательно, не может быть передан другому человеку без существенных потерь. По крайней мере эта часть последовательности шагов может быть выполнена только "в одной голове". Как же быть в этом случае с противоречивыми требованиями по интроверсии-экстраверсии? Придется обратиться снова к опыту тех людей, которые это все-таки сделали. И во всех известных мне случаях я наблюдаю один и тот же метод - контролируемый транс. "Измененные состояния сознания", в которых признак вертности меняется на противоположный. "Контролируемость" его выражается в возможности сознательных переходов между состояниями, в зависимости от нюансов решаемой в текущий момент задачи. Это углубленная внутренняя медитация экстравертов, это внешне-ориентированный транс, близкий к "аптайму" боевых искусств у интровертов. Но в любом случае, это навык управления работой своего сознания в различных состояниях. Похоже, что этот навык становится профессиональным требованием к программистам-разработчикам на новом этапе истории программирования. Является ли это требование уникальным? - Ни в коей мере. Писатель, завершивший хотя бы одно художественное произведение от жизненных наблюдений и идеи сюжета до шлифовки деталей, знает эту смену внутренних состояний. И сейчас, возможно, приближается время, когда один хороший законченный фантастический рассказ может стать лучшей рекомендацией для программиста при устройстве на работу, чем несколько изученных по книжкам программистских инструментов. Неужели программирование снова возвращается к своему предначальному, не упомятутому мной ранее этапу своей истории - этапу искусства? Или мы научимся управлять своей психикой с надежностью отработанной технологии? Не знаю...

18.03.2002