Гипотеза лингвистической относительности и программирование

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

Естественный язык имеет две основные функции: коммуникативная и мыслительная (на самом деле классификация намного сложнее [1], но для простоты я не хочу углубляться в детали). В этом смешении функций, как мне кажется, и состоит проблема ее доказательства. С формальными языками дело обстоит проще, так как в них коммуникативная составляющая отсутствует.

Для формальных языков можно провести прямую аналогию с инструментом (для программиста язык программирования является инструментом). Марк Твен сказал: «Если из всех инструментов у тебя есть только молоток, то в каждой проблеме ты увидишь гвоздь». Как следствие, программист, работающий преимущественно на каком-то одном языке или фреймворке, подходит к решению задачи и написанию программы исходя из парадигмы этого языка или фреймворка.

Широко известно высказывание: «Настоящий программист на фортране напишет программу на фортране на любом языке». Имеется в виду, что Фортран, как довольно старый язык программирования, имел ограниченные возможности по структуризации программного кода. Широко применялся оператор безусловного перехода (GOTO), и, как следствие, программа представляла из себя тяжело воспринимаемый текст (спагетти-код). Такой же спагетти-код программист писал, используя другие языки программирования, которые имели более широкие возможности.

Есть и другое высказывания одного из разработчиков концепции структурного программирования Едсгера Дейкстры: «Практически невозможно научить хорошему стилю программирования студентов, которые раньше имели дело с Бейсиком; в качестве программистов они умственно покалечены без надежды на восстановление«.

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

Такие устоявшиеся шаблоны мышления и есть профессиональная деформация — когнитивное искажение личности. Как раз тут самое время вернуться к теме статьи и сделать вывод: язык, которым пользуется программист, напрямую влияет на его мыслительные процессы.

Хорошо это или плохо? Давайте разбираться. Создано огромное множество языков программирования. Цель создания нового языка — это как можно эффективней решать определенный класс задач. Например, на языке C вы сможете написать модуль ядра, максимально эффективно используя аппаратные ресурсы, на JavaScript естественным образом реализовать событийную модель, а при помощи SQL манипулировать данными.

Но если вы будете применять их не по назначению, вас ждет беда. Создаваемые конструкции будут сложными и неочевидными. Объем написанного кода будет в разы больше в сравнении с «правильным» языком. Именно поэтому очень важно еще на старте разработки программного продукта правильно определить инструментальные средства и в том числе языки программирования. Правильный выбор позволит вам очень сильно увеличить производительность и качество разработки. В своей известной статье «Серебряной пули нет» Фредерик Брукс упоминает: «Наибольшее значение для роста производительности, надежности и простоты имело все более широкое использование языков высокого уровня» [2]. Однако само применение языка не даст выигрыша, если использующие его программисты не перестроят свое мышление согласно парадигме языка.

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

  1. Общая теория социальной коммуникации. Соколов А. В.
  2. Мифический человеко-месяц. Фредерик Брукс.
  3. Простые вещи: гвоздь. Михаил Петров.