про интеллектуальные особенности программистов

Скрипты, базы данных, движки, технологии программирования и т.д.
Аватара пользователя
info@webstarstudio.com
Site Admin
Сообщения: 1566
Зарегистрирован: Пн янв 10, 2005 8:42 am
Контактная информация:

про интеллектуальные особенности программистов

Сообщение info@webstarstudio.com »

Из книги Ю.Д. Бабаевой и А.Е. Войскунского
«Одаренный ребенок за компьютером»
(M.: Сканрус, 2003, с. 217-247)
По заказу Минобразования РФ

Источник http://mgppu.ru/

Who are you, mr. programmer? Интеллектуальные особенности программистов


Мнения специалистов по поводу наличия тех или иных способностей, определяющих успешность деятельности программиста, являются предметом дискуссии. А поскольку нет согласованной точки зрения, в определенной степени страдает методика подготовки будущих "героев компьютерной революции". Ситуация становится еще более запутанной и сложной, если широко распространенные "житейские представления" и традиционные взгляды вступают в противоречие с мнениями ведущих специалистов в области изучения деятельности программистов.

Согласно общепризнанному представлению, профессия программиста требует высокого уровня развития интеллекта . Чаще всего подчеркивается необходимость для программистов таких качеств, как способность к абстрагированию и пониманию отношений между элементами, гибкость мышления, критичность, склонность к планированию, анализу и систематической работе, готовность пополнять знания и переучиваться; признаются существенными и вербальные, и невербальные компоненты мышления. На качественно различных этапах работы программиста (анализ задачи, составление блок-схемы, разбиение на модули, кодирование, отладка, стыковка модулей, документирование, сопровождение и т.п.) перечисленные свойства представлены в разных соотношениях.

По словам Р.Гэбриела, программист "держит в голове множество фактов, не упускает из виду ни одной мелочи, старается воспринимать вещи такими, какие они есть, выражает свои мысли четко и ясно, твердо знает, чем стоит заниматься, а чем нет" ( Computerworld Россия , 02.03.99, с.18). "Программирование, как и всякая сложная деятельность, требующая решения задач, представляет широкие возможности для развития мышления", – справедливо замечает В.В.Рубцов (1996, с. 230).

Представление о том, что программирование чрезвычайно близко к математике и логике , является одним из самых распространенных в массовом сознании. В то же время ряд видных специалистов высказывает противоположное мнение. "Тезис о математическом характере знаний, лежащих в основе программы, очевиден лишь для математических применений ЭВМ. В общем случае можно сомневаться в первичности математического знания по отношению к программам" ( Цейтин , 1979, с. 129). Имеются данные, согласно которым обучение программированию и применению компьютеров способствует развитию математических знаний; при этом может иметь место также и обратное влияние ( Dudgale , 1994; Oprea , 1988). А.П.Ершов признает полезность математических знаний для программиста, однако вместе с тем считает необходимыми для данной профессии еще и инженерные способности и навыки ( Ершов , 1972).

Э.Дийкстра ( Dijkstra , 1976) различает логическое рассуждение (reasoning) и неформализуемое обдумывание, или размышление (pondering) – последнему сложнее научить, хотя оно необходимо для выполнения профессиональных задач. Приведенные выше мнения высказаны довольно давно; программирование во многом изменилось по сравнению с тем периодом, когда такого рода вопросы особенно активно обсуждались. В настоящее время системы программирования приблизились к так называемому конечному пользователю: подготовкой программного обеспечения продуктивно занимается множество людей, в том числе никогда профессионально не обучавшихся математике в ВУЗах. Учитывая это обстоятельство, а также приведенные выше мнения, следует, по-видимому, принять, что при оценке одаренности в области программирования едва ли стоит исходить из примата логико-математических способностей.

В качестве альтернативы сближению программирования с математикой было высказано предложение рассматривать программирование как особый вид искусства , занятие которым требует соответствующих способностей – правда, не вполне ясно, каких именно. Так, Р.Гэбриел отмечает, что "процесс разработки программного обеспечения для талантливых программистов – это, безусловно, искусство" ( Computerworld Россия , 02.03.99, с.18). При таком подходе на первый план выдвигаются эстетические критерии оценки качества программ ( Ершов , 1972; Knuth , 1974). По мнению Д.Кнута, настойчиво именующего программирование не иначе как искусством, можно говорить и об "элегантных" (или "сверкающих", "благородных" и т.п.), и об откровенно уродливых программах ( Knuth , 1974).

Данная точка зрения нередко критикуется: относительно немногие признавали и признают ведущую роль эстетических критериев в оценке программного продукта. Так, если ограничиться мнениями экспертов, высказанными в ходе недавнего опроса ( Computerworld Россия , 02.03.99), то можно упомянуть, что Р.Шреппель считает, что "в повседневной работе программиста элегантность не входит в разряд приоритетов", Б.Миддлтон отмечает, что "надежность и долговечность продукта для фирмы гораздо важнее блестяще написанного кода", Г.Буч стремится "поменьше говорить об элегантных алгоритмах и побольше об элегантной архитектуре", Б.Лоуэнсон связывает элегантность с "отношением клиентов к продукту", а по мнению Дж.Уолтерса, "универсального элегантного решения не существует в принципе. Некоторые задачи настолько просты, что об элегантности говорить не приходится. Многие разработчики стремятся писать как можно более сжатый и запутанный код, нарекая приложения элегантными вследствие их новизны. Они считают, что им удалось достичь небывалых высот, но никто ничего не может понять в их программах" ( Computerworld Россия , 02.03.99, с.18).

Анализ стилевых предпочтений в обучении программированию и в составлении программ профессионалами позволяет в некоторой степени сгладить противостояние указанных точек зрения. Например, Ш.Текл различает " мягкий " (soft) и " жесткий " (hard) стиль: первый – художественный, несистематический, с неравномерной проработкой деталей, а второй – технологичный, систематический, тотально контролирующий ход вычислительных процессов ( Turkle , 1984). Два этих стиля программирования соответствуют, на наш взгляд, несовпадающим требованиям к степени "прозрачности" (транспарантности) компьютеров и вычислительных процессов. Так, П.Рабардель отмечает, что зачастую вполне достаточно прозрачности " черного ящика " (именно прозрачности, вопреки семантике слова), привычного и для теоретической кибернетики, и для программистской практики: интерфейсы "исчезают в когнитивном плане" ( Рабардель , 1999, с. 209) и "становятся необходимыми в ситуациях отклонения от нормы" ( там же , с. 210). И при отклонении от нормы, и в некоторых иных случаях актуальной становится совершенно иная степень прозрачности, получившая наименование " стеклянный ящик " ( Рабардель , 1999): внутренние процессы переработки данных и оперирования с величинами должны быть понятны и в определенном виде наблюдаемы, контролируемы.

Как представляется, для реализации "жесткого" стиля у программиста должна иметься возможность без труда варьировать степень контроля прозрачности и переходить от "черного ящика" к "стеклянному ящику"; в то же время приверженец "мягкого" стиля программирования скорее удовлетворится "черным ящиком" и нечасто станет прибегать к вполне прозрачному "стеклянному ящику". В итоге Ш.Текл констатирует, что столь различающиеся подходы к составлению компьютерных программ в конечном счете оказались одинаково эффективными ( Turkle , 1984). Вывод Ш.Текл, согласно которому обладатели во многом противоположных психологических качеств в равной мере успешно справляются с составлением программ для компьютеров, подтверждается в относительно недавно выполненном исследовании ( Houle , 1996): показатели когнитивного стиля оказались не зависящими от других характеристик деятельности обучающихся программированию.

Самое время обратить внимание на то, что два стиля программирования были правомерно соотнесены Ш.Текл с показателями внутреннего/внешнего локуса контроля и с некоторыми разновидностями когнитивного стиля (а именно, полезависимостью/поленезависимостью ).

Пояснение этих терминов требует некоторых комментариев. Сначала остановимся на введенном американским психологом Д.Роттером представлении о локусе контроля ( Rotter , 1982) . Оно характеризует склонность человека принимать полную ответственность за свои действия или приписывать эту ответственность каким-то внешним силам. В первом случае, как легко догадаться, локус контроля – внутренний (или, как часто говорят, интернальный ), во втором – внешний ( экстернальный ). Соответственно людей с различающимися типами ответственности за совершаемые действия часто именуют интерналами или экстерналами . Согласно результатам исследований, интерналы уверены в себе, последовательны и доброжелательны; экстерналы же проявляют неуверенность, тревожность, подозрительность, а конформность уживается в них с агрессивностью. "Жесткий" стиль программирования несколько более характерен для программистов с внутренним локусом контроля, чем для "экстерналов", а "мягкий" стиль скорее характеризует "экстерналов". Тем не менее преждевременно было бы говорить о совпадении понятий: налицо только тенденция к сближению, не более того.

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

До сих пор ведутся споры о том, насколько полно охватывает психология познавательных процессов представление о когнитивных стилях ( Холодная , 1990, 1998, 2002; Шкуратова , 1994, 1998). Становится все более очевидным, что стилевые характеристики описывают психологическую реальность в целом , не разделенную для удобства исследования на отдельные "полочки", как-то: психология познания, психология мотивации, психология личности, психология общения и т.д. Поэтому разговор об интеллектуальных способностях программистов волей-неволей затрагивает их личностные и коммуникативные особенности. В данном разделе, правда, об этом будет говориться вскользь, поскольку упомянутые аспекты будут подробнее рассмотрены в последующих разделах книги.

О зависимости или независимости от "поля" (т.е. окружающей среды) следует поговорить чуть подробнее. Это параметр, в определенной мере определяющий степень автономности и устойчивости существования субъекта и в мире физическом, и в мире социальном. Поленезависимый человек в большей степени, чем его зависимый от поля антипод, опирается на внутренние ощущения, собственные эталоны поведения и поставленные перед самим собой цели; полезависимый человек, обладая, конечно, собственными программами поведения, все же в значительной степени подвержен влиянию и давлению внешней среды. Поленезависимость понимается как "умение преодолевать видимое поле и структурировать его", "дифференцировать, расчленять ситуацию, … выделять отдельные элементы" ( Холодная , 1990, с. 7), как "склонность детализировать и дифференцировать свои познавательные впечатления, ориентируясь при этом именно на релевантные элементы воспринимаемого материала" ( Холодная , 1998, с. 55).

Полезависимость же означает, что "все элементы видимого поля оказываются жестко связанными, детали переживаются как трудно отделимые от их пространственного "фона" ( Холодная , 1990, с. 7). Полезависимые люди в значительно большей степени, чем поленезависимые, ориентируются на социальные стимулы, ценят добрые отношения с окружающими, "предпочитают занятия, которые предполагают контакт с людьми" ( Холодная , 1990, с. 12). Имеется, однако, целый ряд полученных отечественными и зарубежными психологами данных о возможной мобильности когнитивного стиля : поленезависимым субъектам удается временами действовать и в манере полезависимых, а полезависимым людям также бывает присуща определенная мобильность, и они в каких-то ситуациях способны действовать, как поленезависимые ( Холодная , 2002; Шкуратова , 1994). И одним, и другим мобильность приносит преимущества – может статься, чрезвычайно существенные.

И вот почему. "Можно предположить, - пишет исследователь, - что за феноменом мобильности стиля скрывается механизм творчества. Творческие люди демонстрируют незаурядные способности в совмещении способов поведения, характерных для лиц с разным стилем" ( Шкуратова , 1998, с. 55). Иллюстрируя высказанное предположение, И.П.Шкуратова упоминает одного из ведущих создателей психологической теории когнитивных стилей американского психолога Генри Уиткина, способного, как считается, совмещать и полезависимый, и поленезависимый стиль поведения, а также … Александра Сергеевича Пушкина – с опорой на биографическую книгу о нем Ю.М.Лотмана: Пушкин "уклоняется от односторонности", но и "не растворяется в чужих характерах и нормах" ( Лотман , 1981, с. 35). "Удивительное сочетание мобильности, которая производила иногда впечатление легкомыслия, и целостности, целенаправленности, возможно, и составляло основу таланта великого поэта" ( Шкуратова , 1998, с. 55).

Исследователи давно уже пытаются разгадать загадку гениальности А.С.Пушкина, и еще одна подсказка – вовсе не помеха. А дискуссия по поводу близости представлений о стиле и о способностях не затихает. Так, описывая понятие стиль мышления , Р.Стернберг говорит о недопустимости отождествления стиля со способностями : стиль – это скорее способ реализации способностей ( Sternberg , 1999). При этом Р.Стернберг справедливо подчеркивает, что хотя стилевые различия чрезвычайно существенны для оценки эффективности предпринимаемых действий, они плохо поддаются фиксации посредством традиционных психометрических тестов. Вообще-то критерии разграничения стилей и способностей были сформулированы еще в 1967 г . ( Witkin, Oltman , 1967). Но надо отметить, что в рамках дискуссии постоянно предлагаются и аргументируются новые идеи и мнения: следует упомянуть, к примеру, приведенное выше понимание когнитивных стилей как метакогнитивных способностей ( Холодная , 2002).

Но перейдем снова к разговору о разработчиках компьютерных программ. Поленезависимые субъекты, по данным Ш.Текл, встречаются среди них чаще, чем полезависимые ( Turkle , 1984). Это вроде бы не выглядит удивительным. А если вспомнить о предположении И.П.Шкуратовой?.. Ведь для программиста, как и для любого другого причастного к творчеству человека, мобильность когнитивного стиля могла бы представлять собой подарок судьбы. Не в мобильности ли стиля – одна из возможных разгадок феномена креативности, о котором так мало известно, в особенности применительно к составлению программ для компьютеров? Словом, напрашивается достаточно перспективная программа психологических исследований, и определенные шаги в этом направлении уже сделаны ( Холодная, Кострикина , 2002).

Организационная подготовка последующей работы в указанной области в заметной степени определяется доступностью для исследователей-психологов наиболее способных, талантливых и творческих программистов. Это представляет собой, однако, едва ли выполнимую задачу: в психологических исследованиях испытуемыми почти всегда служат студенты или школьники. На этот факт обратил в свое время внимание Б.Куртис ( Curtis , 1986) и высказал определенную тревогу: итоги экспериментов с участием новичков или малоквалифицированных специалистов едва ли дают основания в полной мере характеризовать человеческую составляющую профессиональной деятельности в области программирования. Даже исследования, в которых участвуют опытные сложившиеся профессионалы, являются большой редкостью: подавляющее большинство исследований в области «человеческого фактора в программировании» выполнена в ходе обучения программированию новичков или же в лучшем случае на материале сравнения деятельности профессионалов с деятельностью обучающихся программированию.

Да и профессионализм, или опыт работы и приобретенная квалификация сами по себе, как до сих пор полагают некоторые "зубры" от программирования, частенько гроша ломаного не стоят – к примеру, основатель компании Sun Microsystems Билл Джой заявил летом 2002 г . в газете New York Times : "Правда в том, что великие программные продукты пишут великие программисты, а не толпа народу, работающего до изнеможения" (цитата эта помещена в переводе на русский язык в подборке, составленной на веб-сайте Грани.ру: см. grani.ru/opensource/quotes/ ). Не случайно для определения лучших профессионалов, или т.н. "суперпрограммистов", чаще всего применяются не формальные оценки, а опрос экспертов (Долныкова, Чудова, 1997; Sonnentag, 1995).

Нетрудно заметить, что спор о способностях к программированию по сути сместился в область обсуждения критериев оценки качества программ и конкретных показателей профессионального мастерства программистов. При этом, правда, разговор не становится более определенным. Формальные показатели качества программ с полным на то правом получили наименование "реликтовых критериев" ( Громов , 1985, 1993), а содержательные показатели, которые могли бы охарактеризовать грамотность постановки задачи программистом или удобство применения завершенной им программы, в значительной степени субъективны.

Оценка может быть проведена при условии строгого соответствия действий программистов стандартным методикам составления программного обеспечения (например, структурным методам); при этом следует иметь в виду, что такого рода методы в значительной степени нивелируют индивидуальные показатели мастерства, а возможно, и способностей. Да и вообще количественные оценки скорее подходят для процессов кодирования – как считается, менее творческому занятию, нежели составление алгоритма работы программы, продумывание ее структуры и блок-схемы.

Что же касается грамотной постановки целей программирования, то уже давно показано, что рядовые программисты весьма эффективно реализуют поставленные перед ними цели, однако не всегда обладают способностями самостоятельно выстроить адекватную иерархию таких целей во взаимодействии с заказчиками ( Parkin , 1975; Weinberg, Schulman , 1974). Грамотная постановка задачи включает фиксирование и донесение до конкретного исполнителя-программиста приоритетных целей составления программ, однако менеджеры зачастую пренебрегают подобной детализацией или им недостает подготовки для выполнения такой задачи. Тем самым труд по выявлению известных заказчику (а еще чаще – неизвестных, т.е. никем по сути не отрефлексированных) приоритетов перекладывается на плечи самих программистов. На них же "валятся все шишки", если их выбор вместе с итоговым результатом оказывается неудачным. Кому и как расставлять приоритеты – эта проблема, по-видимому, так и не нашла приемлемого для всех решения, поскольку до сих пор нетрудно натолкнуться на рекомендации "с бородой": не стоит забывать о такой проблеме и тем паче ее игнорировать, неплохо бы привлечь к ее обсуждению какого-нибудь знающего человека – как-никак, два ума лучше, чем один ( Berkun , 2001).

Не менее дискуссионны попытки разработать конкретные тестовые методики или целые батареи психологических тестов , способных оказать помощь при оценке и диагностике способностей к программированию. Многие исследователи и практики признают, что эта диагностика ни в коем случае не должна сводиться к измерению IQ. Попытки применения универсальных психологических тестов не привели к однозначным результатам в области программирования. Уже в первых постановочных и обзорно-аналитических публикациях по психологическому отбору программистов ( McNamara, Hughes , 1961; Rowan , 1957) и по методам такого отбора сообщалось, что на ранних порах для отбора применялись тесты познавательных способностей и личностные тесты, а наряду с ними аппаратурные тесты на логическое мышление и обычные интервью. Для эффективного составления программ оказались существенными способности к логическому рассуждению и к абстрагированию.

Специализированные тесты и батареи тестов для отбора программистов под наименованием Computer Programming Aptitude Tests/Battery (CPAT/CPAB) разрабатывались в свое время на основе тестов интеллектуальных способностей и включают следующие пять компонентов: словесное описание смысла высказываний, математические рассуждения, обработка символьных строк, обращение с числами и использование блок-схем. Они довольно широко применялись в 70-80 годы, однако без особого успеха. "Тесты на способности к программированию существуют с первых дней программирования, но их значимость и надежность не были удовлетворительно продемонстрированы" ( Шнейдерман , 1984, с. 18). Да и в недавнее время вновь отмечено, что предсказательная способность тестовой батареи СРАВ – не более чем "средняя", или "умеренная" (см.: www.rpi.edu/~verwyc/Chap9tm ).

В отличие от батареи СРАВ, тест профессиональных знаний программиста ВТОРР построен иначе и включает вопросы (числом 50) по блок-схемам и логике, по процедурам ввода-вывода, работе с файлами на диске и на лентах, связанных с программированием операций, проектированием программ, базами данных и осведомленностью в ценах ( Шнейдерман , 1984, с. 43). Нетрудно увидеть, что многие перечисленные фрагменты знаний устарели, да и не столь явно устаревшие вопросы также требуется постоянно модернизировать.

Условия работы программистов, состав необходимых для них умений и знаний постоянно развиваются. Анализ показывает, что специализированные тесты, предназначенные для отбора программистов, по-прежнему продолжают разрабатываться. Так, " измерению потенциала программиста " посвящен Walden Programmer Analyst Aptitude Test, или WPAAT ( Winrow , 1999). Данный тест разработан компанией Walden ( www.waldentesting.com ) на основе составленного еще в конце 1960-х годов теста оценки способностей к программированию Aptitude Assessment Battery: Programming (AABP). Тест WPAAT совмещает решение кандидатом простых практических задач, выполнение символьных преобразований, манипулирование данными, понимание инструкций, выделение ключевых блоков информации, идентификацию ошибок и т.п. Тест, как считается, прошел проверку и обладает предсказательной силой ( Winrow , 1999).

На "рынке" отбора программистов имеются и другие продукты. Можно, к примеру, упомянуть подробно обоснованное предложение протестировать программистов в онлайновом режиме непосредственно на веб-сайте организации-разработчика самого теста, а также процедуры его применения. Тест LPAT (Language Free Programmer/Analyst Aptitude Test) рекламируется как тест оценки способностей к программированию, не связанный с какими-либо известными программисту языками программирования, не зависящий от объема таких знаний (см.: www.personnelselection.com/programmer ). Тестируются три основных, по мнению разработчиков, умения программистов: (1) рассуждения и решение задач (в частности, определение релевантной, т.е. значимой для решения конкретной проблемы информации, а также применение диаграмм); (2) численный и логический анализ (в частности, преобразование словесных идей в формулы, следование логическим правилам при анализе задач, способность обучиться и применять соответствующие правила); (3) применение и анализ письменных документов (в частности, понимание письменных требований и понимание Basic English, т.е. упрощенного подмножества английского языка в профессиональной сфере).

Проверка знания английского языка не должна удивлять: как уже говорилось в начальных разделах книги, развитые страны во множестве приглашают на работу программистов из развивающихся стран. Соответственно тестирование знания языка является насущной необходимостью. Один из самых больших в мире отрядов программистов-мигрантов состоит из выпускников индийских университетов и технических институтов. Индия – в числе мировых лидеров по экспорту программистов. Неудивительно, что в Индии также озаботились вопросами тестирования способностей к программированию. Такая работа, к примеру, проводится в психологическом отделении индийского института статистики ( Dutta Roy , 2001). Тест, разработанный специалистами из Индии, охватывает следующие блоки, соответствующие конкретным видам способностей: способности к вербальным рассуждениям, к оперированию численными сериями, к логическому выводу, к пониманию словарных значений, к работе с анаграммами, к быстрому пониманию сходства ( Dutta Roy , 2001).

Для разработки теста психологам из института статистики понадобилось выявить (путем опроса специалистов) наиболее существенные для программистов умения – среди них понимание проблем, встающих у пользователей программного обеспечения; тестирование и исправление программ; кодирование; модификация программ ( Dutta Roy , 2001). Несколько менее существенными оказались такие умения, как преобразование спецификаций в детальные инструкции; подготовка инструкций для операторов; составление простых программ для поиска данных; документирование программ; составление блок-схем; руководство начинающими программистами; оказание помощи коллегам-программистам; составление конфигураций компьютеров для пользователей; ввод данных; сотрудничество с производителями компьютеров ( Dutta Roy , 2001). Нетрудно заметить, что многие из тестируемых способностей выходят за рамки интеллектуальной сферы, что, впрочем, вполне закономерно.

Специалистами – и психологами, и преподавателями информатики, и руководителями занимающихся разработкой программного обеспечения организаций – высказаны диаметрально противоположные точки зрения на целесообразность и на саму возможность применения психологических тестов для выявления наиболее эффективно работающих программистов. Столь же дискуссионны и мнения относительно перспективности применения психометрических тестов для отбора учащихся, которые смогут успешно обучаться профессии программиста (на специализированных курсах, в ВУЗах и т.п.). В одном из исследований ( Schmidt et al ., 1980) показано, что результаты применения психометрических тестов позитивно коррелируют с показателями будущего профессионального мастерства программистов с достаточно высоким значением коэффициента корреляции (равным 0,73).

Согласно же мнению Б.Шнейдермана, тесты "не дают сколько-нибудь удачных прогнозов того, как человек будет работать" ( Шнейдерман , 1984, с. 70). Причиной может быть высокая динамичность и изменчивость программирования: тесты с требующими длительного времени процедурами валидизации не успевают за изменениями во внешних условиях и в структуре деятельности программистов. В данном случае имеется в виду смысловая адекватность , т.е. "степень, в которой некоторый тест покрывает область важных элементов профессиональной деятельности испытуемого" ( Осберн , 1991, с. 240).

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

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

Вероятно, можно думать о разработке комплексных психодиагностических процедур, в которых бы разумным образом сочетались позитивные стороны экспертных, тестовых и других методов. Наверное, можно думать и о разработке специализированных оценочных методик. Однако в отношении последнего утверждения мнения специалистов вновь разделились.

Известны данные о связи специализированных тестов - например, Computer Science Aptitude Test - с тестовыми и учебными показателями математических способностей ( Coates, Stephens, 1990). С одной стороны, сообщается об эффективности отбора программистов на основе тестов способностей (aptitude) и достиженческих (achievements) тестов ( Neuman, Nomoto, 1990), с другой - отрицается полезность и необходимость специализированных тестов (напр., Electronic Data Processing Test) в ситуациях применения стандартных универсальных батарей тестов (General Multiple Aptitude Test Battery) ( Besetsny et al., 1993). В то же время сообщается о новых разработках тестовых процедур – например, опирающихся на адаптивные (подстраивающиеся в ходе исследования к актуальным результатам, продемонстрированным тестируемым, и изменяющим тестовые задания в реальном времени) методы тестирования – для отбора программистов на основе тестов математических способностей ( Overton et al., 1997; Zickar et al ., 1999).

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

На взгляд авторов, определенные качества, скажем, гибкость и критичность мыслительной деятельности или способности к абстрагированию реально необходимы программисту, однако степень необходимости может сильно разниться. А недостаток каких-то на первый взгляд необходимых качеств может без труда компенсироваться изобилием других – может быть, на данном уровне развития знаний менее очевидных в плане своей необходимости интеллектуальных качеств.

Авторы исходят при этом из того, что современное программирование – существенно более широкая и разносторонняя область, нежели испытание интеллекта и знаний. В нем могут найти себя люди с самой разной подготовкой (не обязательно математической), обладатели самых разных наборов интеллектуальных качеств, когнитивных стилей и рабочих навыков. Не меньшее или даже большее значение, чем наличные навыки, имеет готовность программиста обновлять знания и видоизменять навыки, не пытаясь зафиксироваться на уже достигнутом и уже приобретенном опыте. На развитие именно таких качеств следует ориентировать подготовку и переподготовку программистов, такие качества следует учитывать при диагностике одаренности к этому роду деятельности.

Личностные особенности программистов
Изучение профессионально значимых психологических особенностей программистов не может ограничиваться анализом их когнитивной сферы. В качестве подтверждения данного положения сошлемся на интервью по случаю переиздания ( Weinberg, 1998) - спустя четверть века - первой в мире монографии по психологии программирования ( Weinberg , 1971). Автор монографии Г.Вайнберг заметил в интервью: "Лишь немногие неинтеллектуальные люди претендуют на работу в качестве программиста, и таких людей нетрудно выявить без всяких тестов. Однако многие из тех, кто претендует на такую работу, обладают дисфункциональными личностями, плохими рабочими навыками, неспособны обучаться - между тем определить все это гораздо сложнее. Вот почему таким факторам следует уделять большее внимание, чем так называемым тестам интеллекта или знаний" (с данным интервью можно ознакомиться на веб-сайте www.dorsethouse.com/news/intpsy.html ). Тем самым отмечается актуальность изучения личности программиста .

При изучении личности и особенностей "образа мира" программистов высокой квалификации показано ( Долныкова, Чудова , 1998), что для них характерны упорство, стремление создать свой мир в пределах компьютерной среды, а также неприятие барьеров и запретов, существующих в реальном мире. Предпосылками успешной деятельности программиста в этой работе признаются следующие черты: дистанцированность от других людей, интровертированность, погруженность в собственные интеллектуальные переживания.

При обсуждении этих результатов в контексте проблем одаренности детей и подростков неизбежно встает вопрос, решение которого требует многолетних и развернутых теоретических и эмпирических исследований. Вопрос вот в чем: должны ли будущие талантливые профессионалы-программисты обладать такого рода способностями уже с юных лет, либо такие способности формируются гораздо позднее – отчасти под влиянием специфики избранной ими и успешно складывающейся карьеры? Ответа на этот вопрос пока нет.

При назывании образных ассоциаций, которые вызывает у них компьютер, на первом плане у программистов оказываются образы, связанные с творением новой реальности ("особого мира"), а работа за компьютером служит своего рода заменителем социальных взаимодействий ( Долныкова, Чудова , 1998). «Наиболее творческим аспектом программирования для большинства программистов является разработка целостной структуры программы. … Можно собрать воедино собственные идеи по поводу того, как организован мир, и воплотить их в нечто конкретное. Части моего личного образа мира позволено преодолеть ограничения моего разума и обрести некую форму во внешнем мире» ( Smith , 2000).

Данный автор предлагает различать две разновидности стремления программистов к контролю : во-первых, это своего рода мелочное контролирование множества разнородных мельчайших сущностей, а во-вторых, это стремление к организации конструкций из крупномасштабных блоков и, соответственно, контроль за подобной организационной деятельностью ( Smith , 2000). 25-летний участник веб-форума "Программисты – тоже люди?" полагает, что эти виды контроля частично переносятся в иные сферы жизненного поведения и влияют на характер программиста. Согласно его точке зрения, "каждодневные составления алгоритмов и предугадывания поведения программы изменяют стиль мышления и в житейских делах. Автоматом просчитываются (предугадываются) вытекающие последствия от своих действий. На основании этого хочу предположить, что программисты не легкомысленные люди" ( http://onlife.ru/que.phtml?id=216 ).

В сравнительно давно уже проведенном О.В.Волконской (под руководством Е.Ю.Артемьевой) исследовании оказалось, что профессиональные программисты имеют сложившийся четко разработанный образ будущего, они более самодостаточны и реалистичны, чем специалисты более низкой квалификации. Свободные самоописания программистов оказались беднее, чем у непрофессионалов ( Артемьева , 1999).

При недостатке эмпирических исследований, посвященных детям и подросткам, можно отметить, что образ мира увлеченных ИТ детей включает "компьютеризированные образы", приобретающие свойство естественных элементов окружения ( Щеглова, 1999). Особенности и трудности включения детьми компьютеров и электронных игрушек в картину мира подробно описаны и Ш.Текл ( Turkle , 1984). Что же касается профессионалов, то, по мнению Б.Миддлтона, "основная работа программиста заключается в том, чтобы строить воздушные замки, а затем совершенствовать их до тех пор, пока они не обретут прочность" ( Computerworld Россия , 02.03.99, с.18).

Набор личностных качеств, которыми должен обладать программист, согласно распространенному мнению, включает эмоциональную устойчивость, пунктуальность, аккуратность, экономность (в использовании вычислительных ресурсов), высокую работоспособность и некоторые другие качества. Участник веб-форума "Программисты — тоже люди?" 42-летний Сергей сообщил о себе: "Я пишу проги уже лет 15, и не надоело. Более того, в отпуске не был уже лет 5… Не знаю как другие, но я люблю одиночество…" Относительно программистов правильнее всего было бы, по его мнению, сказать следующее: "Мы такие же, как все, тоже любим, тоже ненавидим, тоже живем. И ругать нас за то, что мы видим мир немножко под другим углом, я думаю, неправильно…" Вот что еще он считает нужным добавить: "Программирование на любом языке требует повышенного внимания, предельную логику в мышлении, и усидчивости. … От программистов редко можно услышать неопределенный ответ. Или да, или нет. А все потому, что неопределенность это баг программы, причем трудно отлавливаемый…" ( http://onlife.ru/que.phtml?id=216 ).

Более образно выразился в свое время замечательный ученый и педагог академик А.П.Ершов: "Программист должен обладать способностью первоклассного математика к абстракции и логическому мышлению в сочетании с эдисоновским талантом сооружать все, что угодно, из нуля и единиц. Он должен сочетать аккуратность бухгалтера с проницательностью разведчика, фантазию автора детективных романов с трезвой практичностью экономиста" ( Ершов , 1972).

Наверное, лишь немногих профессионалов можно с полным на то правом охарактеризовать как обладателей именно таких похвальных качеств. В программировании нашли себя представители самых разных личностных типов . Попытки связать результаты личностных тестов с эффективностью программирования не привели пока к желаемому результату.

По мнению Б.Шнейдермана, психологический портрет программиста должен строиться с учетом следующих личностных характеристик: настойчивость/пассивность, интроверсия/экстраверсия, внутренний/внешний локус контроля, высокая/низкая возбудимость, высокая/низкая мотивация, высокая/низкая терпимость к неопределенности, умение быть точным, скромность, способность переносить стресс. Кроме того, он приводит данные о предпочтении людьми с аналитическим стилем мышления сложного стиля программирования, а людьми с эвристическим (интуитивным) стилем мышления - простого стиля программирования ( Шнейдерман , 1984, с. 64-68).

Этот же автор полагает полезным применять для оценки программистов известный психологический тест Майерс-Бриггс, основывающийся на разработанной К.Юнгом теории психологических типов ( Юнг , 2001). Соответствие данного теста юнгианской психологии подвергается, правда, время от времени сомнению ( Barbuto , 1997), тем не менее подобные сомнения не стали массовым явлением среди психологов. Надо заметить, что в литературе можно встретить утверждение, согласно которому входящая в этот тест шкала интроверсии/экстраверсии (мы полагаем, что различие между интровертами и экстравертами в достаточной мере знакомо читателям) может быть действительно связана с эффективностью программирования, в то время как предложенная К.Юнгом классификация личностных типов в целом иррелевантна относительно достижений в программировании ( Pocius , 1991). Данное мнение, однако, частично опровергается в работе ( Whitley, 1996): в ней показано, что тест Майерс-Бриггс действительно может определять некоторые параметры эффективности освоения навыков программирования и составления компьютерных программ.

Личностные тесты, согласно нашей точке зрения, могут помочь определить некоторые черты, которые предположительно способствуют освоению программирования и, быть может, успешному составлению программ, однако этих тестов недостаточно для диагностики способностей и тем более одаренности в области программирования . В профессиональном программировании могут добиваться успехов люди с достаточно разнообразными чертами личности. М.Вайнберг полагает, что стандартные личностные тесты совершенно неприменимы для отбора программистов, и в особенности потенциально высококлассных программистов ( Weinberg , 1971). В то же время стоит прислушаться к мнению Ш.Текл: "В стиле программирования отражается стиль личности" ( Turkle , 1984, p. 105). С этим замечанием согласились бы многие специалисты.

Замечено, что для программистов процесс работы над составлением программы довольно часто представляет больший интерес, нежели достижение результата ( Долныкова, Чудова , 1998; Weinberg , 1971). Творчески работающему программисту присуща глубокая внутренняя мотивация (иногда говорят и о т.н. "процессуальной" мотивации). О внутренней, или интринсивной мотивации уже говорилось в книге. Она в определенном смысле способствует энтузиастической работе и, увы, иной раз доводит до фанатизма. Подобному отношению к профессиональной работе свойственны как огромные «плюсы», так и «минусы» – иной раз тоже огромные. Примеры (в основном, надо признать, недокументированные) преимуществ и недостатков обычного энтузиазма или нередкого фанатичного отношения к процессам составления компьютерных программ во множестве приводятся в популярных изданиях.

В программировании, как и во многих других видах деятельности, очевидные недостатки являются естественным продолжением вполне очевидных достоинств. Например, культ ничем не ограниченного творческого начала иной раз граничит с излишним оригинальничаньем, нарушением оговоренных спецификаций и элементарной недисциплинированностью, что выражается в срыве сроков завершения работы, неисправленных неочевидных или даже достаточно очевидных ошибках, невозможности состыковать разработанные членами программистского коллектива программные модули и других бедах.

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

Фактор увлеченности работой , как отмечалось выше, является одним из основных при характеристике одаренности. Мотивация радости , которую способны испытывать программисты в ходе своей работы, описывается в книге Ф.Брукса (1979), опубликованной более четверти века тому назад. Книга была сравнительно недавно переиздана в расширенном виде ( Brooks , 1995), однако с сохранением тех страниц, которые заслуживают обширного цитирования в контексте наших рассуждений. Необходимо отметить, что радость творчества свойственна и самому Ф.Бруксу. (Одному из авторов довелось осенью 2002 г . встретить Фредерика Брукса на международной конференции: можно смело засвидетельствовать, что почтенный профессор по-прежнему горит жаждой познания, а одним из самых новых его увлечений является исследование поведения человека в системах виртуальной реальности.)

В упомянутой книге не только описывается мотивация программистов, но и делается попытка расклассифицировать источники данной мотивации и сами мотивы. Яркие формулировки Ф.Брукса, приведенные им примеры и аналогии нисколько не утратили своей актуальности. Судите сами.

"Первое – это абсолютная радость творчества. … Мне кажется, что прообразом этой радости творчества должно быть то удовольствие, с которым всевышний занимался сотворением мира… Второе – это радость создания вещей, полезных другим людям. … Третье – это очарование, заключенное в самом процессе создания сложных, загадочных объектов, состоящих из взаимосвязанных, непостоянных частей, и наблюдения за тем, как они работают в запутанных циклах, сохраняя верность принципам, заложенным в них с самого начала. Вычислительная машина обладает притягательной силой биллиарда или музыкального автомата, доведенных до логической завершенности. Четвертое – это возможность постоянно учиться, вытекающая из непрерывно меняющегося характера задачи. … И последнее – это удовольствие работать с очень гибким материалом. Программист, как поэт, работает почти исключительно головой. Он строит свои замки в воздухе и из воздуха только силой своего воображения. Очень редко материал для творчества допускает такую гибкость, такую возможность столь частых улучшений и переделок и такими простыми средствами позволяет осуществлять громадные замыслы" ( Брукс , 1979, с. 13).

В этой пространной, но вместе с тем весьма насыщенной нетривиальными идеями цитате нетрудно обнаружить как черты, свойственные всем одаренным людям вообще, так и специфические особенности, характеризующие талантливого программиста. Ф.Брукс продолжает: «Материал поэта – слова, и результат – те же слова; в отличие от стихотворца, программист создает программный продукт, реальный в том смысле, что сам программист движется и работает, производя видимый результат, отличный от него самого. Он печатает результаты, чертит рисунки, производит звуки, управляет движением руки. Волшебство мифов и легенд стало явью в наши дни. Вы печатаете на клавиатуре заклинание, и вот экран дисплея оживает, показывая объекты, которых не было и могло не быть никогда. Программирование доставляет нам радость, потому что позволяет удовлетворить стремление к творчеству, глубоко заложенное в каждом из нас, и разделить это чувство радости с другими" ( Брукс , 1979, с. 14).

Современные авторы также полагают мотивационные характеристики чрезвычайно существенными для профессионального, и особенно для высококвалифицированного занятия программированием. По мнению Б.Миддлтона, "основное качество, которое необходимо выдающимся программистам, - это страстный интерес к самому процессу разработки" ( Computerworld Россия , 02.03.99, с.18). Легко видеть, что мотивационные аспекты программистского творчества сопровождаются сильными эмоциями. Это не случайно: и на практике, и в теоретических трудах мотивационные состояния выступают вместе с состояниями эмоциональными.

Вполне всерьез предпринимаются попытки дать и самим компьютерам "почувствовать", что наступил страстный интерес и он сопровождается сильными чувствами: имеются в виду упорные, однако тем не менее не особенно успешные исследования в области моделирования эмоций, чувств и аффектов работающего за компьютером человека. С наибольшим, пожалуй, размахом такие исследования ведутся в Массачусеттском технологическом институте (см.: www.media.mit.edu/affect ).

"В рамках исследований по теме "affective computing", - отмечает Г.Астляйтнер, - предполагается добиться того, чтобы компьютеры могли чувствовать биосигналы пользователя, расшифровывать их и выстраивать модель текущего эмоционального состояния пользователя. …Следует "добавить" компьютерам возможность эмпатийного сопереживания при взаимодействии с пользователем. Биосигналы можно считывать с помощью различных сенсоров, воспринимающих кожно-гальваническую реакцию, мышечное напряжение, кровяное давление, частоту дыхания и температуру тела. Данные биосигналов анализируются вероятностным образом, с использованием временных рядов" ( Астляйтнер , 2000, с. 351-352).

В некоторых недавних работах ( Amichai-Hamburger , 2002; Anderson, 2000 ; Tuten, Bosnjak , 2001) ставится проблема соответствия имеющихся в Интернете и разрабатываемых веб-сайтов психологическим (личностным) характеристикам посетителей этих сайтов и порталов, особенностям работы в Интернете обладателей различных личностных стилей. Исследователи полагают необходимым учитывать эти характеристики и особенности при выполнении дизайна веб-сайтов и проработке рекомендуемых маршрутов перемещений по веб-ссылкам ("линкам"). Дополнительные поправки должны быть внесены за счет учета целей пребывания конкретной личности в WWW: например, выполнения ею профессиональных обязанностей (поиск информации, выяснение цен на товары и т.п.) или осуществления эмоционального общения – социальные и психологические последствия будут различными, как показал Э.Вейзер ( Weiser , 2001). Британские психологи расширяют список факторов, определяющих сетевое поведение: наряду с выполнением посредством Интернета рабочих операций и социального общения они выделяют сетевые развлечения и доступ к Интернету из дома для проведения досуга или для отвлечения от малоинтересных занятий ( Hills, Argyle, 2003 ).

По мнению Я.Амихай-Хамбургер ( Amichai-Hamburger , 2002), экстравертам и интровертам могут оказаться по душе совершенно по-разному организованные информационные, коммуникационные и развлекательные ресурсы. Для тех, кто стремится избегать неопределенности, как считает данный автор, гипертекстовая структура в меньшей степени удобна, чем для тех, кто чувствует себя в ситуациях неопределенности как рыба в воде. Конформисты в отличие от людей, склонных к инновациям и/или к риску, будут возражать против любых (особенно немотивированных) модификаций привычных им ресурсов. Программистам и дизайнерам следует также планировать удобство посещения сайтов и порталов для обладателей различных когнитивных стилей. Так что программистам, администраторам сайтов и веб-дизайнерам прибавляется работы – правда, им предлагается работать в тесном сотрудничестве с психологами, в первую очередь – специалистами по психологии личности ( Amichai-Hamburger , 2002).

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

Если мотивационная заинтересованность высококлассных программистов в выполняемой ими работе, как можно предполагать, должна быть достаточно высокой, то столь же универсальную рекомендацию относительно личностных свойств, необходимых будущему программисту, высказать затруднительно. Обладатели довольно-таки разнообразных личностных черт находят свое место в программировании. Вероятно, при рассмотрении практических вопросов об оценке степени одаренности к программированию стоит обращать особенно большое внимание на мотивационные параметры. Следует также учитывать, что мотивационная включенность может развиваться и усиливаться , в том числе как результат грамотных психолого-педагогических воздействий.

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

Итак, согласно распространенному представлению, дожившему до настоящего времени, программирование - деятельность одиночек: программисты "нуждаются в общении значительно меньше, чем люди многих других профессий" ( Шнейдерман , 1984, с. 128). Однако утверждения такого рода, как правило, не обосновываются развернутыми эмпирическими данными. Кроме того, сторонники указанной точки зрения нередко склонны игнорировать быстро изменяющуюся природу технологий разработки программного обеспечения. Особенности освоения и применения этих сменяющих одна другую технологий оказывают существенное влияние на коммуникативную сферу программистов.

Известно, что начиная по крайней мере с 70-х гг. активно развивались групповые (как иногда говорят, командные) методы работы программистов над особо большими проектами ( Брукс , 1979). Тогда же проводились некоторые теоретические и экспериментальные исследования групповой деятельности программистов ( Weinberg, 1971). П.Йодан в результате довольно обширного, хотя и непрофессионального опроса сделал вывод, что хорошему программисту необходимо уметь работать с другими людьми – и в команде, и с руководством, и с заказчиками ( Йодан , 1977). Б.Миддлтон полагает, что "программы должны способствовать ... повышению взаимопонимания между людьми", а Б.Лоуэнсон замечает, что "идеальный программист - это тот, кто заботится о каждом клиенте и заинтересован в том, чтобы увидеть улыбку на лице пользователя" ( Computerworld Россия , 02.03.99, с.18). Забота о клиенте подразумевает нечто вроде развитого " социального воображения " – программисту надлежит в деталях представлять себе ту деятельность будущего пользователя, в которой будут применяться разрабатываемые программы. Причем зачастую куда более детально, чем сами специалисты, которым в скором времени предстоит применять эти программы.

Одним из существенных критериев высокого мастерства программиста , согласно полученным немецким психологом С.Зоннентаг данным, являются развитые навыки социального общения : лучшие программисты – это те, кто участвовал в большем числе разнообразных проектов, в большем количестве групповых совещаний и консультативных встреч ( Sonnentag , 1995). Судя по всему, степень развитости коммуникативных качеств программистов играет немаловажную роль при приеме на работу. Считается, что организации, занимающиеся разработкой программного обеспечения в США и в других странах, при наборе работников склонны отдавать предпочтение тем программистам, которые не только обладают профессиональными знаниями и умениями, не только должным образом мотивированы выполнять рабочие обязанности, но и демонстрируют (например, в ходе интервью при приеме на работу или в продолжение испытательного срока) хорошие коммуникативные навыки. Да и тесты для отбора программистов, как это явствует из вышеизложенного, частенько включают вопросы и практические задания, направленные на сотрудничество программистов между собой.

Такое сотрудничество все чаще опосредствуется локальными (при этом зачастую весьма обширными и развернутыми) или глобальными сетями связи, ибо широко практикуется командная, или "общинная" ( Одинцов , 2002) работа географически удаленных между собой программистов. В истинно крупных корпорациях, как в былое время в Британской империи, "никогда не заходит солнце". Действительно, так и получается: только-только разойдутся по домам калифорнийские разработчики программ, как настает время индийским, австралийским, уральским или ирландским коллегам продолжить их нелегкий труд… Так что программистам должны быть присущи высокоразвитые навыки удаленного общения – и письменного, и устного – в условиях групповой работы над проектами.

Опрошенные С.Зоннентаг эксперты полагали, что умение и готовность объяснять свои действия и возникающие затруднения, оказывать помощь коллегам и понимать их проблемы в ходе групповых обсуждений поможет программисту найти свое место в работающей над проектом команде и оказаться ценным для организации сотрудником ( Sonnentag , 1995). "Чувство локтя", как оказывается, – качество совсем не лишнее для программиста, а ведь согласно распространенному взгляду, программисты – сугубые индивидуалисты…

В недавнее время разработана методология т.н. " парного программирования " (pair programming), в соответствии с которой общее задание для команды программистов разбивается на микромодули (трудоемкость их выполнения – не более нескольких недель работы квалифицированного специалиста), и над каждым таким микромодулем трудится бригада из двух программистов ( Биггс , 2001). Хотя рекомендуется объединять в единую бригаду высококвалифицированного и менее опытного программиста, тем не менее признается, что оба члена бригады несут одинаковую ответственность за конечный продукт работы. Они совместно обсуждают задание, структурируют задачу, определяют и делают наглядными возможные связи своего микромодуля с другими микромодулями, а главное – сообща пишут программный код, корректируя и проверяя друг друга. Каждый микромодуль оперативно тестируется – создание таких тестов также ложится на плечи бригады программистов, и по результатам тестирования конкретный программный микромодуль модифицируется и совершенствуется, а при необходимости переписывается заново.

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

Методология "парного программирования" неприкрыто расточительна в плане использования людских ресурсов – одного из самых "узких" мест для администраторов любой организации, занимающейся программированием. Квалифицированных программистов, как считается, всегда недостает. Тем не менее новая методология разработана достаточно тщательно, так что она во всяком случае заслуживает проверки и апробации. Эффективность ее изучалась в 1998- 1999 г .г. в нескольких университетах: сравнивалась работа студентов-программистов, составлявших программы методом "парного программирования" и традиционным методом, т.е. индивидуально. "Результаты: пары всегда создавали более понятный код, в котором возникало меньше ошибок, а кроме того, программисты признавали, что такой способ работы нравился им намного больше, чем решение той же задачи в одиночку. С другой стороны, у пар на создание кода уходило несколько больше времени, чем у программистов, действовавших по отдельности. Но последующие итерации давали результаты значительно быстрее. Таким образом, хотя первое время разработчики дольше "набирали темп" (и можно предположить, что парное программирование – не самое лучшее решение для проектов с очень жесткими сроками), создается впечатление, что люди быстро адаптируются к этому процессу" ( Биггс , 2001, с. 45).

Адаптация – момент действительно существенный. Надо заметить, что методология "парного программирования" включает высокую гибкость при комплектации бригад программистов: после завершения работы над конкретным микромодулем входящие в бригаду программисты могут соединяться в новые бригады – на практике чаще всего так и происходит ( Берк , 2002). Данный метод обещает быть весьма эффективным в плане быстрого повышения квалификации молодых или малоопытных специалистов. Можно предполагать, что для них приобретение навыков гибкой адаптации окажется особенно полезным.

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

Профессиональная работа программистов предполагает достаточно высокую степень понимания принципов и условий деятельности не только своих коллег-программистов, но и других специалистов – будущих пользователей разрабатываемых информационных или экспертных систем, систем управления, систем расчетов, систем проектирования, предназначенных для повышения эффективности групповой работы систем и т.п. Подобное понимание необходимо как на этапе проектирования новой системы и подготовки спецификаций, так и на этапах разработки конкретных программных модулей и интерфейсов. Нередко такого рода работа – именуемая, к примеру, не имеющими общепринятых переводов на русский язык терминами workflow или usability – проводится не самими программистами, а специализирующимися в выполнении подобных прикладных исследований методологами (см. подробнее: www.usability.ru ). В качестве таковых могут выступать системотехники либо гуманитарии (этнографы, социальные психологи, специалисты по эргономике и т.д.), участвующие в проекте. Однако при работе над сравнительно небольшими проектами специалисты-методологи чаще всего не приглашаются, так что подобная работа часто ложится на плечи руководителя группы программистов.

Таким образом, профессиональная деятельность программистов предполагает высокую степень вовлечения в деятельность других специалистов, не являющихся программистами . Следует полагать, что наиболее успешными в содержательном плане и востребованными со стороны заказчиков окажутся те программистские коллективы, в которых найдутся такие участники и возобладает своего рода "настроенность" на клиента – будущего пользователя. В то же время до сих пор сохраняются элементы отчужденности многих программистов от других людей и от социального мира, погруженности их в ирреальные "виртуальные" пространства.

Одним из наиболее дискуссионных представляется вопрос об отношении программистов к обществу в целом. Нередко считается – трудно сказать, насколько это оправданно, – что программистов интересует не мир людей, а творимый ими самими виртуальный мир. Более того, высказываются трудноподтверждаемые догадки, согласно которым в программисты идут именно те, кого мало интересует социальный мир – тот социум, в котором они живут. Об этом уже немного говорилось в предшествующем разделе книги.

Некоторое эмпирическое обоснование такого рода догадок может быть найдено в статье, посвященной психологическим особеностям т.н. "суперпрограммистов" ( Долныкова, Чудова , 1998). Даже если программист не увлечен самостоятельным "построением альтернативного мира" и не рассматривает свою работу в качестве такого строительства, он нередко демонстрирует ограниченное понимание или даже полное непонимание тех социальных условий и тех межчеловеческих отношений , в которые он погружен - возможно, против своей воли. Это относится, например, к представителям сообщества хакеров ( Рэймонд , 1996; Turkle , 1984; Voiskounsky et al ., 2000), а может статься, и к некоторой части "суперпрограммистов": среди них сравнительно часто встречаются приверженцы маргинальных общественных течений (в том числе эзотерических), в особенности ориентированных на самосовершенствование и определенную дистанцированность, если не прямую изоляцию, от социума.

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

Сообщение Гость »

а где продолжение? :roll:
Ответить

Вернуться в «Программирование в Интернете»