Согласно исследованию - влияние есть, но незначительное. Обучаемость скорее связана с навыками изучения новых языков (не программирования).
Что в первую очередь ассоциируется у вас с программированием? Может быть математика? Большинство знакомых мне программистов не связывают то, чем они занимаются, в первую очередь с математикой. Они скорее говорят о логике. Тем не менее, идея о том, что навыки программирования связаны со способностями к математике, остается живой даже среди программистов.
Совсем недавно было опубликовано исследование Вашингтонского университета. В нем исследователи сделали вывод о том, что развитые математические навыки не являются надежным показателем того, что человек быстро и просто научится программировать.
Кроме этого ученые выявили кое-что еще: предрасположенность к изучению иностранных языков сильно влияет на способность обучения программированию. И речь именно о лингвистических языках, а не о языках программирования. Сходство между английским, немецким или французским языками и языками программирования может объяснить полученные результаты.
Можно сказать, что как и в «настоящих» языках, в языках программирования существует грамматика. Кроме того, они состоят из настоящих слов и требуют, чтобы вы формулировали идеи - часто вербально.
Но как проводилось это исследование?
В качестве языка программирования для изучения был выбран Python - хороший выбор для новичков. Поэтому хорошо подходит для участников исследования, которые никогда раньше не писали код.
Перед тем, как исследовать способности участников изучать Python, были проведены несколько тестов: умение считать, языковые способности и общие когнитивные способности (способность к поиску решений, способность к обновлению рабочей памяти, объем рабочей памяти).
Примем языковые способности (language aptitude) как некий фактор человека, суммирующий навыки, любовь и предрасположенность к изучению новых языков.
Для изучения Python участники прошли онлайн-курс на одном известном ресурсе. В каждом сеансе они открывали для себя концепции Python - функции, условия, списки и так далее. Во время этих занятий участники могли попросить дать им подсказку или решение целиком.
В конце каждого занятия их просили заполнить тест на то, что они только что изучали. Кроме того, наблюдая за каждым участником, исследователи могли рассчитать скорость обучения. Далее изучались правильность заполнения теста и то, как часто участники обращались за помощью.
После всех занятий по Python участники прошли тест на лексику - назначение конкретных функций в языке. Также их протестировали в рамках структуры кода и попросили написать финальный проект: «Камень, ножницы, бумага».
Все эти факторы были сведены к одному: общей способности научиться программировать. Вот полученные доказанные типы предикторов и результаты в целом:
Языковые способности - лучший предиктор продуктивности обучения.
Успешность в программировании в наибольшей степени определялась общими когнитивными способностями; на втором месте - языковые способности.
Разница языков?
Исследование проводилось на базе Python, и автор в конце задает вопрос: каковы были бы результаты, если бы вместо Python был выбран более сложный язык? В то время как Python имеет низкий порог вхождения, другие языки - нет.
Я думаю, что при использовании другого языка вполне могли бы получиться иные результаты. Тем не менее, кажется, что все языки программирования - это, в конце концов, просто языки, которые нужно выучить на начальном этапе. Когда словарный запас известен, не должно быть много различий при реализации одних и тех же небольших программ. По крайней мере, не на самых популярных языках.
С другой стороны, разница действительно существует при сравнении различных возможностей языков программирования. Написать программу Python в стиле Python, несомненно, проще, чем писать программу на C в стиле С (субъективно). Разные языки предлагают разные функции. И эти функции требуют разного количества когнитивных усилий.
А что вы думаете об этом?
Комментарии (34)
myxo
30.09.2021 16:51+9Как всегда журналист наврал, а переводчик наврал ещё больше.
Оригинал: Relating Natural Language Aptitude to Individual Diferences in Learning Programming Languages
Журналист: Do Your Math Abilities Make Learning Programming Easier? Not Much, Finds Study
Переводчик: Разбираюсь в математике = легко стану программистом?
Ну то есть в оригинале нет ничего про «стать программистом» или «обучению программированию», там про «изучение языков программирования».sahsAGU Автор
30.09.2021 16:57-4«Связь способности к изучению языков с индивидуальными различиями в изучении языков программирования»
Если делать прямой перевод — название для статьи с 1000 просмотров. Хабр — не научный журнал. И в нем хочется придумать такое название, которое будет цеплять.
Безусловно, выучить язык программирования =/= стать программистом. Но и большого «вранья» в заголовке, субъективно, нет. Даже с точки зрения социологии, очень близкие факторы. Вопрос насколько близкие, чтобы судить об этом объективно. Но это нужно дальнейшие исследования проводить.
Да, с точки зрения заголовка я немного маркетолог.un1t
30.09.2021 19:45Все переврали, ладно хоть ссылку на исследования оставили.
Кажется вот о чем идет речь.
"Consistent with our hypothesis, language aptitude, as assessed by the Modern Language Aptitude Test (MLAT)22, was a robust predictor of all of the Python learning outcomes."
Речь не идет не о каких языковых способностях. Никто не понимает, что это такое и тем более как это измерить.
Но взяли некий тест Modern Language Aptitude Test (MLAT) из 1950х годов, и сравнили результаты прохождения этого теста с результатами в обучении Python.
С тех пор методики преподавания языка довольно существенно поменялись, даже если тогда этот тест для чего-то работал (конечно же не для определения неких мифических языковых способностей, а скажем, что человек может успешно учиться по некой программе из 1950х), то в настоящее время очень сомневаюсь. Нашли новое применение старому тесту, который возможно работает для метода обучения, который они тестировали. Но сейчас же миллион методов - есть книги, статьи, youtube, онлайн курсы, офлайн курсы, университеты и т.п. Очень сомнительное исследование.
tyomitch
01.10.2021 09:25Ну то есть в оригинале нет ничего про «стать программистом» или «обучению программированию», там про «изучение языков программирования».
В оригинале нет ничего и про «разбираюсь в математике», там речь про numeracy — грубо говоря, способность считать в уме.
TheAthlete
30.09.2021 16:56Математика становится жирным плюсом в специфических задачах:
- рекомендательные системы (математическая статистика, теорема Байеса и т.д.)
- разработка игр (интегралы, квартенионы)
- глубокое обучение, нейронные сети и т.д.tropico
30.09.2021 20:51+4Если математика не нравится, то и всякая аналитика, статистика, бигдата и ML подавно. Сейчас чтобы быть нормальным программистом с математики нужна только таблица умножения и базовая дискретка, которая объясняется на пальцах.
vlad-kras
01.10.2021 20:34+3Математика становится жирным плюсом в специфических задачах:
- рекомендательные системы (математическая статистика, теорема Байеса и т.д.)
- разработка игр (интегралы, квартенионы)Просто там она - часть либо предметной области (модели), либо методологии решения.
А так ... Знание физики является жирным плюсом при разработке софта, моделирующего физические процессы. Знание иностранных языков является жирным плюсом при разработке систем машинного перевода. Знание бухучета и налогов является жирным плюсом при разработке бухгалтерских программ. Ну и т.д.
Wolfie
30.09.2021 16:58+3Выучить язык программирования еще не значит стать программистом, как выучить иностранный язык не значит стать писателем. Знать и свободно владеть языками программирования необходимо, но не достаточно. Нужна еще логика, навыки абстрактного мышления и другие качества, которые применимы и в точных науках, таких, как математика.
DarthVictor
30.09.2021 18:02+2В конце каждого занятия их просили заполнить тест на то, что они только что изучали. Кроме того, наблюдая за каждым участником, исследователи могли рассчитать скорость обучения. Далее изучались правильность заполнения теста и то, как часто участники обращались за помощью.
А тест глянуть можно? Потому что если в тесте спрашивали какой оператор использовать для организации цикла, то это — одно. А если, как используя выученный оператор цикла перевернуть строку — то другое.
Tyusha
30.09.2021 19:27+2Похоже, под изучением программирования автор понимает запоминание написания операторов, зарезервированных слов ЯП, а также имëн функций необходимых библиотек.
GospodinKolhoznik
30.09.2021 20:42+1Мне в детстве, когда в школе на уроках рассказали про основные операторы бэйсика, казалось что это очень малая часть от всех операторов. Что на самом деле их огромное количество, что для каждого действия, которые можно сделать на компьютере есть свой оператор, просто нам про них ещё не рассказали, и что их надо долго изучать именно как иностранный язык.
third112
30.09.2021 22:39+2Работал со многими математиками. Да, у них особый подход. Который зачастую мешает освоению программирования. ИМХО математик воспринимает задачу метафизически, т.е. вне времени — если в какой конструкции найден треугольник, где квадрат гипотенузы равен сумме квадратов катетов, то этот треугольник мог быть найден годом раньше и через 100 лет будет найден: фактор времени не имеет значения. Ситуация, когда через микросекунду треугольник пропадет математика раздражает. Факт, что математики эффективно работают с динамическими системами, но динамику они представляют метафизически. Для такого представления нет деления на шаги: сначала вычислить а, потом в, а потом с. Так сложилось, и такой подход полезен. Но это другой подход.
Refridgerator
01.10.2021 06:22+3С настоящими математиками проблема ещё сложнее. Для них важно не столько решить задачу — сколько доказать, что эта задача имеет решение. А нюансы реализации им уже совсем не интересны — потому в подавляющем большинстве научных работ, посвященных решению каких нибудь вычислительных задач, вы не найдёте ни кода, ни алгоритма.
askv
01.10.2021 00:48В свое время выбрал математику, так как она а) сложнее, б) реже меняется, чем технологии программирования. Ну и ум в порядок приводит... )
heartdevil
01.10.2021 09:07+2Интересная тема. Я тоже часто задавался вопросом, почему, к примеру, в школе или универе, у меня были друзья "хавающие" математику на уроках или парах, но вот писать простые программы они как-то даже и не старались. Все списывали. То ли лень, то ли еще что, но я всегда считал, что если хорошие знания в школьной или университетской математике, то программирование должно легче даваться, а выходит, что нет.
UlanMAM
01.10.2021 11:37Видимо, просто математика легко давалась и была интересна, а программирование было какого-то из двух факторов лишено. Я в свою очередь замечал, что если деятельность и дается легко, и интересна, люди в нее будут прям упарываться. А если она требует чуть больших усилий(буквально лишний час над задачей посидеть), но неинтересна - то ее сразу будут стараться избегать в пользу первой.
UlanMAM
01.10.2021 11:30Тест на лексику как проверка способности программировать - это конечно, пять баллов. Вот видите - первые авторы в оригинале исследования психологи, математику не учили, и вон что выдали.
askv
02.10.2021 12:07Про математику: Константин Кноп, 02.10.2021 "Ровно три года назад Анатолий Альбертович Шперх вытащил из моего комментария в отдельный пост мой ответ на вопрос "Зачем мы учим всех математике". С тех пор я уже не раз повторял эти аргументы в живых дискуссиях, отвечая на контраргументы противников, - поэтому публикую новую версию текста." https://www.facebook.com/kostyaknop/posts/10222806976816538
Ndochp
03.10.2021 22:58математика вообще — очень широкое понятие.
На нашем потоке (МАИ, прикладная математика, 98-2003) довольно хорошо среди середняков прослеживалась такая тенденция — середняки поделились между "дискретыми" (программирование, линейная алгебра, дискретная математика) и "непрерывными" — матан, функциональный анализ, дифуры.Ну и да, учить операторы языка и учить иностранные языки это близкие задачи. На программирование остаётся "финальный проект: «Камень, ножницы, бумага»." то есть нечто уровня первого года обучения информатике в школе. Если не первой четверти.
eugeneyp
04.10.2021 16:44Для подтверждения или опровержения результатов тестов достаточно взять статистику сколько выпускников математических и лингвистических направлений работают программистами.
Бенефит от математике не в том что ты можешь выучить новый язык программирования, а в том что можно формальными словами описать некий алгоритм. Например алгоритм решения задач симплекс методом очень близок к написанию программы. Т.е. человеку с математическим складом ума, проще сформировать последовательность действий чем лингвисту. Например если писать должностную инструкцию то подход будет разным у одних четкие пункты у других красивые формулировки с использованием синонимов.
Если есть лингвисты успешно ставшие программистами опишите свое виденье, мне интересно будет прочитать.
LuggerMan
Формошлепить — конечно, а системщики, ембед и прочая орут в голосину!
F0iL
Зачем орать-то? 5+ лет занимался эмбеддед-разработкой (автоматизация нефтегазодобычи, я большую статью на эту тему тут писал), математика была нужна от силы на уровне 9-го класса школы. Я и не против был попробовать сделать что-то, что требовало бы хардкорной математики (не зря всё-таки я два года в универе вышку учил), но таких задач в работе просто не было.
Сейчас уже не первый год пишу системное ПО (в том числе драйвера устройств, реализация сетевых протоколов, оптимизация под low-memory платформы), и знаете что... там то же самое :)
UlanMAM
Возможно, вы были среди тех, кто создал Windows Vista.
F0iL
Нет, не был.
LuggerMan
Ну например БИНС под квадрокоптер замутить из датчиков. Ну и вообще сложные интересные задачи уровня senior? Может быть не «там этого нет», а «не видно, как применить, делаю на уровне 9-го класса»? Дискретка и мат. оптимизация в 9-м классе тоже не дается, напомню =)
Также часто удается удешевить производство вынесением некоторой логики на аналог (но это уже не программирование скорее, а «пилотажные фигуры высшей сложности»)
F0iL
Тоже может быть, не буду спорить. Но с другой стороны, если даже решение "на уровне девятого класса" поставленные задачи полностью выполняет, работает стабильно, в имеющиеся ресурсы укладывается с запасом -- то что ещё надо?
LuggerMan
Быстрее, выше, сильнее!
habr.com/ru/post/27055
Стремление к качеству, возможность выбора кристалла послабее, например.
Любой запас, кроме резерва — ИМХО недоработка. Перфекционизм, мать его так!
В дровах даже пару процентов программной скорости можно представить как конкурентное преимущество
F0iL
Вот уж точно нет. Как говорил то ли Кнут, то ли Дейкстра, преждевременная оптимизация есть корень всех бед.
Зачастую разница в цене итогового изделия копеечная (особенно сейчас, когда есть много очень недорогих и весьма мощных чипов), и во многих проектах инженеры на первое место ставят не микрооптимизации, а понятность/читаемость/простоту кода, чтобы обеспечить меньшую вероятность ошибок и было проще поддерживать проект в будущем.
elektroschwein
Собственно, рассказ по вашей ссылке и демонстрирует, что тактика "никакого запаса кроме резерва" как раз может привести к провалу.
KvanTTT
Я занимаюсь компилятором, и там алгоритмические задачи совсем не редкость, в частности на графы.