Разбираюсь в математике = легко стану программистом? +10




Согласно исследованию - влияние есть, но незначительное. Обучаемость скорее связана с навыками изучения новых языков (не программирования).

Что в первую очередь ассоциируется у вас с программированием? Может быть математика? Большинство знакомых мне программистов не связывают то, чем они занимаются, в первую очередь с математикой. Они скорее говорят о логике. Тем не менее, идея о том, что навыки программирования связаны со способностями к математике, остается живой даже среди программистов.

Совсем недавно было опубликовано исследование Вашингтонского университета. В нем исследователи сделали вывод о том, что развитые математические навыки не являются надежным показателем того, что человек быстро и просто научится программировать.

Кроме этого ученые выявили кое-что еще: предрасположенность к изучению иностранных языков сильно влияет на способность обучения программированию. И речь именно о лингвистических языках, а не о языках программирования. Сходство между английским, немецким или французским языками и языками программирования может объяснить полученные результаты.

Можно сказать, что как и в «настоящих» языках, в языках программирования существует грамматика. Кроме того, они состоят из настоящих слов и требуют, чтобы вы формулировали идеи - часто вербально.

Но как проводилось это исследование?

В качестве языка программирования для изучения был выбран Python - хороший выбор для новичков. Поэтому хорошо подходит для участников исследования, которые никогда раньше не писали код.

Перед тем, как исследовать способности участников изучать Python, были проведены несколько тестов: умение считать, языковые способности и общие когнитивные способности (способность к поиску решений, способность к обновлению рабочей памяти, объем рабочей памяти).

Примем языковые способности (language aptitude) как некий фактор человека, суммирующий навыки, любовь и предрасположенность к изучению новых языков.

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

В конце каждого занятия их просили заполнить тест на то, что они только что изучали. Кроме того, наблюдая за каждым участником, исследователи могли рассчитать скорость обучения. Далее изучались правильность заполнения теста и то, как часто участники обращались за помощью.

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

Все эти факторы были сведены к одному: общей способности научиться программировать. Вот полученные доказанные типы предикторов и результаты в целом:

  • Языковые способности - лучший предиктор продуктивности обучения.

  • Успешность в программировании в наибольшей степени определялась общими когнитивными способностями; на втором месте - языковые способности.

Разница языков?

Исследование проводилось на базе Python, и автор в конце задает вопрос: каковы были бы результаты, если бы вместо Python был выбран более сложный язык? В то время как Python имеет низкий порог вхождения, другие языки - нет.

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

С другой стороны, разница действительно существует при сравнении различных возможностей языков программирования. Написать программу Python в стиле Python, несомненно, проще, чем писать программу на C в стиле С (субъективно). Разные языки предлагают разные функции. И эти функции требуют разного количества когнитивных усилий.

А что вы думаете об этом?




Комментарии (31):