Психология программирования: цели, проблемы, перспективы

Автор: Рожников Василий Андреевич

Журнал: Общество: социология, психология, педагогика @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 с.

Статья научная