«Не каждый может быть программистом»?

182

Старая поговорка, которой придерживаются многие программисты, гласит: «Для изучения программирования требуется определенный тип ума, и не каждый может это сделать».

Теперь я уверен, что у всех нас есть своя собственная история неподтвержденных данных, но было ли это изучено с научной точки зрения?

Система не работает
источник
63
Похоже, хороший вопрос скептиков.
Чад Харрисон
10
Обучение программированию сильно отличается от способности быть ценным программистом. Программирование по большей части очень простое. Читайте спецификации, реализуйте соответственно. Контрольная работа. Повторение. Да, каждый может быть программистом. Не каждый может быть ценным программистом. Особенно определенные задачи требуют гораздо больше размышлений и экспериментов, чем другие. Такие вещи лучше оставить людям, которые действительно любят это делать. Примером может быть реализация низкоуровневых конструкций, подсчет тактов, битов и байтов без каких-либо современных инструментов программирования или чего-либо еще. Не каждый может справиться с этим.
zxcdw
9
@zxcdw - я не задаюсь вопросом "Не каждый может быть хорошим / ценным программистом". Это данность, поскольку «Не каждый может быть хорошим / ценным Х» - универсальная истина для почти любого значения Х как призвания. То, что я подвергаю сомнению, является способностью изучить программирование и обернуть его голову для обычного человека.
Система
37
Утверждение подтверждается каждый день на программистов <вздох>
Яннис
15
Я думаю, что суть этого вопроса не в качестве программистов, а в том, чтобы «всех можно было обучить, чтобы взять проблему и наметить логически правильное решение на нечеловеческом языке», что я иногда не считаю что-то, что каждый может сделать. Концепции конструирования логики для определения поведения, не связанного с веществом, машины, не являющейся человеком, являются чрезвычайно абстрактными, этот уровень абстракции требует умения следовать множеству логических указаний, потому что вы не можете прикоснуться к продуктам каждого из них. шагай руками
Джимми Хоффа

Ответы:

87

Другое исследование « Исследование жизнеспособности ментальных моделей, проводимое начинающими программистами» :

Эта статья описывает исследование жизнеспособности ментальных моделей, используемых начинающими программистами в конце первого года обучения программированию на Java. Качественные результаты определяют диапазон ментальных моделей ценностных и эталонных заданий, которыми владеют участники. Количественный анализ показывает, что примерно треть учеников придерживались нежизнеспособных ментальных моделей ценностного присвоения, и только 17% учеников обладали жизнеспособной ментальной моделью эталонного присвоения. Кроме того, с точки зрения сравнения между ментальными моделями участников и их успеваемостью в ходе итоговой оценки и итогового экзамена было установлено, что учащиеся с жизнеспособными ментальными моделями показали значительно лучшие результаты, чем учащиеся с нежизнеспособными моделями. Эти результаты используются, чтобы предложить более «конструктивистский»

Кроме того, см. Более поздние исследования тех же авторов исследования «Овцы против коз» (которое никогда не было опубликовано, чтобы быть ясным). Их последним и самым последним исследованием по этой теме с 2009 года является Мета-анализ влияния последовательности на успех в раннем изучении программирования (pdf).

Был разработан тест, который, по-видимому, проверял знания ученика о назначении и последовательности перед первым курсом программирования, но на самом деле был разработан, чтобы отразить их стратегию рассуждения. Эксперимент обнаружил две разные группы студентов: один мог построить и последовательно применять ментальную модель выполнения программы; другая оказалась либо неспособной построить модель, либо применить ее последовательно. Первая группа показала намного лучшие результаты в конце экзамена, чем вторая, с точки зрения успеха или неудачи. Тест не очень точно предсказывает уровни производительности, но, объединив результат шести повторов эксперимента, пять в Великобритании и один в Австралии, мы показываем, что последовательность действительно сильно влияет на успех в раннем обучении программированию - но опыт фонового программирования, с другой стороны,

Джефф Этвуд
источник
24
«... первый курс по программированию на Java ...» <- Я нашел вашу проблему.
Джон Галлоуэй
4
Борнат, помимо того, что отказывается от оригинальной статьи, обсуждает попытки воспроизвести результаты 2009 года - мне они не кажутся обнадеживающими: eis.mdx.ac.uk/staffpages/r_bornat/papers/…
Blaisorblade
6
Как упомянуто выше, оригинал статьи об этом был отозван: retractionwatch.com/2014/07/18/…
Губка
92

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

Когнитивное исследование раннего обучения программированию - профессор Ричард Борнат, доктор Рэй Адамс

Все учителя программирования находят, что их результаты отображают «двойной горб». Как будто есть две группы населения: те, кто может [программировать], и те, кто не может [программировать], каждая со своей независимой кривой колокола.

Почти все исследования в области преподавания и обучения программированию были сосредоточены на преподавании: измените язык, измените область применения, используйте IDE и работайте над мотивацией. Ничего из этого не работает, и двойной горб сохраняется.

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


Вот запись в блоге Джеффа Этвуда, которая интерпретирует результаты и помещает некоторые вещи в контекст.

Несмотря на огромные изменения, которые произошли с тех пор, как в 1950-х годах были изобретены электронные вычисления, некоторые вещи остаются неизменными. В частности, большинство людей не могут научиться программировать: от 30% до 60% от каждого факультета информатики в университетах проваливают первый курс программирования.

Опытные учителя утомлены, но никогда не забывают об этом факте; новички с яркими глазами, которые считают, что старые, должно быть, делали это неправильно, изучают правду из горького опыта; и так было в течение почти двух поколений, с тех пор, как эта тема началась в 1960-х годах.

sergserg
источник
46
Чтобы быть справедливым - это исследование доказывает, что 30-60% школьного приема не могут быть обеспокоены выполнением какой-либо работы. Это было верно по всем предметам и все время!
Мартин Беккет
15
Это очень интересная статья, и она поддерживает идею о том, что не все вырезаны для программирования. К сожалению, более поздняя работа авторов (также на связанной странице) показывает, что их тест менее предсказательный, чем первоначально предполагалось. «Мы не можем утверждать, что отделяем программирующих козлов от непрограммированных овец ... К сожалению, результат не соответствует первоначальному обещанию, но он не совсем закрыл дверь для наших исследований».
AShelly
26
Должно быть ясно, что первая статья 2006 года была только черновой и не была опубликована. Так что это не совсем научно рассмотрено. Может быть, лучше взглянуть на более поздние исследования на странице автора .
Джефф Этвуд
17
Исследование успеха в академическом курсе - это странный способ изучения этого явления. Во-первых, лекции, вероятно, являются наименее подходящим способом обучения программированию. Во-вторых, не все учатся (хорошо) на лекциях. Это слишком много предвзято для меня там.
Рафаэль
5
Профессор Борнат позже попытался добровольно отозвать этот проект, потому что у него были проблемы с психическим здоровьем в то время. eis.mdx.ac.uk/staffpages/r_bornat/papers/… Более того, мое чтение гл. 3 заключается в том, что другие не смогли воспроизвести результат - как говорится, даже заключение метаанализа 2009 года «по крайней мере зависит от культурной среды и образовательных практик ». В целом, я думаю, что курс был плохим, что неудивительно, поскольку «как научить программировать эффективно» является проблемой исследования.
Blaisorblade
33

Любой может быть программистом. Подумайте, как легко люди понимают электронные таблицы. Подумайте, с какой готовностью Алан Кей знакомит детей с программированием с помощью экспериментов и исследований в программируемой среде.

Люди могут изучать успехи на курсах на уровне колледжа и делать вывод, что «некоторые люди не подходят для изучения программирования». Однако такой вывод сильно выходит за рамки наблюдаемых доказательств. Сколько неудач можно было бы отнести к тому, как преподается программирование (слишком абстрактно?), Или какой стиль программирования преподается (слишком императивно?), Или к среде программирования (компиляция, без немедленной обратной связи?).

Хорошо известно, что люди постигают абстракции наиболее легко после того, как они уже работают с несколькими конкретными примерами - то есть, что мы не можем чему-то научиться, пока мы почти не знаем это. Поэтому начинать с абстракции - совершенно глупый способ обучения программированию. Многие люди, которые спотыкаются о предвзятых «ментальных моделях», преуспели бы, если бы преподавали в более конкретной среде с обратной связью в реальном времени (например, в Академии Кан для КС ), а затем поощряли подниматься по лестнице абстракции, когда они готовы к этому. Learnable Programming - недавнее эссе Брета Виктора, в котором обращается внимание на ненужные экологические проблемы, с которыми сталкиваются программисты в процессе обучения.

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

dmbarbour
источник
7
Я думаю, что любой может научиться элементарному кодированию так же, как он может изучать основную музыку. Однако зарабатывать на жизнь этим - другое дело. Например, я люблю играть на гитаре, но я не собираюсь отправляться в тур по многогородному стадиону или появляться на крупном студийном альбоме в ближайшее время.
jfrankcarr
4
Взгляните на статью, на которую ссылается ответ Серга. Даже если это не так ясно, как они первоначально думали, правда в том, что некоторые люди просто не могут обернуться вокруг самых основных концепций программирования, даже после месяца или двух занятий - например: x = 1; y = x;и вопрос " Каковы значения xи y? "
Изката
3
Привет и добро пожаловать! Вы, вероятно, не знаете этого, так как вы очень новичок, но нам действительно не нравятся открытые и / или дискуссионные вопросы. Я удалил Is it true that not everyone can learn how to program?строку из вопроса, наши более опытные участники проигнорировали ее, осознав, что она не соответствует нашим рекомендациям, и сосредоточили свои ответы на исследовательских / научных аспектах вопроса. Не могли бы вы сделать то же самое?
Яннис
3
@jfrankcarr - Любой навык на профессиональном или соревновательном уровне оставит многих практикующих позади. Большинство людей не могут говорить или писать даже на естественном языке профессионально.
Дмбарбур
3
@Izkata - статья, связанная с Serg, имеет сомнительную научную ценность; Подобные результаты были бы достигнуты от любого плохо обученного класса: люди, которые уже поняли предмет, преуспели. И что касается вашего примера вопроса: более распространенными были вопросы, которые предполагали императивную семантику, которые, конечно, не являются интуитивными Могли бы вы даже ответить на свой вопрос, если бы не могли предположить отсутствие параллелизма?
dmbarbour
19

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

Многое связано с тем, как этому учат.

Многое также связано с желанием - некоторым не нравится программирование. Но даже в этом случае, они могут изучить это, если они приложат это честное усилие.

Майк Данлавей
источник
5
Я часто задаюсь вопросом, где желание играет в этом, мы все знаем, насколько совершенно неинтересное программирование для подавляющего большинства населения, заставляет меня задаться вопросом, сколько людей пытаются пойти на деньги за деньги, но у средних людей полное отсутствие интереса в том, как компьютер работает.
Джимми Хоффа
6
@Jimmy: я пытался сделать это интересным, заставляя их участвовать в личных проектах об играх, науке, финансах, музыке, что бы им ни нравилось. Программирование гораздо интереснее, когда это средство для достижения цели.
Майк Данлавей
2
@Den: Ну, они должны были делать небольшие программы для домашней работы, у них были тесты и тесты, и каждый из них должен был сделать значительный личный проект по программированию, все из которых я оценил. Курс был обязательным.
Майк Данлавей
1
@MikeDunlavey У студентов всегда есть друзья, которые могут программировать, а домашнюю работу можно легко обмануть.
Sulthan
2
@Sulthan: не в моем классе они не сделали. Некоторые пытались. Некоторые пытались скопировать с других на тесте. Это было очевидно - код был слишком похож на чужой, и в то же время содержал очевидные ошибки. Для проектов нет двух одинаковых, и ничто не поднимает красный флаг, как кто-то, кто посредственно работает над тестами и домашними заданиями, но превращается в красивый проект. Я просто составляю еще один тест и даю его им. Если они явно не знают, в каком направлении я нахожусь, я не обязан давать им хорошую оценку. Кроме того, я могу позвонить другому профессору.
Майк Данлавей
7

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

Тесты были похожи на то, что вы видите на тестах IQ (каков следующий номер в последовательности и т. Д.).

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

К сожалению, HR-дроны не поняли эти тесты (и потерпели неудачу, когда их взяли!), Поэтому набор в эти дни зависит от того, что понимают HR-дроны - хорошие навыки обучения в колледже, общения и ношения костюмов.

Это в значительной степени причина того, что в крупных ИТ-отделах есть много людей, которые великолепно выступают в PowerPoint, и очень мало хороших программистов.

Джеймс Андерсон
источник
1
+ Я так благодарен, что мне никогда (почти) не приходилось проходить HR.
Майк Данлавей
4

Тем, кто ссылается на исследование «Двойной горб» или «Козел против овец» Дехнади и Борната, стоит проверить умственные модели и способности программирования, сделанные Касперсеном и др. (2007), в которых они пытаются воспроизвести его:

Прогнозирование успеха студентов, участвующих в вводных курсах программирования, было активным научным направлением на протяжении более 25 лет. До недавнего времени никакие переменные или тесты не обладали сколько-нибудь значительной предсказательной силой. Тем не менее, Dehnadi и Bornat утверждают, что нашли простой тест для программирования способности чисто отделить программирование овец от непрограммирующих коз. Мы кратко представляем их теорию и инструмент тестирования.

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

Основываясь на этом сбое тестового инструмента, мы обсуждаем различные объяснения наших различных результатов и предлагаем метод исследования, из которого можно было бы обобщить местные результаты в этой области. Кроме того, мы обсуждаем и критикуем тестирование способностей Денади и Борната и разрабатываем альтернативные инструменты тестирования.

Томас Парк
источник
4

Можно изучать возможности абстракции или другие полезные знания, но определение программирования неясно, и я думаю, что цитата не имеет значения, потому что существуют разные способы взглянуть на программирование:

Первый тип: языки программирования (или должны быть) неким человеческим языком, созданным для описания задачи, которую должен выполнить компьютер, поэтому каждый, кто говорит, должен иметь возможность программировать. Это называется сценарием, бейсиком, системой набора текста TeX и т. Д. Язык или система не имеют значения, это то, как их создатели и люди смотрели на это: «Уважаемая программа / компьютер, напечатайте мое имя» , а не «Дайте мне пробел размером одиннадцать символов, затем дайте мне адрес этого пробела, затем позвольте мне сохранить его, затем введите одиннадцать символов в эту память, которую вы можете извлечь из моего буфера клавиатуры (но не забудьте очистить его» , и т.д."

В этом случае ясно, что исследование скорее будет «Не каждый язык может быть быстро ассимилирован?».

С другой стороны, языки программирования - это просто способ описать, как компьютер работает или как он должен работать, как он должен быть «связан», если вы думаете о компьютерах 1950-х годов. Поэтому программист ничего не может сделать, даже если он «отлично» говорит на языке программирования, если его интеллект не может достичь этого уровня абстракции, когда вы видите, что байты хранятся в памяти, строки как указатели и т. Д., А затем вернуться на землю, чтобы связать это с проблемой. Поэтому не каждый человек может программировать (на ассемблере ...).

Кроме того, вам понадобятся все качества, необходимые для работы и производства чего-либо: очень хорошо знайте, чего вы хотите, чтобы другим было легко понять / выполнить / пересмотреть, сосредоточиться на ваших целях и т. Д. Но как архитектор, писатель, музыкант, простит..аэхх протезист и пр.

Но у большинства людей хорошие способности к абстракции, особенно у детей. Некоторые немецкие школы преподают на Haskell дошкольников (языки программирования, такие как Pascal или Delphi , преподаются в каждой немецкой школе).

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

Вы найдете очень краткий анализ того, как люди учатся программированию, в статье Питера Норвига « Научите программировать за десять лет ». Кажется, он думает, что нет прирожденного программиста.

Ив
источник
3
Привет и добро пожаловать! Я немного озадачен тем, как ваш ответ отвечает на вопрос, который на самом деле касается того, было ли это изучено или нет ...
Яннис
извините, я перепутал с кнопкой "отправить" ... Надеюсь, это имеет больше смысла
Ив
Вы на правильном пути, но вы тесно связываете языки программирования с оборудованием (компьютерами). Программирование - это не только умение общаться с компьютером. Программирование - это последовательное описание процесса. Описание процесса другому человеку похоже на кодирование его на языке программирования высокого уровня. Самая большая разница в том, что люди более терпимы к неопределенности.
Император Орионий
Я не защищаю эту точку зрения, но попытался указать на тот факт, что люди склонны видеть языки программирования и использование, которое они должны использовать, либо как описания задач (что важно для программирования высокого уровня и сценариев), либо как описания «компьютерных процессов» (например, языки низкого уровня кажутся ближе к языку моделирования VHDL, чем к VB.NET, даже если они являются языками программирования). Эти 2 подхода очень разные, и все же 2 стороны одной медали. Они настаивают на различных аспектах человеческого интеллекта, которые трудно определить количественно. Так что их сложно изучать.
Ив
3

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

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

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

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

В течение двух недель я мог определить тех, кто получит его, и тех, кто не получит с 100% точностью. Вы либо согласились с тем, что компьютер работает именно так, либо били себя по голове всем классом. Там не было никакого среднего уровня. (Тот факт, что это был класс для пожилых людей, означал, что у нас было много тех, кто выбивал головы, что делало схему намного более очевидной.)

Лорен Печтель
источник