Психология программирования: цели, проблемы, перспективы
Автор: Рожников Василий Андреевич
Журнал: Общество: социология, психология, педагогика @society-spp
Рубрика: Психология
Статья в выпуске: 3, 2014 года.
Бесплатный доступ
В статье описано текущее состояние одного из направлений психологии - психологии программирования. Дано краткое изложение истории данного направления; описаны предмет, цели и методы психологии программирования. Рассмотрены отечественные и зарубежные подходы. Выведены проблемы и перспективы работы в данном направлении.
Психология программирования, программирование, разработка программного обеспечения, психология
Короткий адрес: https://sciup.org/14939464
IDR: 14939464
Текст научной статьи Психология программирования: цели, проблемы, перспективы
Появление больших высокопроизводительных и дешевых вычислительных систем сделало человека самым узким звеном автоматизированной технологии решения задач. Современная тенденция к передаче все более «интеллектуальных» функций человека машине еще острее ставит вопрос о производительности труда человека, работающего во взаимодействии с ЭВМ. Значительные и еще не использованные ресурсы повышения производительности лежат в вопросах облегчения отладки программ, разумной организации диалогового взаимодействия, снижения трудоемкости ряда рутинных операций в создании программы.
Для изучения этих вопросов существует отдельная область психологического знания – психология программирования. Это направление психологии появилось в 70-х гг. ХХ в. в США благодаря Джеральду Вайнбергу. Его известная монография «Психология компьютерного программирования» [1], первое издание которой вышло в 1971 г., считается классикой психологии программирования. В ней описаны проблемы и перспективы исследований в данном направлении. К сожалению, данная книга за 40 лет так и не была переведена на русский язык.
Еще одним известным ученым, который внес большой вклад в психологию программирования, является Бэн Шнейдерман [2]. Его работа «Психология программирования: человеческие факторы в вычислительных информационных системах» содержит детальное описание целей, возможностей и проблем психологии программирования. Его монография вобрала в себя почти все исследования по данной тематике, проведенные до 1980 г.
Эпиграф к 1-й главе, где Шнейдерман говорит о психологии программирования как об отдельном разделе психологии, содержит цитату из статьи А.П. Ершова «Эстетика и человеческий фактор в программировании» [3]. Именно Ершов был первым, кто в СССР заговорил о применении психологии в улучшении практики программирования. В данной статье он поднимает те же вопросы, что и Вайнберг за год до этого в Psychology of Computer Programming, которые не имеют окончательного ответа до сих пор [4]:
– возможна и нужна ли организация разработки программного обеспечения (ПО) по принципу конвейерной линии?
– кого и почему труднее найти дли реализации проекта по разработке ПО – руководителя или исполнителя?
– как сочетать элитарность системного программирования с его массовостью?
– как воспитывать программиста – через мировоззрение (университет) или путем профессиональных навыков (технический институт)?
– что такое индивидуальные способности в программировании, специфичны ли они и нужны ли?
– можно и нужно ли отделять проектирование большой программы от ее изготовления?
То, что ученые с разных концов планеты поднимают схожие вопросы, подтверждает необходимость существования отдельного раздела науки, который занимается изучением психологии разработки ПО. На Западе, как уже было сказано выше, данное направление существует и активно развивается. Начиная с 1986 г. вышло семь сборников Empirical Studies of Programmers [5], в которых детально описано множество психологических исследований программистов и деятельности программирования. Кроме того, ежегодно в США и Европе проходит конференция «Psychology of Programming Interest Group» (PPIG) [6], где с докладами выступают психологи, социологи и программисты.
В СССР и в России психология программирования так и не стала отдельным направлением. По данной тематике можно найти разрозненную информацию у таких ученых, как А.П. Ершов, Г.А. Звенигородский, О.К. Тихомиров, Т.В. Корнилова, А.Е. Войскунский, Д.А. Поспелов, Я.И. Фет, И.В. Потоссин, Л.В. Городняя, Е.А. Орёл. В нескольких университетах (нам известны два таких вуза: Санкт-Петербургский государственный университет [7] и Новосибирский государственный университет [8]) – для программистов ведется специальный курс «Психология программирования». Существенной проблемой для развития психологии программирования в России является то, что крайне мало работ зарубежных коллег переведено на русский язык.
Каковы же цели и методы психологии программирования?
Психология программирования – это «наука о действиях человека, работающего с вычислительными и информационными системами» [9, с. 12]. Предметом исследования психологии программирования является деятельность программиста, психологические закономерности приема и переработки информации, функционирование психических приемов памяти и мышления у программиста, его работоспособности, вопросы профессионального отбора [10]. Применение методов и возможностей психологии программирования к вычислительным и информационным системам может повысить продуктивность работы программистов и сократить число ошибок. Вычислительные машины – это только инструменты, и психология программирования сконцентрирована не на производительности машины, а на эффективности работы человека [11].
Конкретные цели психологии программирования следующие:
-
1. Усовершенствование практики программирования. Возможные области усовершенствования:
-
а) стандарты на использование языков программирования с применением комментариев, форматов, мнемонических имен, структур управления и структур данных;
-
б) руководства по документированию, регламентирующие внутренние комментарии, внешние описания и блок-схемы;
-
в) организация коллективной работы, как, например, в виде бригады главного программиста, совместного тестирования, чтения кодов и структурированных просмотров;
-
г) особенности среды программирования, включающей физическое пространство, аппаратные и программные средства, руководство и этику;
-
д) принципы разработки эффективных человеко-машинных интерфейсов.
-
2. Улучшение методов программирования. Здесь психология программирования может предложить новые конструкции языков программирования, которые одновременно понятны и в то же время достаточно гибки для использования в различных задачах.
-
3. Усовершенствование обучения программистов и пользователей ЭВМ.
-
4. Разработка методов оценки качества программного обеспечения.
-
5. Оценка способностей и возможностей программиста [12].
В психологии программирования используются следующие методы исследования:
-
– интроспекция;
– наблюдение;
– эксперимент;
– качественный анализ [13].
Опираясь на вышеперечисленные методы, зарубежные психологи делают упор в основном на практические выгоды исследований по психологии программирования. В связи с этим большинство исследований и докладов на PPIG носят эмпирический характер, и их авторы пытаются найти ответы, к примеру, на такие вопросы:
– может ли MTL [14] заменить преподавателя при обучении студентов-третьекурсников базовым понятиям в программировании (цикл, массив, арифметические функции и пр.) [15]?
– насколько эффективно использовать роботов (настоящих и / или виртуальных) в обучении программированию новичков [16]?
– какова роль периферийного зрения в программировании [17]?
– как влияет структура класса на понимание программы [18]?
В отдельных монографиях и докладах авторы, пытаясь дать теоретическое обобщение, часто приходят к тому, что программирование – это ремесло и, чтобы ему научиться, нужно вначале побыть подмастерьем [19; 20; 21].
В зарубежной психологии явно выделяется только одна теория, за авторством Шнейдермана [22], о том, какова психологическая структура деятельности программиста. Она состоит из мыслительных структур и мыслительных процессов. Мыслительные структуры – это то, что должно храниться в памяти программиста, а мыслительные процессы применяются, когда используются или расширяются знания из памяти. Мыслительные структуры – это сложные и многоуровневые знания о понятиях и методах программирования, которые Шнейдерман делит на 2 категории:
-
1. Семантические знания – общие существенные для программирования понятия, которые не связаны с каким-то конкретным языком программирования. Все эти знания получены из опыта работы, но хранятся они в виде общих содержательных наборов информации, более или менее не зависящих от конкретных языков программирования. В семантических знаниях он выделяет 4 уровня:
-
а) определение понятий нижнего уровня, например, что такое оператор присваивания, массивы и какие бывают типы данных;
-
б) понятия среднего уровня (стратегии поиска большего из двух значений, суммирование массива);
-
в) понятия высокого уровня (двоичный поиск, использование стека для организации рекурсии, методы сортировки и слияния);
-
г) понятия высшего уровня. Здесь идет речь о знакомстве с общими методами в таких областях, как статистический анализ численных и нечисленных данных или управление взаимодействием в системе бронирования билетов.
-
2. Синтаксические знания – конкретные практические знания, относящиеся к синтаксису языков программирования. Они точнее, подробнее и легче забываются, чем семантические знания. В синтаксические знания входят такие элементы, как: условный оператор, оператор присваивания, правильные наборы символов и имена библиотечных функций. Эти знания в значительной мере приобретаются в процессе осмысленного обучения, включающего решение задач и изучение описательных руководств, помогающих закрепить и усвоить новые понятия совместно с имеющимися семантическими знаниями или «мыслительными структурами». Синтаксические знания, являющиеся относительными и носящие инструктивный характер, заучиваются механически и не слишком хорошо стыкуются с уже имеющимися системами семантических знаний.
Сам автор (Шнейдерман) данную модель называет умозрительной и говорит, что она требует тщательной экспериментальной проверки. Однако модель, более полную и проработанную с психологической точки зрения, в зарубежной психологии найти не удалось.
В отечественной психологии есть собственная модель структуры деятельности пользователя компьютера (в эту категорию входят и программисты), которая носит название «модель принятия интеллектуальных решений в диалоге с компьютером» О.К. Тихомирова и Т.В. Корниловой [23]. Согласно этой модели, деятельность в диалоге с ЭВМ специфична уже в силу своей особой структуры: она состоит из последовательного чередования этапов «запроса» (пользователь обращается к компьютеру) и «ответа» (компьютер выдает пользователю результат обработки пользовательского запроса).
Действия пользователя в диалоге с компьютером имеют следующую общую существенную характеристику: решение задачи пользователем возможно только в случае учета им логики используемого средства. Но поскольку обратная связь от компьютера – это внешнее средство организации деятельности, в диалоге с компьютером у пользователя есть возможность выбрать разные способы решения одной и той же задачи.
В зависимости от задачи, стоящей перед пользователем, мышление человека в диалоге с компьютером можно рассматривать в континууме приближения от алгоритмизированных процедур к все более творческим видам мышления.
На становление внутренней, психологической, структуры интеллектуальных решений при взаимодействии с компьютером в режиме диалога наиболее существенное влияние оказывают две группы факторов:
Данная модель имеет скорее теоретическое, чем практическое значение. Ответы на вопросы прикладной направленности, например на вопрос о том, какими качествами должен обладать успешный программист с опорой на эту модель, должны быть конкретизированы. Однако данная модель может быть основой для интерпретации результатов дальнейших исследований в психологии программирования [24].
Выводы по проделанному нами обзору.
-
1. Наиболее активная исследовательская работа по психологии программирования ведется на Западе. В США самая высокая концентрация исследований по данному направлению. В России психология разработки ПО развивается медленнее, и отчасти это связано с тем, что множество работ по данной тематике не переведено на русский язык, включая основополагающую монографию Вайнберга.
-
2. Несмотря на большое количество исследований по психологии программирования, большинство исследований в зарубежной психологии программирования бессистемны, имеют эмпирический характер и ориентированы на достижение практических результатов. Единственная четкая модель структуры деятельности программирования создана в рамках когнитивной психологии. В отечественной психологии также представлена только одна модель структуры деятельности программиста, достаточно общая, из которой сложно сделать какие-то практические выводы.
-
3. Отсутствие глубокой теоретической проработки в психологии программирования создает бессистемность исследований. Перспективами развития данного направления в России является применение деятельностного подхода в качестве методологического каркаса для будущих психологических исследований, которые помогут подойти ближе к реализации целей психологии программирования.
Ссылки и примечания:
-
1. Weinberg G.M. The Psychology of Computer Programming. New York, 1971. 299 p.
-
2. Шнейдерман Б. Психология программирования: человеческие факторы в вычислительных и информационных системах / пер. с англ. М., 1984. 304 с.
-
3. Ершов А.П. О человеческом и эстетическом факторах в программировании // Ершов А.П. Избранные труды. Новосибирск, 1994.
-
4. Там же.
-
5. Interaction Design Foundation [Электронный ресурс]. URL: http://www.interaction-design.org/references/conferences/em-pirical_studies_of_programmers_-_seventh_workshop.html (дата обращения: 25.05.2014).
-
6. Psychology of Programming Interest Group (PPIG) [Электронный ресурс]. URL: http://www.ppig.org (дата обращения: 25.05.2014).
-
7. Белая О.А., Новиков Б.А. Психология программирования: человеко-машинный аспект информационных технологий [Электронный ресурс]. URL: http://it-education.ru/2004/reports/odintsov.htm (дата обращения: 25.05.2014).
-
8. Городняя Л.В., Мурзин Ф.А. Психология программирования [Электронный ресурс]. URL: http://www.computer-mu-seum.ru/books/n_collection/psychology.htm (дата обращения: 25.05.2014).
-
9. Шнейдерман Б. Указ. соч.
-
10. Белая О.А., Новиков Б.А. Указ. соч.
-
11. Шнейдерман Б. Указ. соч.
-
12. Там же.
-
13. Weinberg G.M. Op. cit.
-
14. MTL (Memory Transfer Language) позволяет визуализировать состояние памяти на каждом шаге выполнения программы.
-
15. Missele L.J. Learning Programming by using Memory Transfer Language (MTL) without the Intervention of an Instructor [Электронный ресурс]. URL: http://www.ppig.org/papers/24/4.Paper%204-Leonard%20J.%20Mselle-won't%20attend-bra-zil.pdf (дата обращения: 25.05.2014).
-
16. Major L. Teaching Novices Programming Using a Robot Simulator: Case Study Protocol [Электронный ресурс]. URL: http://www.ppig.org/papers/24/10.Teaching%20Novices%20Programming%20Using%20a%20Robot%20Simulator%20-%20Case%20Study%20Protocol%20-%20PPIG%202012-Louis%20Major.pdf (дата обращения: 25.05.2014).
-
17. Bednarik R., Orlov P.A. Investigating the role of programmers’ peripheral vision: a gaze-contingent tool and an experiment proposal [Электронный ресурс]. URL: http://www.ppig.org/papers/24/16.%20Bednarik_Orlov_PPIG_03112012-Ro-
man%20Bednarik%20Paul%20A.%20Orlov.pdf (дата обращения: 25.05.2014).
-
18. Alardawi A., Khazaei B. The influence of class structure on program comprehension [Электронный ресурс]. URL: http://www.ppig.org/papers/23/25%20Alardawi.pdf (дата обращения: 25.05.2014).
-
19. Weinberg G.M. Op. cit.
-
20. Ollis G. In search of practitioner perspectives on «good code» [Электронный ресурс]. URL: http://www.ppig.org/pa-pers/24/5.PPIG2012_%20workshopPaper_revised-Gail%20Ollis.pdf (дата обращения: 25.05.2014).
-
21. Goodliffe P. Code craft: the practice of writing excellent code. San Francisco, 2006. 580 p.
-
22. Шнейдерман Б. Указ. соч.
-
23. Корнилова Т.В., Тихомиров О.К. Принятие интеллектуальных решений в диалоге с компьютером. М., 1990.
-
24. Орел Е.А. Диагностика особенностей мыслительной деятельности специалистов в области информационных технологий (программистов) : дис. … канд. психол. наук. М., 2007. 168 с.