Научиться программировать — значит не только развить полезный навык, но и приобрести особый тип мышления. Программисты умеют хорошо решать математические и логические задачи. Также они обращают внимание на детали, моделируют ситуации в обычной жизни и дают оценку на основе большого количества факторов.
В преддверии нашего курса Go Workshop рассказываем, что психологи, лингвисты и педагоги думают о влиянии кодинга на мозг, при чем тут австралийские индейцы и гипотеза Сепира-Уорфа.
В 30-х годах прошлого века появилась, названная по аналогии с открытием Эйнштейна, теория лингвистической относительности. Она гласит: язык определяет сознание, то есть люди воспринимают мир неодинаково, потому что лингвистические категории родного языка накладывают ограничения и даже определяют мышление.
Эту мысль сформулировали Эдвард Сепир и его ученик Бенджамин Уорф, однако они были не правы. Любую идею можно передать на любом языке. Они же приписывали колоссальное влияние на когнитивные процессы простым различиям в грамматике, но при этом концепция содержала и здравое зерно. Гай Дойчер в своей книге «Сквозь зеркало языка» объясняет, какое:
«Если разные языки по-разному влияют на мышление своих носителей, то тут дело не в том, что каждый язык позволяет думать своим носителям, а скорее в тех частях смысла, о которых каждый язык обычно заставляет думать. Когда язык принуждает своих носителей обращать внимание на отдельные аспекты мира… такие привычки речи могут в конце концов стать привычками мышления с последствиями для памяти, восприятия, ассоциаций и даже практических навыков».
Истина где-то к северу
Убедительно доказано, что система родов существительных влияет на ассоциативные ряды, вынуждает наделять те или иные неодушевленные объекты воображаемыми женскими или мужскими чертами. Похожий эффект связан с различиями в чувствительности к оттенкам цветов, для которых в языке есть название.
Но это мелочи по сравнению с тем, что язык может формировать навыки. Это выяснилось при изучении одного из языков австралийских аборигенов. Они вместо привычных «спереди» и «сзади», «лево» и «право» для указания направления используют исключительно стороны света.
Это могло бы показаться розыгрышем, но если носитель этого языка попросит вас освободить место на лавочке, то это будет звучать как «подвинься, пожалуйста, восточнее». Если при этом вы читаете книгу, сидя лицом к югу, и абориген захочет, чтобы вы перелистнули на пару страниц вперед, то вы услышите «листай дальше на запад». Если же развернуться лицом к северу, просьба будет звучать по-другому — вас попросят листать на восток.
Чтобы говорить на этом языке, приходится постоянно отслеживать расположение сторон света, что формирует географическую память и не требующее сознательного контроля чувства направления. Так, глубокое изучение языка — больше чем просто знание грамматики и лексики.
Изучение влияния языка на мышление еще только начинается, но уже идут схожие исследования языков программирования, которых роднит с естественными не только название.
Программирование ≥ речь
Вопреки стереотипам, в программировании наиболее важны не математические способности, а лингвистические. Об этом еще в 1982 году в своих «Этюдах для программистов» писал Чарльз Уэзрел. Он обратил внимание на вербальные способности как на важный аспект личности успешного программиста, имея в виду умение работать с грамматикой как искусственных, так и естественных языков.
Его наблюдения подтверждаются. Статистические исследования выявили корреляцию между программированием и высокими лингвистическими способностями. Непосредственные наблюдения за активностью в различных зонах мозга при помощи МРТ установили, что во время работы над кодом активируются те же отделы мозга, что отвечают за естественные языки.
Не удивительно, что многие программисты считают гипотезу Сапира-Уорфа применимой к их работе. Подобных взглядов придерживался Кеннет Айверсон, создатель APL. Юкихиро Мацумото признавался, что при разработке Ruby, вдохновлялся романом «Babel-17», основанным на гипотезе лингвистической относительности.
Схожие мотивы развиваются в эссе «Побеждая посредственность» Пола Грэма, в его парадоксе «Blub», согласно которому программист, овладевший одним языком и решающий с его помощью все задачи, не понимает ценности более эффективных инструментов из других языков программирования, воспринимая их как нечто странное, непривычное и ненужное.
Первую попытку обобщить имеющиеся данные по влиянию программирования на когнитивные процессы, предприняли в 1987 году в майском номере журнала Educational Computing Research.
Тогда исследователи подметили, что программирование с его разнообразными задачами может положительно влиять на умение стратегически решать задачи, на способности к формальной логике, на навыки моделирования и на когнитивные стили, но к однозначным и доказательным выводам так и не пришли из-за недостатка данных.
Еще шесть лет прошло, прежде чем была собрана статистика, которая позволила конкретизировать представления о влиянии кодинга на мышление. Она представлена в метаанализе шестидесяти пяти исследований о влиянии программирования на когнитивные процессы, опубликованном в 1991 году.
Оказалось, что в большинстве случаев программирование действительно положительно влияет на различные познавательные навыки, коррелирующие с длительностью изучения языка программирования и успехами в нем. «Последствия изучения языка программирования выходят за рамки содержания конкретного компьютерного языка», — утверждают ученые. С умением программировать улучшаются навыки планирования, способность к построению рассуждений, логическое мышление, а также общие навыки решения проблем с помощью компьютерных программ.
Сравнительные исследования влияния различных языков программирования на познавательные процессы продолжаются. На анализ содержимого онлайн-репозиториев Github и BitBucket, вопросов и ответов, размещенных на StackExchange выделено 750 тысяч долларов гранта. По ним Knowledge Labи Department of Psychology Висконсинского университета Мадисона восстановят «естественную историю» языков программирования, отследят, как часто и для каких целей используется каждый из них.
К 2020 году исследователи планируют выяснить, как специфические особенности языков программирования влияют на число путей и скорость решения различных задач, проанализируют насколько хорошо тот или иной язык подходит для коллективного программирования.
Перед проектом поставлена амбициозная задача: предоставить информацию о том, какие языки стоит выбирать для конкретных проектов, и выяснить, насколько этот выбор влияет на то, как разработчики думают и работают.
Больше чем навык
Помимо собственно навыков программирования, изучение языков формирует привычку к тому, что математик, психолог и программист Сеймур Паперт в своих работах называет «вычислительным мышлением».
Это — гибкий набор навыков, нацеленных на алгоритмическое решение задач, привычка комплексно использовать в повседневной жизни абстрагирование, декомпозицию, оценку, логическое мышление, точность и привычку замечать детали.
Концепция вычислительного мышления приобрела авторитет в педагогике, легла в основу многих образовательных программ, но со временем, как и предполагалось в восьмидесятых годах прошлого века, ее влияние распространилось далеко за пределы колледжей и ВУЗов.
С помощью методологии программирования успешно решаются самые разнообразные проблемы. Примером тому служат не только компьютерное моделирование, сбор больших данных, внедрение автоматизированных систем, успехи финтеха.
Вычислительное мышление применимо и полезно в повседневной жизни и для профессионалов, далеких от IT-технологий. Изучение программирования помогает найти новые подходы и решения, о чем бы ни шла речь. Будь то физика, биология, химия, социология, педагогика, бизнес или здравоохранение.
Так появилась концепция эффективного альтруизма, начались поиски наиболее эффективных стратегий благотворительности. Благодаря этим исследованиям выяснилось, например, что в борьбе с малярией эффективнее жертвовать деньги на антимоскитные сетки, а не дорогие лекарства.
Другое следствие вычислительного мышления — идея использовать инструменты математического анализа бартерных сделок и большие данные для решения проблемы подбора доноров органов. В результате разработан дизайн действующей в США сложной и в тоже время надежной и эффективной системы обмена донорскими почками «по цепочке» за который профессор Гарвардского университета Элвин Рот в 2012 году получил Нобелевскую премию.
В контексте новых исследований, изучение языка программирования — не просто получение навыка, но и способ по-новому взглянуть на жизнь, по-новому справляться с вызовами, что она ставит.
Совсем скоро в Binary District стартует курс Go Workshop — отличный старт для начинающих программистов и логическое продолжение для тех, кто уже сталкивался с проектированием собственных веб-сервисов.