Чи вивчено "Не кожен може бути програмістом"?


182

Стара приказка, якої дотримуються багато програмістів, - це "розуму програмування потрібно певний тип, і не кожен може це зробити".

Тепер я впевнений, що всі ми маємо власну суть анекдотичних доказів, але це було вивчено науково?


63
Звучить як питання про хороших скептиків.
Чад Гаррісон

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

9
@zxcdw - Я не дуже запитую "Не кожен може бути хорошим / цінним програмістом". Це дані, оскільки "Не кожен може бути добрим / цінним X" - це універсальна істина майже для будь-якого значення X як покликання. Мене допитують - це можливість навчитися програмуванню та обернути їх головою навколо простої людини.
Система вниз


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/…
Spongeboy

92

Так, в Інтернеті є досить відомий папір, розроблений для того, щоб більш-менш визначити "Хто вирішений програмістом".

Пізнавальне дослідження раннього вивчення програмування - проф. Річард Борнат, доктор Рей Адамс

Усі вчителі програмування вважають, що їх результати відображають «подвійний горб». Ніби є дві групи: ті, хто вміє [програмувати], і ті, хто не може [програмувати], кожне зі своєю незалежною кривою дзвону.

Майже всі дослідження викладання та навчання програмуванню зосереджені на викладанні: змінити мову, змінити область застосування, використовувати IDE та працювати над мотивацією. Нічого не працює, і подвійний горб зберігається.

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


Ось допис у блозі Джеффа Етвуда, який інтерпретує результати та ставить деякі речі в контекст.

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

Досвідчені вчителі втомлюються, але ніколи не забувають про це; світлі новачки, які вважають, що старі, мабуть, робили неправильно, дізнаються правду з гіркого досвіду; і так це вже майже два покоління, з тих пір, як тема почалася в 1960-х роках.


46
Справедливості - це дослідження свідчить про те, що 30-60% шкіл не можуть заважати виконувати будь-яку роботу. Це було правдою для всіх предметів та всіх часів!
Мартін Бекетт

15
Це дуже цікавий документ, і він підтримує ідею, що не всі вирішені програмувати. На жаль, подальша робота авторів (також на пов'язаній сторінці) показує, що їх тест є менш прогнозним, ніж вважалося спочатку. "Ми не можемо стверджувати, що відокремлюємо козів-програмістів від овець, що не програмують ... Прикро, що результат не відповідає початковій обіцянці, але він не зовсім закрив двері для наших досліджень".
AShelly

26
Зрозуміло, що перший документ від 2006 року був лише чернетки і не публікувався. Тож це не зовсім науково розглядається. Можливо, краще подивитися на пізніші дослідження на сторінці автора .
Джефф Етвуд

17
Дослідження успіху в академічному курсі - дивний спосіб вивчення цього явища. По-перше, лекції - це, мабуть, найменш підходящий спосіб навчання програмуванню. По-друге, не всі навчаються (добре) на лекціях. Це занадто велика упередженість дизайну для мене там.
Рафаель

5
Пізніше професор Борнат поклав клопотання добровільно відкликати цей проект, оскільки він на той час був проблемою психічного здоров'я. eis.mdx.ac.uk/staffpages/r_bornat/papers/… Більше того, моє читання розд. 3 полягає в тому, що інші не змогли повторити результат - як то кажуть, навіть висновок про метааналіз 2009 року "впливає принаймні на культурне середовище та освітні практики ". В цілому, я найкраще здогадуюсь, що курс був поганий, що не дивно, оскільки "як ефективно навчати програмуванню" є проблемою дослідження.
Blaisorblade

33

Будь-хто може бути програмістом. Поміркуйте, як легко люди отримують електронні таблиці. Поміркуйте, з якою готовністю Алан Кей знайомить дітей з програмуванням за допомогою експерименту та дослідження в програмованому середовищі.

Люди можуть вивчити успіх на курсах на рівні коледжу та зробити висновок, що "деякі люди не вміють навчатися програмуванню". Однак такий висновок суттєво перевищує межі спостережуваних доказів. Скільки невдач можна було б пояснити тим, як викладається програмування (занадто абстрактне?), Чи якому стилю програмування викладається (занадто імперативно?), Або середовищі програмування (компіляція, немає негайних відгуків?).

Добре зрозуміло, що люди сприймають абстракції найбільш легко після того, як вони вже працювали з декількома конкретними прикладами - тобто, що ми не можемо чогось навчитися, поки ми майже цього не знаємо. Починаючи з реферату, отже, це абсолютно нерозумний спосіб навчання програмуванню. Багато людей, які натрапляють на задумані "ментальні моделі", процвітають, якби навчати їх у більш конкретних умовах із зворотним зв'язком у реальному часі (наприклад, в Академії Кан для КС ), то заохочують піднятися сходами абстракції, коли вони будуть до цього готові. Навчальне програмування - це недавній нарис Брета Віктора, який звертає увагу на зайві екологічні проблеми, з якими стикаються програмісти під час навчання.

У деяких випадках саме учні закінчують свої заняття. Інтелектуальна лінь і навмисне незнання існуватимуть у будь-якої великої групи людей. Розумний народ не є винятком, як це може засвідчити кожен, хто посперечався з блискучим кривошипом. Але, особливо для програмування та математики, нерідко заняття не вдається школярам.


7
Я думаю, що майже кожен може навчитися рудиментарному кодуванню так само, як він може вивчити основну музику. Однак заробляти на життя - це вже інша справа. Наприклад, я люблю грати на гітарі, але незабаром не збираюся їздити на багатомісний тур на стадіон або з’являтися на великому студійному альбомі.
jfrankcarr

4
Погляньте на папір, пов’язаний у відповіді Серга. Навіть якщо це не так зрозуміло, як вони вважали спочатку, правда полягає в тому, що деякі люди просто не можуть обернути голову навколо найпростіших концепцій програмування навіть через місяць-два заняття - наприклад: x = 1; y = x;і питання " Які значення xта y? "
Ізката

3
Привіт і ласкаво просимо! Ви, мабуть, цього не знаєте, оскільки ви зовсім новачок, але ми насправді не любимо відкритих питань та / або обговорень. Я вилучив Is it true that not everyone can learn how to program?рядок із питання, наші більш досвідчені члени ігнорували його, розуміючи, що він не відповідає нашим вказівкам, і сконцентрували свої відповіді на дослідницьких / наукових аспектах питання. Не могли б ви зробити те саме?
yannis

3
@jfrankcarr - Будь-яка майстерність на професійному та конкурентному рівні залишить багатьох практикуючих позаду. Більшість людей не можуть професійно говорити чи писати навіть природну мову.
декабрь

3
@Izkata - Документ, з яким пов'язаний Серг, має сумнівну наукову цінність; подібні результати були б досягнуті в будь-якому погано вивченому класі: люди, які вже зрозуміли предмет, зробили добре. А щодо вашого прикладу: більш поширеними були питання, що передбачали імперативну семантику, які, звичайно, не є інтуїтивно зрозумілими. Чи можете ви навіть відповісти на власне запитання, якби ви не могли припустити відсутність одночасності?
грудень

19

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

Дуже багато стосується того, як його навчають.

Дуже багато стосується і бажання - деякі не вважають програмування найменш цікавим. Але навіть так, вони можуть це навчитися, якщо чесно докладуть зусиль.


5
Мені часто цікаво, куди в цьому входить бажання, ми всі знаємо, наскільки цілком нецікаве програмування для переважної більшості широкого загалу, змушує мене замислитися, скільки людей намагаються збирати грошові кошти за гроші, але, маючи середньостатистичні особи, повна відсутність інтересу у спосіб працює комп’ютер.
Джиммі Хоффа

6
@Jimmy: Я намагався зробити це цікавим, націлюючи їх на особисті проекти про ігри, науку, фінанси, музику, що б їм не подобалося. Програмування набагато цікавіше, коли це засіб для досягнення мети.
Майк Данлаве

2
@Den: Ну, вони повинні були робити невеликі програми для домашніх завдань, у них були вікторини та тести, і кожен з них повинен був зробити важливий проект особистого програмування, який я оцінив. Курс був обов'язковим.
Майк Данлаве

1
@MikeDunlavey У студентів завжди є друзі, які вміють програмувати, а домашні завдання можна легко обдурити.
Султан

2
@Sulthan: Не в моєму класі вони цього не зробили. Деякі спробували. Деякі спробували копіювати з інших тест. Це було очевидно - код був надто схожий на чужий, і в той же час містив явні помилки. Щодо проектів, не двоє були схожими, і нічого не піднімає червоний прапор, як хтось, хто робить посередню роботу над вікторинами та домашніми завданнями, але перетворюється на прекрасний проект. Я просто складаю ще один тест і даю їм його. Якщо вони чітко не знають, в який бік йде, я не зобов'язаний давати їм хорошу оцінку. Як варіант, я можу зателефонувати до іншого професора.
Майк Данлаве

7

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

Тести були схожими на те, що ви бачите на тестах IQ (яке наступне число в послідовності тощо).

Анекдотичні докази полягали в тому, що, хоча не кожен, хто здав тест, став хорошим програмістом, той, хто не пройшов тест, але був найнятий з інших причин, ніколи не став хорошим програмістом.

На жаль, HR безпілотники не розуміли цих тестів (і не вдалося, коли їх взяли!), Тому набір у наші дні залежить від того, що розуміють HR-трутні - хорошого коледжу, спілкування та навичок носіння.

Це в значній мірі тому, що у великих відділах ІТ є багато людей, які чудово підходять на шоу PowerPoint і дуже мало хороших програмістів.


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

4

Тим, хто цитує дослідження Денаді та Борнату з подвійним горбом або козами проти овець, варто перевірити психічні моделі та вміння програмування Caspersen et al (2007), у яких вони намагаються повторити:

Прогнозування успішності студентів, які беруть участь у вступних курсах програмування, є активною науковою сферою вже більше 25 років. До недавнього часу жодні змінні чи тести не мали суттєвої прогнозної сили. Однак Денаді та Борнат стверджують, що знайшли простий тест на програмування на здатність чітко відокремити овець-програмістів від кіз, які не програмують. Ми коротко представляємо їх теорію та інструмент тестування.

Ми повторили їх тест у нашому локальному контексті, щоб перевірити та, можливо, узагальнити їхні висновки, але ми не змогли показати, що тест пророкує успіх студентів у нашому вступному курсі з програмування.

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


4

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

Перший вид: мови програмування - це (або повинна бути) якась людська мова, створена для опису завдання для виконання комп’ютером, тому кожен, хто говорить, повинен мати можливість програмувати. Це називається сценарієм, BASIC, системою набору текст TeX тощо. Мова чи система не має значення. Це так, як їх творці та люди дивилися на це: "Шановна програма / комп’ютер, будь ласка, надрукуйте моє ім'я" , а не "Знайдіть мені простір розміром з одинадцяти знаків, потім дайте мені адресу цього простору, потім дозвольте мені зберегти його, а потім введіть в цю пам'ять одинадцять символів, які ви можете вийняти з мого буфера клавіатури (але не забудьте очистити його тощо "

У цьому випадку зрозуміло, що дослідження швидше буде "Чи не кожна мова може бути засвоєна швидко?".

З іншого боку, мови програмування - це лише спосіб описати, як працює комп'ютер або як він повинен працювати, як він повинен бути "підключений", якщо ви думаєте про комп'ютери 1950-х років. Тому програміст нічого не може зробити, навіть якщо він "розмовляє" мовою програмування ідеально, якщо його інтелект не може досягти цього рівня абстракції, де ви бачите, як байти зберігаються в пам'яті, рядки як покажчики тощо, а потім поверніться на землю, щоб пов’язати це з проблемою. Тому не кожна людина може програмувати (мовою складання ...).

Окрім цього, вам знадобляться всі якості, необхідні для того, щоб працювати і виробляти щось: дуже добре знати, що ви хочете, полегшити оточуючим зрозуміти / завершити / переглянути, зосередитись на своїх цілях тощо ... Але так само, як архітектор, письменник, музикант, протест..аех протесист тощо.

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

Тому я б сказав, що на питання дуже важко відповісти, і будь-яка відповідь (або дослідження), ймовірно, не має значення.

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


3
Привіт і ласкаво просимо! Я трохи розгублений у тому, як ваша відповідь відповідає на питання, яке насправді стосується того, вивчено це чи ні ...
yannis

вибачте, що я заплутався з кнопкою "відправити" ... Я сподіваюся, що це має більше сенсу
Ів,

Ви на правильному шляху, але ви чітко пов’язуєте мови програмування з обладнанням (комп'ютерами). Програмування - це не виключно можливість спілкування з комп'ютером. Програмування - це послідовне опис процесу. Опис процесу іншим людям схоже на кодування його мовою програмування високого рівня. Найбільша різниця полягає в тому, що люди більш толерантні до неоднозначності.
Імператор Оріоній

Я не захищаю цю точку зору, але намагався вказати на той факт, що люди схильні бачити мови програмування та використання, яке повинно бути використане ними як опис завдань (що важливо для програмування та сценаріїв високого рівня), або як опис "комп'ютерних процесів" (наприклад, мови низького рівня здаються ближче до мови моделювання VHDL, ніж до VB.NET, навіть якщо вони мови програмування). Ці 2 підходи дуже різні, і все-таки дві сторони однієї і тієї ж монети. Вони наполягають на різних аспектах людського інтелекту, які важко оцінити. Тож їх важко вивчити.
Ів

3

Багато років тому я робив кілька курсів, які включали теорію військового керівництва. Частина теорії полягала в тому, що існує континуум керівництва - від тих, хто є природними лідерами, до тих, хто не міг би вести собаку на повідку. Ідея полягала в тому, що люди розподіляли цей континуум керівництва у кривій дзвоні, більшість людей знаходилися десь між двома крайнощами. Крім небагатьох у крайній крайності "не міг вести собаку", майже всіх можна було навчити мистецтву лідерства. Кількість зусиль, необхідних для того, щоб перетворити когось на лідера, залежало від того, де вони сиділи на континуумі.

Я підозрюю, що програмування має подібний континуум та подібне розповсюдження. Будуть ті, хто просто отримує це без особливих зусиль, і такі, які ніколи не зможуть отримати його, якби від цього залежало їхнє життя. Але вони небагатьох у хвості кривої дзвону. Більшість людей сидять між цими крайнощами на континуумі. Вони можуть навчитися програмувати, але зусилля, необхідні для їх навчання, залежатимуть від того, де на континуумі вони сидять.


Я бачу багатьох людей, які неправильно ведуть собаку на повідку. Раніше я міг гуляти своїх собак без повідка, навіть у місті. Мені завжди було цікаво, чому люди не змушують собаку думати.

2

Я не впевнений, що це просто програмування. Я бачив такий самий феномен, що люди просто навчаються користуватися комп’ютерами. Ще в коледжі я був лаборантом в лабораторії, яка проводила комп’ютерну грамотність для учнів старшого віку.

Протягом двох тижнів я міг визначити тих, хто отримав би це, і тих, хто не став би в основному 100% точністю. Ви або прийняли, що це так, як працює комп'ютер, або ви б'єтесь головою об нього для всього класу. Середини не було. (Той факт, що це був клас для старших людей, означав, що у нас багато головоломок, що зробило цей малюнок набагато більш очевидним.)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.