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).
Итак, следует признать, что к настоящему времени нет широко распространенных и всеми признанных специализированных или универсальных тестов интеллекта, которые бы надежно диагностировали способности к программированию или эффективность будущей деятельности в качестве программиста . Тем не менее разработки в этом направлении ведутся. Может статься, некоторые фирмы пользуются методическими средствами такого рода, однако не считают нужным обнародовать их. Если это и так, то едва ли подобные разработки (секретные или полузакрытые) обладают должной универсальностью. Ведь пока что далеки от решения вопросы о том, имеется ли конкретный набор интеллектуальных качеств, обязательных для успешно функционирующего программиста.
На взгляд авторов, определенные качества, скажем, гибкость и критичность мыслительной деятельности или способности к абстрагированию реально необходимы программисту, однако степень необходимости может сильно разниться. А недостаток каких-то на первый взгляд необходимых качеств может без труда компенсироваться изобилием других – может быть, на данном уровне развития знаний менее очевидных в плане своей необходимости интеллектуальных качеств.
Авторы исходят при этом из того, что современное программирование – существенно более широкая и разносторонняя область, нежели испытание интеллекта и знаний. В нем могут найти себя люди с самой разной подготовкой (не обязательно математической), обладатели самых разных наборов интеллектуальных качеств, когнитивных стилей и рабочих навыков. Не меньшее или даже большее значение, чем наличные навыки, имеет готовность программиста обновлять знания и видоизменять навыки, не пытаясь зафиксироваться на уже достигнутом и уже приобретенном опыте. На развитие именно таких качеств следует ориентировать подготовку и переподготовку программистов, такие качества следует учитывать при диагностике одаренности к этому роду деятельности.