Определение способностей к программированию как условие эффективной подготовки к профессиональной деятельности

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

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

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

Следует отметить, что каждому уровню присущ элемент творчества, различающийся по содержанию и уровню продуктивности. Исследования, направленные на выявление необходимых для успешного программиста личностных качеств, были начаты едва ли не появлением этой профессии на рынке труда, но до сих пор не дали однозначного ответа. И это отсутствие согласованной точки зрения отрицательно сказывается на методике подготовки будущих специалистов в области программирования.
Общепризнанные представления требуют от программиста высокоразвитого интеллекта, способности к абстрагированию, системности и гибкости мышления, критичности, умения планировать свою деятельность, анализировать, высокой работоспособности, способности к саморазвитию. Настоящий программист, по мнению Р. Габриела, «держит в голове множество фактов, не упускает из виду ни одной мелочи, старается воспринимать вещи такими, какие они есть, выражает свои мысли четко и ясно, твердо знает, чем стоит заниматься, а чем нет»

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

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

Профессия программиста всегда привлекала внимание психологов, которые стремились понять, какие личностные качества присущи этим специалистам, что отличает их от представителей других профессий. Было установлено, что высокопрофессиональные программисты обладают упорством, интровертностью, неприятием запретов реальной действительности, погруженностью в собственноручно созданный компьютерный мир. Но ученые пока не могут ответить на вопрос, должны ли будущие профессиональные программисты изначально обладать такими качествами, или эти черты характера вырабатываются постепенно в процессе овладения профессией и развития карьеры.
Одной из наиболее интересных возможностей, которые дает компьютер, для программистов является возможность сотворения собственной виртуальной реальности согласно своим представлениям: «Наиболее творческим аспектом программирования для большинства программистов является разработка целостной структуры программы. … Можно собрать воедино собственные идеи по поводу того, как организован мир, и воплотить их в нечто конкретное. Части моего личного образа мира позволено преодолеть ограничения моего разума
и обрести некую форму во внешнем мире».

Сложившееся на сегодняшний день мнение о личностных качествах, которые присущи программистам, подчеркивает их пунктуальность, аккуратность, экономность, эмоциональную устойчивость, высокую работоспособность. Вот как говорит о своих коллегах программист
Сергей: «Я пишу проги уже лет 15, и не надоело. Более того, в отпуске не был уже лет 5… Не знаю, как другие, но я люблю одиночество… Мы, программисты, такие же, как все, тоже любим, тоже ненавидим, тоже живем. И ругать нас за то, что мы видим мир немножко под
другим углом, я думаю, неправильно… Программирование на любом языке требует повышенного внимания, предельную логику в мышлении, и усидчивости. … От программистов редко можно услышать неопределенный ответ. Или да, или нет. А все потому, что неопределенность — это баг программы, причем трудно отлавливаемый…»

Помимо определения профессиональных качеств программиста предпринимались и до сих пор предпринимаются попытки разработать тестовые методики оценки и диагностики способностей к программированию. Уже давно специалисты пришли к мнению, что для этих целей нельзя ограничиваться только измерением уровня развития интеллекта IQ.
Самые первые исследования в области психологического отбора программистов опирались на личностные тесты, тесты на познавательные способности, обычные интервью и аппаратурные тесты на логическое мышление (McNamara, Hughes, 1961; Rowan, 1957). В результате было признано, что наиболее существенными для профессионального программиста являются способности к абстрагированию и логическим рассуждениям.
Разработанные в 70-80 годы специализированные тесты для отбора программистов CPAT/CPAB (Computer Programming Aptitude Tests/Battery) проверяли испытуемых по следующим направлениям:
• вербальное описание смысла высказываний;
• математические построения;
• работа с символьной информацией;
• обработка числовых данных;
• работа с блок-схемами.
И хотя эти тесты довольно широко использовались, но в итоге их предсказательная надежность и значимость была признана как средняя или умеренная.
Следующий тест ВТОРР был нацелен на определение уровня профессиональных знаний программиста в области логики, процедур ввода-вывода, файловых операциях, программирования, баз данных. Помимо того, что некоторые вопросы теста явно устарели, даже оставшиеся на сегодняшний день актуальными темы требуют внесения значительных изменений.
Несмотря на то, что программирование является одной из наиболее динамичных областей человеческих знаний, разработка тестов для определения способностей к программированию по-прежнему остается актуальной. В этом ряду следует упомянуть тест для измерения потенциала программиста WPAAT (Walden Programmer Analyst Aptitude Test), разработанный компанией Walden и предлагающий испытуемому помимо заданий на символьные преобразования, обработку данных, определение ошибок, понимание командных инструкций еще и решение конкретных практических задач. Результаты многочисленных тестирований показали достаточную убедительность данного теста.

Разные компании по-разному оценивают структуру профессиональных знаний программиста. Так разработчики теста LPAT (Language Free Programmer/Analyst Aptitude Test), позиционируемого как тест для оценки способностей к программированию, не связанный с
конкретными языками программирования, считают наиболее важными следующие знания и умения

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

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

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

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

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