Czy badano „Nie każdy może być programistą”?

182

Stare przysłowie, do którego przywiązuje się wielu programistów, brzmi: „Nauczenie się programowania wymaga pewnego rodzaju umysłu i nie każdy może to zrobić”.

Teraz jestem pewien, że wszyscy mamy własne źródło niepotwierdzonych dowodów, ale czy zostało to zbadane naukowo?

System wyłączony
źródło
63
Brzmi jak dobre pytanie sceptyczne.
Chad Harrison,
10
Nauka programowania różni się bardzo od bycia cennym programistą. Programowanie jest w większości bardzo proste. Przeczytaj specyfikację, zaimplementuj odpowiednio. Test. Powtarzać. Tak, każdy może być programistą. Nie każdy może być cennym programistą. Szczególnie niektóre zadania wymagają znacznie więcej myślenia i eksperymentowania niż inne. Takie rzeczy najlepiej pozostawić ludziom, którzy lubią to robić. Przykładem może być implementacja konstrukcji niskiego poziomu, zliczanie cykli zegarowych, bitów i bajtów bez żadnych nowoczesnych narzędzi programistycznych lub czegokolwiek. Nie każdy może sobie z tym poradzić.
zxcdw,
9
@zxcdw - Naprawdę nie pytam: „Nie każdy może być dobrym / wartościowym programistą”. To jest pewne, ponieważ „Nie każdy może być dobrym / wartościowym X” jest uniwersalną prawdą dla prawie każdej wartości X jako powołania. Pytam o to, czy potrafię nauczyć się programowania i owijać wokół niego głowę dla zwykłej osoby.
System Down
37
To stwierdzenie jest prawdziwe każdego dnia w Programmers <westchnienie>
yannis
15
Myślę, że duch tego pytania nie dotyczy jakości programistów, myślę, że bardziej chodzi o „każdy może zostać przeszkolony w zakresie rozwiązywania problemu i nakreślenia logicznie poprawnego rozwiązania w języku innym niż ludzki”, co czasem wydaje mi się, że nie jest coś, co każdy może zrobić. Koncepcje projektowania logiki w celu dyktowania zachowań maszyny niebędącej istotą ludzką są niezwykle abstrakcyjne, ten poziom abstrakcji wymaga umiejętności mentalnego podążania za wieloma logicznymi kierunkami, ponieważ nie można dotknąć produktów każdego z nich krocz rękami.
Jimmy Hoffa,

Odpowiedzi:

87

Inne badanie, Badanie rentowności modeli mentalnych prowadzonych przez początkujących programistów :

W tym artykule opisano badanie rentowności modeli mentalnych używanych przez początkujących programistów pod koniec pierwszego roku kursu programowania Java. Wyniki jakościowe identyfikują zakres mentalnych modeli wartości i przypisania referencyjnego posiadanych przez uczestników. Analiza ilościowa ujawnia, że ​​około jedna trzecia uczniów posiadała niezdolne do życia mentalne modele przypisywania wartości, a tylko 17% uczniów miało wykonalny mentalny model przypisywania wartości referencyjnych. Ponadto, jeśli chodzi o porównanie modeli mentalnych uczestników i ich wyników w ocenach w trakcie kursu i egzaminie końcowym, stwierdzono, że uczniowie z wykonalnymi modelami umysłowymi osiągali wyniki znacznie lepsze niż ci z modelami niezdolnymi do życia. Odkrycia te służą zaproponowaniu bardziej „konstruktywistycznego”

Zobacz też późniejsze badania tych samych autorów badania owiec przeciwko kozom (które nigdy nie zostały opublikowane, żeby być jasnym). Ich ostatnie i najnowsze badanie na ten temat z 2009 r. To metaanaliza wpływu konsekwencji na sukces we wczesnej nauce programowania (pdf).

Zaprojektowano test, który najwyraźniej sprawdził wiedzę studenta na temat zadań i sekwencji przed pierwszym kursem programowania, ale w rzeczywistości został zaprojektowany w celu uchwycenia ich strategii rozumowania. Eksperyment wykazał dwie wyraźne populacje studentów: można zbudować i konsekwentnie stosować mentalny model wykonywania programu; drugi wydawał się nie być w stanie zbudować modelu lub zastosować go konsekwentnie. Pierwsza grupa wypadła znacznie lepiej pod koniec egzaminu niż druga pod względem sukcesu lub porażki. Test nie bardzo dokładnie przewiduje poziomy wydajności, ale łącząc wynik sześciu powtórzeń eksperymentu, pięciu w Wielkiej Brytanii i jednej w Australii, pokazujemy, że spójność ma silny wpływ na sukces we wczesnej nauce programowania - ale z drugiej strony doświadczenie w programowaniu w tle,

Jeff Atwood
źródło
24
„... kurs programowania Java w pierwszym roku ...” <- Znalazłem problem.
Jon Galloway,
4
Bornat, poza wycofaniem oryginalnej pracy, omawia próby odtworzenia wyniku z 2009 roku - dla mnie nie wydają się zachęcające: eis.mdx.ac.uk/staffpages/r_bornat/papers/…
Blaisorblade
6
Jak wspomniano powyżej, oryginalny artykuł na ten temat został wycofany: retractionwatch.com/2014/07/18/…
Spongeboy
92

Tak, istnieje dość znany artykuł online, który ma mniej więcej na celu ustalenie, „kim jest programista”.

Studium poznawcze wczesnej nauki programowania - prof. Richard Bornat, dr Ray Adams

Wszyscy nauczyciele programowania stwierdzają, że ich wyniki pokazują „podwójny garb”. To tak, jakby były dwie populacje: ci, którzy mogą [programować] i ci, którzy nie mogą [programować], każda z własną niezależną krzywą dzwonową.

Prawie wszystkie badania nad programowaniem nauczania i uczenia się koncentrowały się na nauczaniu: zmień język, zmień obszar zastosowania, użyj IDE i pracuj nad motywacją. Nic z tego nie działa, a podwójny garb nie ustępuje.

Mamy test, który wybiera populację, która może programować, przed rozpoczęciem kursu. Możemy rozdzielić podwójny garb. Prawdopodobnie w to nie wierzysz, ale zrobisz to po usłyszeniu rozmowy. Nie wiemy dokładnie, jak / dlaczego to działa, ale mamy kilka dobrych teorii.


Oto post na blogu autorstwa Jeffa Atwooda, który interpretuje wyniki i umieszcza pewne rzeczy w kontekście.

Pomimo ogromnych zmian, jakie nastąpiły od czasu wynalezienia komputerów elektronicznych w latach 50. XX wieku, niektóre rzeczy pozostają niezmiennie takie same. W szczególności większość ludzi nie może nauczyć się programować: od 30% do 60% spożycia każdego uniwersyteckiego działu informatyki kończy pierwszy kurs programowania.

Doświadczeni nauczyciele są zmęczeni, ale nigdy nie są nieświadomi tego faktu; początkujący, jasnowidzący, którzy uważają, że starzy musieli to robić źle, uczą się prawdy z gorzkiego doświadczenia; i tak było od prawie dwóch pokoleń, odkąd temat zaczął się w latach sześćdziesiątych.

sergserg
źródło
46
Szczerze mówiąc - badanie to dowodzi, że 30–60% spożycia w szkołach nie przeszkadza w wykonywaniu żadnej pracy. Tak było we wszystkich przedmiotach i przez cały czas!
Martin Beckett,
15
To bardzo interesujący artykuł, który potwierdza ideę, że nie wszyscy są przygotowani do programowania. Niestety późniejsza praca autorów (także na stronie z linkami) pokazuje, że ich test jest mniej przewidywalny niż początkowo sądzono. „Nie możemy twierdzić, że oddzielamy kozy programujące od owiec nieprogramujących ... Szkoda, że ​​wynik nie spełnia początkowej obietnicy, ale nie całkiem zamknął drzwi do naszych badań”.
AShelly
26
Dla jasności pierwszy artykuł z 2006 roku był tylko szkicem i nigdy nie został opublikowany. Nie jest to dokładnie sprawdzone naukowo. Może lepiej spojrzeć na późniejsze opracowania na stronie autora .
Jeff Atwood
17
Badanie sukcesu na kursie akademickim jest dziwnym sposobem na zbadanie tego zjawiska. Po pierwsze, wykłady są prawdopodobnie najmniej odpowiednim sposobem nauczania programowania. Po drugie, nie wszyscy uczą się (dobrze) z wykładów. To dla mnie za dużo stronniczości.
Raphael
5
Prof. Bornat później zadał sobie trud dobrowolnego wycofania tego projektu, ponieważ w tym czasie miał problemy ze zdrowiem psychicznym. eis.mdx.ac.uk/staffpages/r_bornat/papers/… Co więcej, moje czytanie Sec. 3 polega na tym, że innym nie udało się powtórzyć wyniku - jak mówią, nawet na wniosek metaanalizy z 2009 r. „Wpływa przynajmniej środowisko kulturowe i praktyki edukacyjne ”. Ogólnie sądzę, że kurs był zły, co nie jest zaskakujące, ponieważ „jak skutecznie uczyć programowania” jest problemem badawczym.
Blaisorblade
33

Każdy może być programistą. Zastanów się, jak łatwo ludzie chwytają arkusze kalkulacyjne. Zastanów się, jak łatwo Alan Kay wprowadza dzieci w programowanie poprzez eksperymenty i eksplorację w programowalnym środowisku.

Ludzie mogą studiować sukcesy na kursach na poziomie uczelni i stwierdzać, że „niektórzy nie nadają się do nauki programowania”. Jednak taki wniosek poważnie przekracza granice obserwowanych dowodów. Ile niepowodzeń można przypisać temu, jak naucza się programowania (zbyt abstrakcyjne?) Lub jaki styl programowania jest nauczany (zbyt imperatywny?) Lub środowisku programowania (kompilacja, brak natychmiastowej informacji zwrotnej?).

Jest zrozumiałe, że ludzie najłatwiej chwytają abstrakcje po tym, jak już pracowali z wieloma konkretnymi instancjami - tzn. Że nie możemy się czegoś nauczyć, dopóki prawie go nie znamy. Zatem rozpoczynanie od streszczenia jest całkowicie głupim sposobem nauczania programowania. Wielu ludzi, którzy potykają się z założonymi „modelami mentalnymi”, prosperuje, jeśli będzie nauczany w bardziej konkretnym środowisku z informacją zwrotną w czasie rzeczywistym (np. Jak w Akademii Kahna dla CS ), a następnie zachęca do wspinania się po drabinie abstrakcji, gdy będzie na to gotowy. Learnable Programming to najnowszy esej Bret Victor, który zwraca uwagę na niepotrzebne wyzwania środowiskowe, przed którymi stają programiści podczas nauki.

W niektórych przypadkach to uczniowie nie zaliczają zajęć. Intelektualne lenistwo i umyślna ignorancja będą istnieć w każdej dużej grupie ludzi. Sprytni ludzie nie są wyjątkiem, co może poświadczyć każdy, kto kłócił się z genialną korbą. Ale szczególnie w programowaniu i matematyce uczniowie często zawodzą zajęcia.

dmbarbour
źródło
7
Myślę, że prawie każdy może nauczyć się podstawowego kodowania, tak jak może nauczyć się podstawowej muzyki. Jednak zarabianie na tym to inna sprawa. Na przykład uwielbiam grać na gitarze, ale nie zamierzam w najbliższym czasie iść na tournee po wielu miastach i nie pojawiać się na dużym albumie studyjnym.
jfrankcarr
4
Spójrz na artykuł połączony w odpowiedzi Serga. Nawet jeśli nie jest to tak jasne, jak początkowo sądzili, prawda jest taka, że niektórzy ludzie po prostu nie mogą oprzeć głowy na najbardziej podstawowych pojęciach programistycznych, nawet po miesiącu lub dwóch zajęciach - na przykład: x = 1; y = x;pytanie brzmi „ Jakie są wartości xi y? ”
Izkata,
3
Cześć i witaj! Prawdopodobnie tego nie wiesz, ponieważ jesteś bardzo nowy, ale tak naprawdę nie lubimy pytań otwartych i / lub dyskusyjnych. Usunąłem tę Is it true that not everyone can learn how to program?linijkę z pytania, nasi bardziej doświadczeni członkowie zignorowali ją, zdając sobie sprawę, że nie pasuje ona do naszych wytycznych i skoncentrowałem swoje odpowiedzi na naukowych / naukowych aspektach pytania. Czy możesz zrobić to samo?
yannis
3
@jfrankcarr - Każda umiejętność na poziomie zawodowym lub konkurencyjnym pozostawi wielu praktyków w tyle. Większość ludzi nie umie profesjonalnie mówić ani pisać w języku naturalnym.
dmbarbour
3
@Izkata - Artykuł połączony z Sergiem ma wątpliwą wartość naukową; podobne wyniki uzyskano by w przypadku każdej słabo nauczanej klasy: ludzie, którzy już rozumieli ten temat, radzili sobie dobrze. A jeśli chodzi o twoje przykładowe pytanie: częstsze były pytania, które zakładały imperatywną semantykę, które z pewnością nie są intuicyjne. Czy mógłbyś nawet odpowiedzieć na własne pytanie, jeśli nie mógłbyś założyć braku współbieżności?
dmbarbour
19

Może to anegdota, ale kiedy uczyłem programowania wstępnego kilkuset studentom sztuk wyzwolonych, nie znalazłem takiego „podwójnego garbu”. Wydawało mi się, że wszyscy byli całkiem zdolni, chociaż niektórzy pracowali ciężej niż inni, a bardzo nieliczni próbowali się przedostać.

Wiele ma związek z tym, jak się go uczy.

Wiele ma również związek z pożądaniem - niektórzy uważają programowanie za najmniej interesujące. Ale mimo to mogą się tego nauczyć, jeśli podejmą uczciwy wysiłek.

Mike Dunlavey
źródło
5
Często zastanawiam się, gdzie ma to wpływ na pragnienie, wszyscy wiemy, jak całkowicie nieciekawe jest programowanie dla ogromnej większości populacji, sprawia, że ​​zastanawiam się, ilu ludzi próbuje iść za pieniądze, ale przeciętny człowiek jest całkowicie pozbawiony zainteresowania sposobem, w jaki prace komputerowe.
Jimmy Hoffa,
6
@Jimmy: Starałem się, aby było to interesujące, angażując ich w osobiste projekty dotyczące gier, nauki, finansów, muzyki i wszystkiego, co im się podobało. Programowanie jest o wiele bardziej interesujące, gdy jest środkiem do celu.
Mike Dunlavey,
2
@Den: Cóż, musieli robić małe programy do odrabiania lekcji, mieli quizy i testy, a każdy z nich musiał wykonać znaczący osobisty projekt programistyczny, który oceniłem. Kurs był wymagany.
Mike Dunlavey,
1
@MikeDunlavey Studenci zawsze mają przyjaciół, którzy mogą programować, a zadania domowe można łatwo oszukać.
Sulthan
2
@Sulthan: Nie w mojej klasie tego nie zrobili. Niektórzy próbowali. Niektórzy próbowali skopiować od innych podczas testu. To było oczywiste - kod był zbyt podobny do kodu innej osoby, a jednocześnie zawierał oczywiste błędy. W przypadku projektów nie było dwóch takich samych i nic nie podnosi czerwonej flagi, jak ktoś, kto wykonuje przeciętną pracę nad quizami i zadaniami domowymi, ale zamienia się w piękny projekt. Właśnie przygotowuję kolejny test i daję im to. Jeśli wyraźnie nie wiedzą, co jest na górze, nie mam obowiązku wystawiać im dobrej oceny. Alternatywnie mogę wezwać innego profesora.
Mike Dunlavey
7

Kiedy zaczynałem, często zdawałem sobie sprawę z „testu umiejętności”, zanim dostałeś pracę programistyczną. Absolwentów informatyki nie było tak wielu, więc rekrutacja z innych dyscyplin była powszechna.

Testy były podobne do tego, co widać na testach IQ (jaki jest następny numer w sekwencji itp.).

Niepotwierdzonymi dowodami było to, że chociaż nie wszyscy, którzy zdali test, zostali dobrymi programistami, nikt, kto nie zaliczył testu, ale został zatrudniony z innych powodów, nigdy nie został dobrym programistą.

Niestety drony HR nie rozumiały tych testów (i nie zdały egzaminu, gdy je zdały!), Więc rekrutacja w tych dniach zależy od tego, co drony HR rozumieją - dobrej szkoły wyższej, komunikacji i umiejętności noszenia skafandra.

To jest właśnie powód, dla którego duże działy IT mają wiele osób, które są świetne w programach PowerPoint i bardzo niewielu dobrych programistów.

James Anderson
źródło
1
+ Jestem tak wdzięczny, że nigdy (prawie) nie musiałem przechodzić przez HR.
Mike Dunlavey,
4

Dla tych, którzy powołują się na podwójne garbowanie Dehnadi i Bornata lub kozę kontra owcę, warto sprawdzić Modele mentalne i programowanie zdolności Caspersena i wsp. (2007), w których próbują go powielić:

Prognozowanie sukcesu uczniów uczestniczących w kursach programowania wstępnego jest aktywnym obszarem badawczym od ponad 25 lat. Do niedawna żadne zmienne ani testy nie miały znaczącej mocy predykcyjnej. Jednak Dehnadi i Bornat twierdzą, że znaleźli prosty test do programowania umiejętności oddzielenia programujących owiec od nieprogramowych kóz. Pokrótce przedstawiamy ich teorię i przyrząd testowy.

Powtórzyliśmy ich test w naszym lokalnym kontekście, aby zweryfikować i być może uogólnić ich ustalenia, ale nie mogliśmy wykazać, że test przewiduje sukces uczniów w naszym wstępnym kursie programistycznym.

W oparciu o tę awarię przyrządu testowego omawiamy różne wyjaśnienia naszych odmiennych wyników i sugerujemy metodę badawczą, dzięki której można uogólnić lokalne wyniki w tym obszarze. Ponadto omawiamy i krytykujemy test umiejętności testowania Dehnadi i Bornata oraz opracowujemy alternatywne instrumenty testowe.

Thomas Park
źródło
4

Można prowadzić badania dotyczące zdolności abstrakcji lub innej przydatnej wiedzy, ale definicja programowania jest niejasna i myślę, że cytat jest nieistotny, ponieważ istnieją inne sposoby patrzenia na programowanie:

Pierwszy rodzaj: Języki programowania są (lub powinny być) jakimś ludzkim językiem stworzonym do opisania zadania do wykonania przez komputer, więc każdy, kto mówi, powinien mieć możliwość programowania. Nazywa się to skryptowaniem, BASIC, systemem składu TeX itp. Język lub system nie ma znaczenia, to sposób, w jaki patrzyli na to ich twórcy i ludzie: „Drogi programie / komputerze, wydrukuj moje imię” , a nie „Zdobądź mi przestrzeń wielkości jedenastu znaków, następnie podaj adres tego miejsca, pozwól mi je zapisać, a następnie wprowadź jedenaście znaków do tej pamięci, którą możesz wyjąć z bufora klawiatury (ale nie zapomnij go wyczyścić itp. ”

W tym przypadku jasne jest, że badanie raczej brzmiałoby: „Nie każdy język można szybko przyswoić?”.

Z drugiej strony, języki programowania są tylko sposobem na opisanie, jak komputer działa lub jak powinien działać, jak powinien być „podłączony”, jeśli myślisz o komputerach z lat 50. Dlatego programista nie może nic zrobić, nawet jeśli doskonale mówi językiem programowania, jeśli jego inteligencja nie może osiągnąć tego poziomu abstrakcji, w którym widzisz bajty przechowywane w pamięci, ciągi znaków jako wskaźniki itp., A następnie wróć na ziemię, aby powiązać to z problemem. Dlatego nie każdy człowiek może programować (w języku asemblera ...).

Oprócz tego będziesz potrzebować wszystkich cech wymaganych do pracy i tworzenia czegoś: dobrze wiesz, czego chcesz, ułatw innym zrozumienie / uzupełnienie / przegląd, skupienie się na twoich celach itp. Ale tak jak architekt, pisarz, muzyk, prostytutka ... protezista itp.

Ale większość ludzi ma dobre zdolności abstrakcji, zwłaszcza dzieci. Niektóre niemieckie szkoły uczą Haskell dla nastolatków (języki programowania, takie jak Pascal lub Delphi, są nauczane w każdej niemieckiej szkole).

Powiedziałbym więc, że na pytanie jest bardzo trudno odpowiedzieć, a każda odpowiedź (lub badanie) może być nieistotna.

Bardzo krótką analizę tego, jak ludzie uczą się programowania w artykule Naucz się programowania w ciągu dziesięciu lat , Peter Norvig. Wydaje mu się, że nie ma urodzonego programisty.

Yves
źródło
3
Cześć i witaj! Jestem trochę zdezorientowany, jak twoja odpowiedź odpowiada na pytanie, a tak naprawdę chodzi o to, czy zostało to przestudiowane, czy nie ...
yannis
przepraszam, pomyliłem się z przyciskiem „wyślij” ... Mam nadzieję, że to ma sens
Yves
Jesteś na dobrej drodze, ale ściśle wiążesz języki programowania ze sprzętem (komputerami). Programowanie to nie tylko umiejętność rozmowy z komputerem. Programowanie polega na spójnym opisywaniu procesu. Opisanie procesu innemu człowiekowi jest podobne do kodowania go w języku programowania wysokiego poziomu. Największą różnicą jest to, że ludzie są bardziej tolerancyjni wobec dwuznaczności.
Cesarz Orionii
Nie bronię tego punktu widzenia, ale staram się zwrócić uwagę na fakt, że ludzie widzą języki programowania i że należy z nich korzystać albo jako opisy zadań (co jest ważne w przypadku programowania na wysokim poziomie i pisania skryptów), albo jako opisy „procesów komputerowych” (np. języki niskiego poziomu wydają się bliższe językowi modelowania VHDL niż VB.NET, nawet jeśli są językami programowania). Te dwa podejścia są bardzo różne, a jednak 2 strony tej samej monety. Nalegają na różne aspekty ludzkiej inteligencji, które są trudne do oszacowania. Trudno je więc przestudiować.
Yves
3

Wiele lat temu odbyłem kilka kursów, które obejmowały teorię przywództwa wojskowego. Częścią teorii było to, że istnieje kontinuum przywództwa, od tych, którzy są naturalnymi liderami, po tych, którzy nie mogli prowadzić psa na smyczy. Chodziło o to, że ludzie byli rozmieszczeni na tym kontinuum przywództwa na krzywej dzwonowej, przy czym większość ludzi znajdowała się gdzieś pomiędzy dwoma skrajnościami. Poza nielicznymi w skrajnie skrajnym końcu „nie mógł prowadzić psa” prawie wszyscy mogli nauczyć się sztuki przywództwa. Ilość wysiłku potrzebnego do przekształcenia kogoś w lidera zależała od tego, gdzie siedzieli na kontinuum.

Podejrzewam, że programowanie ma podobne kontinuum i podobną dystrybucję. Będą tacy, którzy po prostu zdobędą go bez wysiłku, i tacy, którzy nigdy nie mogliby go zdobyć, gdyby od tego zależało ich życie. Ale są nieliczni na końcu krzywej dzwonowej. Większość ludzi siedzi między tymi skrajnościami w kontinuum. Mogą nauczyć się programować, ale wysiłek potrzebny do ich nauczenia będzie zależeć od tego, gdzie w kontinuum będą siedzieć.

Simon Tewsi
źródło
Widzę wielu ludzi, którzy nie prowadzą prawidłowo psa na smyczy. Kiedyś chodziłem z psem bez smyczy, nawet w mieście. Zawsze zastanawiałem się, dlaczego ludzie nie myślą o psie umyśle.
2

Nie jestem pewien, czy to tylko programowanie. Widziałem to samo zjawisko z ludźmi po prostu uczącymi się obsługi komputera. Po powrocie do college'u byłem asystentem w laboratorium, które było gospodarzem umiejętności obsługi komputera w klasie seniorów.

W ciągu dwóch tygodni udało mi się zidentyfikować tych, którzy to dostaną, i tych, którzy nie uzyskaliby dokładności w 100%. Albo albo zaakceptowałeś, że tak działa komputer, albo uderzyłeś się w nią głową przez całą klasę. Nie było środkowej ziemi. (Fakt, że była to klasa dla seniorów, oznaczał, że mieliśmy wielu uderzających w głowę, co sprawiło, że wzór był bardziej oczywisty.)

Loren Pechtel
źródło