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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Комментарии (34)


  1. LuggerMan
    30.09.2021 16:49
    -6

    Формошлепить — конечно, а системщики, ембед и прочая орут в голосину!


    1. F0iL
      01.10.2021 11:03
      +8

      Зачем орать-то? 5+ лет занимался эмбеддед-разработкой (автоматизация нефтегазодобычи, я большую статью на эту тему тут писал), математика была нужна от силы на уровне 9-го класса школы. Я и не против был попробовать сделать что-то, что требовало бы хардкорной математики (не зря всё-таки я два года в универе вышку учил), но таких задач в работе просто не было.

      Сейчас уже не первый год пишу системное ПО (в том числе драйвера устройств, реализация сетевых протоколов, оптимизация под low-memory платформы), и знаете что... там то же самое :)


      1. UlanMAM
        01.10.2021 11:14
        -7

        Возможно, вы были среди тех, кто создал Windows Vista.


        1. F0iL
          01.10.2021 11:15
          +2

          Нет, не был.


      1. LuggerMan
        01.10.2021 15:18

        Ну например БИНС под квадрокоптер замутить из датчиков. Ну и вообще сложные интересные задачи уровня senior? Может быть не «там этого нет», а «не видно, как применить, делаю на уровне 9-го класса»? Дискретка и мат. оптимизация в 9-м классе тоже не дается, напомню =)
        Также часто удается удешевить производство вынесением некоторой логики на аналог (но это уже не программирование скорее, а «пилотажные фигуры высшей сложности»)


        1. F0iL
          01.10.2021 16:03

          Может быть не «там этого нет», а «не видно, как применить, делаю на уровне 9-го класса»?

          Тоже может быть, не буду спорить. Но с другой стороны, если даже решение "на уровне девятого класса" поставленные задачи полностью выполняет, работает стабильно, в имеющиеся ресурсы укладывается с запасом -- то что ещё надо?


          1. LuggerMan
            01.10.2021 16:16

            Быстрее, выше, сильнее!
            habr.com/ru/post/27055

            Стремление к качеству, возможность выбора кристалла послабее, например.
            Любой запас, кроме резерва — ИМХО недоработка. Перфекционизм, мать его так!
            В дровах даже пару процентов программной скорости можно представить как конкурентное преимущество


            1. F0iL
              01.10.2021 21:48
              +2

              Любой запас, кроме резерва — ИМХО недоработка.

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

              Зачастую разница в цене итогового изделия копеечная (особенно сейчас, когда есть много очень недорогих и весьма мощных чипов), и во многих проектах инженеры на первое место ставят не микрооптимизации, а понятность/читаемость/простоту кода, чтобы обеспечить меньшую вероятность ошибок и было проще поддерживать проект в будущем.


            1. elektroschwein
              03.10.2021 22:41

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


      1. KvanTTT
        02.10.2021 03:52

        Я занимаюсь компилятором, и там алгоритмические задачи совсем не редкость, в частности на графы.


  1. 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

    Переводчик: Разбираюсь в математике = легко стану программистом?

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


    1. sahsAGU Автор
      30.09.2021 16:57
      -4

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

      Если делать прямой перевод — название для статьи с 1000 просмотров. Хабр — не научный журнал. И в нем хочется придумать такое название, которое будет цеплять.
      Безусловно, выучить язык программирования =/= стать программистом. Но и большого «вранья» в заголовке, субъективно, нет. Даже с точки зрения социологии, очень близкие факторы. Вопрос насколько близкие, чтобы судить об этом объективно. Но это нужно дальнейшие исследования проводить.

      Да, с точки зрения заголовка я немного маркетолог.


      1. 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, онлайн курсы, офлайн курсы, университеты и т.п. Очень сомнительное исследование.


    1. tyomitch
      01.10.2021 09:25

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

      В оригинале нет ничего и про «разбираюсь в математике», там речь про numeracy — грубо говоря, способность считать в уме.


  1. TheAthlete
    30.09.2021 16:56

    Математика становится жирным плюсом в специфических задачах:
    - рекомендательные системы (математическая статистика, теорема Байеса и т.д.)
    - разработка игр (интегралы, квартенионы)
    - глубокое обучение, нейронные сети и т.д.


    1. tropico
      30.09.2021 20:51
      +4

      Если математика не нравится, то и всякая аналитика, статистика, бигдата и ML подавно. Сейчас чтобы быть нормальным программистом с математики нужна только таблица умножения и базовая дискретка, которая объясняется на пальцах.


      1. Exclipt
        30.09.2021 23:52
        +2

        Зачем таблица умножения?


      1. Mohave
        01.10.2021 08:58

        А как же булевая алгебра? Она же ветвь математики.


    1. vlad-kras
      01.10.2021 20:34
      +3

      Математика становится жирным плюсом в специфических задачах:
      - рекомендательные системы (математическая статистика, теорема Байеса и т.д.)
      - разработка игр (интегралы, квартенионы)

      Просто там она - часть либо предметной области (модели), либо методологии решения.

      А так ... Знание физики является жирным плюсом при разработке софта, моделирующего физические процессы. Знание иностранных языков является жирным плюсом при разработке систем машинного перевода. Знание бухучета и налогов является жирным плюсом при разработке бухгалтерских программ. Ну и т.д.


  1. Wolfie
    30.09.2021 16:58
    +3

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


  1. DarthVictor
    30.09.2021 18:02
    +2

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

    А тест глянуть можно? Потому что если в тесте спрашивали какой оператор использовать для организации цикла, то это — одно. А если, как используя выученный оператор цикла перевернуть строку — то другое.


  1. Tyusha
    30.09.2021 19:27
    +2

    Похоже, под изучением программирования автор понимает запоминание написания операторов, зарезервированных слов ЯП, а также имëн функций необходимых библиотек.


    1. GospodinKolhoznik
      30.09.2021 20:42
      +1

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


  1. third112
    30.09.2021 22:39
    +2

    Работал со многими математиками. Да, у них особый подход. Который зачастую мешает освоению программирования. ИМХО математик воспринимает задачу метафизически, т.е. вне времени — если в какой конструкции найден треугольник, где квадрат гипотенузы равен сумме квадратов катетов, то этот треугольник мог быть найден годом раньше и через 100 лет будет найден: фактор времени не имеет значения. Ситуация, когда через микросекунду треугольник пропадет математика раздражает. Факт, что математики эффективно работают с динамическими системами, но динамику они представляют метафизически. Для такого представления нет деления на шаги: сначала вычислить а, потом в, а потом с. Так сложилось, и такой подход полезен. Но это другой подход.


    1. Refridgerator
      01.10.2021 06:22
      +3

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


  1. anonymous
    00.00.0000 00:00


    1. F0iL
      01.10.2021 11:31
      +1

      А кого считать "выдающимся программистом", за какие заслуги выдаётся это звание? Вот Линус Торвальдс -- выдающийся программист? А Дэн Абрамов, например?


  1. askv
    01.10.2021 00:48

    В свое время выбрал математику, так как она а) сложнее, б) реже меняется, чем технологии программирования. Ну и ум в порядок приводит... )


  1. heartdevil
    01.10.2021 09:07
    +2

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


    1. UlanMAM
      01.10.2021 11:37

      Видимо, просто математика легко давалась и была интересна, а программирование было какого-то из двух факторов лишено. Я в свою очередь замечал, что если деятельность и дается легко, и интересна, люди в нее будут прям упарываться. А если она требует чуть больших усилий(буквально лишний час над задачей посидеть), но неинтересна - то ее сразу будут стараться избегать в пользу первой.


  1. UlanMAM
    01.10.2021 11:30

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


  1. askv
    02.10.2021 12:07

    Про математику: Константин Кноп, 02.10.2021 "Ровно три года назад Анатолий Альбертович Шперх вытащил из моего комментария в отдельный пост мой ответ на вопрос "Зачем мы учим всех математике". С тех пор я уже не раз повторял эти аргументы в живых дискуссиях, отвечая на контраргументы противников, - поэтому публикую новую версию текста." https://www.facebook.com/kostyaknop/posts/10222806976816538


  1. Ndochp
    03.10.2021 22:58

    математика вообще — очень широкое понятие.
    На нашем потоке (МАИ, прикладная математика, 98-2003) довольно хорошо среди середняков прослеживалась такая тенденция — середняки поделились между "дискретыми" (программирование, линейная алгебра, дискретная математика) и "непрерывными" — матан, функциональный анализ, дифуры.


    Ну и да, учить операторы языка и учить иностранные языки это близкие задачи. На программирование остаётся "финальный проект: «Камень, ножницы, бумага»." то есть нечто уровня первого года обучения информатике в школе. Если не первой четверти.


  1. eugeneyp
    04.10.2021 16:44

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

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

    Если есть лингвисты успешно ставшие программистами опишите свое виденье, мне интересно будет прочитать.