Мозг программиста как объект научного исследования. Нейрофизиология программирования

28 февраля 2014, 12:38

Есть связь между естественными языками и языками программирования? Насколько задействуются «математические» области мозга в процессе создания кода? Нейрофизиологи дали ответ.

Программирование — это очень сложный и в то же время относительно новый вид человеческой деятельности. Поскольку сфера программирования еще очень молода, в ней пока ведется масса ожесточенных споров и жарких дискуссий. Однако, хотя и выдвигается масса убедительных аргументов, конкретных ответов на многие вопросы пока нет. Но ситуация должна вот-вот измениться. Международная группа исследователей под руководством доктора Джанет Зигмунд работает со снимками, полученными методом МРТ (магнитно-резонансной томографии), чтобы полнее понять, как работает мозг программиста. Это исследование поможет нам уточнить стоящие перед нами сложные вопросы о природе программирования и получить на них фундаментальные ответы. 

Так чем же конкретно думают программисты во время работы?

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

Другие разработчики заявляли, что программирование совершенно не похоже на лингвистику и гораздо ближе к математике:

It's more math and science than anything"

С другой стороны, Дейкстра в свое время сказал:

Наряду со склонностью к математике наиболее ценным активом компетентного программиста является безупречное владение собственным родным языком.»

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

Мозг эксперта

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

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

Как мозг программиста воспринимает код

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

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

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

Что дальше?

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

  • Можно ли будет подвести неврологическую базу под мыслительные процессы программиста (протекающие в той или иной зоне)?
  • Какие результаты даст изучение мозга программистов-экспертов? Какие изменения происходят в мозге при многолетних занятиях программированием? 
  • Насколько важную роль играет степень владения языковыми навыками при программировании? Целесообразно ли включать курсы программирования в образовательные программы для самых маленьких? Как вычислительное мышление (computational thinking) может переформатировать мозг в юном возрасте? Следует ли учить детей программированию? Если да — есть ли для этого критически важный период?
  • Как отражается обучение программированию, например, изучение объектно-ориентированных языков, паттернов проектирования или функционального программирования на восприятии кода самим программистом?
  • Существуют ли какие-то виды программерской деятельности, которые никогда не следует смешивать, поскольку такое смешивание приводит к ошибкам и, соответственно, к возникновению багов. Например, целесообразно ли совмещать написание кода, имеющего выраженные пространственные аспекты (построение карт, таблиц) с решением других «пространственно-ориентированных» задач?
  • На самом ли деле визуализация кода или программирование в средах разработки с «живым режимом» снижает умственную нагрузку?

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

Крис Парнин

Источник

подписка на главные новости 
недели != спам
# ит-новости
# анонсы событий
# вакансии
Обсуждение