"Non tutti possono essere programmatori" è stato studiato?


182

Un vecchio adagio a cui molti programmatori si attengono è "Ci vuole un certo tipo di mente per imparare a programmare e non tutti possono farlo."

Ora sono sicuro che tutti noi abbiamo le nostre prove aneddotiche, ma questo è stato studiato scientificamente?


63
Sembra una buona domanda per gli scettici.
Chad Harrison,

10
Imparare a programmare è molto diverso dall'essere effettivamente in grado di essere un programmatore prezioso . La programmazione è molto semplice per la maggior parte. Leggi le specifiche, implementa di conseguenza. Test. Ripetere. Sì, tutti possono essere programmatori. Non tutti possono essere un programmatore prezioso . Soprattutto alcuni compiti richiedono molto più pensiero e sperimentazione di altri. È meglio lasciare queste cose alle persone che si divertono davvero a farlo. Un esempio potrebbe essere l'implementazione di costrutti di basso livello, il conteggio di cicli di clock, bit e byte senza strumenti di programmazione moderni o altro. Non tutti possono gestirlo.
zxcdw,

9
@zxcdw - Non sto davvero chiedendo "Non tutti possono essere un bravo / prezioso programmatore". Questo è un dato dato che "Non tutti possono essere una X buona / preziosa" è una verità universale per quasi ogni valore di X come vocazione. Ciò di cui mi sto interrogando è la capacità di apprendere la programmazione e avvolgerla intorno alla persona comune.
Sistema

37
L'adagio è dimostrato vero ogni giorno su Programmers <sigh>
yannis

15
Penso che lo spirito di questa domanda non riguardi la qualità dei programmatori, penso che riguardi più "tutti possono essere addestrati a risolvere un problema e delineare una soluzione logicamente corretta in un linguaggio non umano", che a volte penso non sia qualcosa che tutti possono fare. I concetti di progettazione della logica per dettare i comportamenti non basati su sostanze di una macchina non umana sono estremamente astratti, questo livello di astrazione richiede che uno sia in grado di seguire mentalmente molte indirette logiche perché non è possibile toccare i prodotti di ciascuno passo con le mani.
Jimmy Hoffa,

Risposte:


87

Un altro studio, Indagare sulla fattibilità dei modelli mentali tenuti dai programmatori alle prime armi :

Questo documento descrive un'indagine sulla fattibilità dei modelli mentali utilizzati dai programmatori alle prime armi alla fine di un corso di programmazione Java del primo anno. I risultati qualitativi identificano la gamma di modelli mentali di valore e assegnazione di riferimento detenuti dai partecipanti. L'analisi quantitativa rivela che circa un terzo degli studenti possedeva modelli mentali non vitali di assegnazione di valore e solo il 17% degli studenti possedeva un modello mentale sostenibile di assegnazione di riferimento. Inoltre, in termini di confronto tra i modelli mentali dei partecipanti e le loro prestazioni nelle valutazioni in corso e nell'esame finale, è stato riscontrato che gli studenti con modelli mentali praticabili hanno ottenuto risultati significativamente migliori rispetto a quelli con modelli non vitali. Questi risultati sono usati per proporre un "costruttivista" più

Inoltre, vedi le ricerche successive degli stessi autori dello studio Sheep vs Goats (che non è mai stato effettivamente pubblicato, per essere chiari). Il loro ultimo e più recente studio su questo argomento del 2009 è la meta-analisi dell'effetto della coerenza sul successo nell'apprendimento precoce della programmazione (pdf).

È stato progettato un test che apparentemente ha esaminato le conoscenze di uno studente sull'assegnazione e la sequenza prima di un primo corso di programmazione, ma in realtà è stato progettato per catturare le loro strategie di ragionamento. Un esperimento ha trovato due distinte popolazioni di studenti: uno potrebbe costruire e applicare coerentemente un modello mentale di esecuzione del programma; l'altro sembrava incapace di costruire un modello o di applicarne uno in modo coerente. Il primo gruppo ha ottenuto risultati molto migliori nell'esame di fine corso rispetto al secondo in termini di successo o fallimento. Il test non prevede in modo molto accurato i livelli di prestazione, ma combinando il risultato di sei repliche dell'esperimento, cinque nel Regno Unito e uno in Australia, dimostriamo che la coerenza ha un forte effetto sul successo nell'apprendimento precoce da programmare, ma esperienza di programmazione di base, d'altra parte,


24
"... corso di programmazione Java del primo anno ..." <- Ho riscontrato il tuo problema.
Jon Galloway,

4
Bornat, oltre a ritrarre il documento originale, discute dei tentativi di riprodurre il risultato del 2009, per me non sembrano incoraggianti: eis.mdx.ac.uk/staffpages/r_bornat/papers/…
Blaisorblade

6
Come accennato in precedenza, il documento originale su questo è stato ritirato: retractionwatch.com/2014/07/18/…
Spongeboy,

92

Sì, c'è un articolo online abbastanza famoso progettato per determinare più o meno "Chi è stato progettato per essere un programmatore".

Uno studio cognitivo dell'apprendimento precoce della programmazione - Prof. Richard Bornat, Dr. Ray Adams

Tutti gli insegnanti di programmazione scoprono che i loro risultati mostrano una "doppia gobba". È come se ci fossero due popolazioni: quelle che possono [programmare] e quelle che non possono [programmare], ognuna con la propria curva a campana indipendente.

Quasi tutte le ricerche sulla programmazione dell'insegnamento e dell'apprendimento si sono concentrate sull'insegnamento: cambiare la lingua, cambiare l'area di applicazione, utilizzare un IDE e lavorare sulla motivazione. Nessuno di questi funziona e la doppia gobba persiste.

Abbiamo un test che individua la popolazione che può programmare, prima dell'inizio del corso. Possiamo separare la doppia gobba. Probabilmente non ci crederai, ma dopo aver sentito il discorso lo farai. Non sappiamo esattamente come / perché funzioni, ma abbiamo alcune buone teorie.


Ecco un post sul blog di Jeff Atwood che interpreta i risultati e mette alcune cose nel contesto.

Nonostante gli enormi cambiamenti che sono avvenuti dall'invenzione dell'informatica elettronica negli anni '50, alcune cose rimangono ostinatamente le stesse. In particolare, la maggior parte delle persone non può imparare a programmare: tra il 30% e il 60% di ogni assunzione di un dipartimento di informatica dell'università fallisce il primo corso di programmazione.

Gli insegnanti esperti sono stanchi ma non dimenticano mai questo fatto; i principianti brillanti che credono che i vecchi debbano aver sbagliato, imparano la verità dall'amara esperienza; e così è stato per quasi due generazioni, da quando l'argomento è iniziato negli anni '60.


46
Per essere onesti, questo studio dimostra che il 30-60% di un'assunzione scolastica non può essere disturbato facendo alcun lavoro. Questo è stato vero per tutte le materie e per tutti i tempi!
Martin Beckett,

15
Questo è un documento molto interessante e supporta l'idea che non tutti sono tagliati al programma. Purtroppo il lavoro successivo degli autori (anche sulla pagina collegata) mostra che il loro test è meno predittivo di quanto inizialmente pensato. "Non possiamo pretendere di separare le capre di programmazione dalle pecore non programmatrici ... È un peccato che il risultato non sia all'altezza della promessa iniziale, ma non ha del tutto chiuso le porte alle nostre esplorazioni."
AShelly,

26
Per essere chiari, il primo documento del 2006 era solo una bozza e non fu mai pubblicato. Quindi non è esattamente revisionato scientificamente. Forse meglio guardare gli studi successivi sulla pagina dell'autore .
Jeff Atwood,

17
Indagare sul successo in un corso accademico è un modo strano di studiare il fenomeno. In primo luogo, le lezioni sono probabilmente il modo meno adatto per insegnare la programmazione. Secondo, non tutti imparano (bene) dalle lezioni. Questo è un errore eccessivo per il design per me lì.
Raffaello,

5
Il Prof. Bornat in seguito si è preso la briga di ritirare volontariamente quella bozza, perché all'epoca aveva problemi di salute mentale. eis.mdx.ac.uk/staffpages/r_bornat/papers/… Inoltre, la mia lettura del sec. 3 è che altri non sono riusciti a replicare il risultato - come si suol dire, anche la conclusione della metaanalisi del 2009 "è influenzata almeno dall'ambiente culturale e dalle pratiche educative ". Nel complesso, la mia ipotesi migliore è che il corso sia stato negativo, il che non sorprende poiché "come insegnare a programmare in modo efficace" è un problema di ricerca.
Blaisorblade,

33

Chiunque può essere un programmatore. Considera quanto facilmente le persone afferrano i fogli di calcolo. Considera quanto facilmente Alan Kay introduce i bambini alla programmazione mediante esperimenti ed esplorazioni in un ambiente programmabile.

Le persone possono studiare il successo in corsi a livello universitario e concludere "alcune persone non sono adatte per imparare la programmazione". Tuttavia, tale conclusione oltrepassa notevolmente i limiti delle prove osservate. Quanti errori potrebbero invece essere attribuiti a come viene insegnata la programmazione (troppo astratta?), O quale stile di programmazione viene insegnata (troppo imperativo?) O all'ambiente di programmazione (compilazione, nessun feedback immediato?).

Resta inteso che le persone afferrano le astrazioni più prontamente dopo aver già lavorato con più istanze concrete - vale a dire che non possiamo imparare qualcosa fino a quando non lo sappiamo quasi già. Iniziare con l'abstract, quindi, è un modo completamente insensato per insegnare la programmazione. Molte persone che inciampano in "modelli mentali" premiscelati prospererebbero se insegnate in un ambiente più concreto con feedback in tempo reale (ad esempio come nella Kahn Academy per CS ), quindi incoraggiate a salire sulla scala dell'astrazione quando sono pronte per questo. La programmazione apprendibile è un recente saggio di Bret Victor che attira l'attenzione su inutili sfide ambientali che i programmatori devono affrontare nell'apprendimento.

In alcuni casi, sono gli studenti che falliscono le loro lezioni. La pigrizia intellettuale e l'ignoranza intenzionale esisteranno in qualsiasi grande gruppo di umani. Le persone intelligenti non fanno eccezione, come può testimoniare chiunque abbia litigato con una brillante manovella. Ma, soprattutto per la programmazione e la matematica, sono spesso le classi a non riuscire agli studenti.


7
Penso che quasi tutti possano imparare la codifica rudimentale proprio come possono imparare la musica di base. Tuttavia, guadagnarsi da vivere è una questione diversa. Ad esempio, adoro suonare la chitarra, ma non parteciperò a un tour dello stadio in più città o comparirò presto in un grande album in studio.
jfrankcarr,

4
Dai un'occhiata al documento collegato nella risposta di Serg. Anche se non è così chiaro come avevano inizialmente pensato, la verità è che alcune persone non riescono a avvolgere la testa attorno ai concetti di programmazione più elementari, anche dopo un mese o due di lezioni - per esempio: x = 1; y = x;e la domanda è " Quali sono i valori di xe y? "
Izkata,

3
Ciao e Benvenuto! Probabilmente non lo sai, dato che sei molto nuovo, ma in realtà non ci piacciono le domande aperte e / o di discussione. Ho rimosso la Is it true that not everyone can learn how to program?linea dalla domanda, i nostri membri più esperti l'hanno ignorata, rendendosi conto che non si adattava alle nostre linee guida e concentrato le loro risposte sugli aspetti scientifici / di ricerca della domanda. Potresti fare lo stesso per favore?
yannis,

3
@jfrankcarr - Qualsiasi abilità, a livello professionale o competitivo, lascerà indietro molti praticanti. La maggior parte delle persone non è in grado di parlare o scrivere in modo professionale nemmeno il linguaggio naturale.
dmbarbour,

3
@Izkata - Il documento che Serg ha collegato ha un controverso valore scientifico; risultati simili sarebbero stati raggiunti da qualsiasi lezione mal insegnata: le persone che avevano già capito l'argomento hanno fatto bene. E riguardo alla tua domanda di esempio: più comuni erano le domande che presupponevano una semantica imperativa, che non sono certamente intuitive. Potresti anche rispondere alla tua domanda se non potessi assumere l'assenza di concorrenza?
dmbarbour,

19

Forse questo è aneddotico, ma quando ho insegnato la programmazione introduttiva a poche centinaia di studenti di arti liberali, non ho trovato una simile "doppia gobba". Mi sembrava che fossero tutti abbastanza capaci, sebbene alcuni lavorassero più duramente di altri, e pochi cercarono di bluffare.

Molto ha a che fare con il modo in cui viene insegnato.

Molto ha anche a che fare con il desiderio - alcuni non trovano la programmazione il meno interessante. Ma anche così, possono impararlo se gli danno uno sforzo onesto.


5
Mi chiedo spesso dove il desiderio gioca in questo, sappiamo tutti quanto sia totalmente poco interessante la programmazione per la stragrande maggioranza della popolazione generale, mi chiedo quante persone provano ad andare per soldi ma avendo le persone medie completa mancanza di interesse nel modo in cui un il computer funziona.
Jimmy Hoffa,

6
@Jimmy: ho cercato di renderlo interessante facendoli andare su progetti personali su giochi, scienza, finanza, musica, qualunque cosa li attirasse. La programmazione è molto più interessante quando è un mezzo per raggiungere un fine.
Mike Dunlavey,

2
@Den: Beh, dovevano fare piccoli programmi per i compiti, avevano dei quiz e dei test, e ognuno di loro doveva fare un significativo progetto di programmazione personale, che ho valutato. Il corso era obbligatorio.
Mike Dunlavey,

1
@MikeDunlavey Gli studenti hanno sempre amici che possono programmare e i compiti possono essere facilmente imbrogliati.
Sulthan,

2
@Sulthan: Non nella mia classe non l'hanno fatto. Alcuni ci hanno provato. Alcuni hanno provato a copiare da altri durante un test. Era ovvio: il codice era troppo simile a quello di qualcun altro e allo stesso tempo conteneva errori evidenti. Per i progetti, nessuno era uguale a nessuno, e nulla alza una bandiera rossa come qualcuno che fa un lavoro mediocre su quiz e compiti a casa, ma si trasforma in un bellissimo progetto. Faccio solo un altro test e lo do a loro. Se chiaramente non sanno da che parte andare, non ho l'obbligo di dare loro un buon voto. In alternativa, posso chiamare un altro professore.
Mike Dunlavey,

7

Quando ho iniziato, era comune sostenere un "test attitudinale" prima di ottenere un lavoro di programmazione. Non c'erano così tanti laureati in informatica, quindi era comune reclutare da altre discipline.

I test erano simili a quelli che vedi nei test QI (qual è il prossimo numero nella sequenza, ecc.).

L'evidenza aneddotica era che, sebbene non tutti quelli che hanno superato il test sono diventati un buon programmatore, nessuno che ha fallito il test ma è stato assunto per altri motivi è mai diventato un buon programmatore.

Purtroppo i droni delle risorse umane non hanno capito questi test (e hanno fallito quando li hanno presi!), Quindi il reclutamento in questi giorni dipende da ciò che i droni delle risorse umane comprendono: buon college, comunicazione e capacità di indossare abiti.

Questo è praticamente il motivo per cui i grandi dipartimenti IT hanno un sacco di persone che sono brave negli spettacoli di PowerPoint e pochissimi programmatori bravi.


1
+ Sono così grato che non ho mai (quasi) dovuto affrontare le risorse umane.
Mike Dunlavey,

4

Per coloro che citano lo studio della doppia gobba o delle capre contro le pecore di Dehnadi e Bornat, vale la pena dare un'occhiata a Modelli mentali e Aptitude di programmazione di Caspersen et al (2007) in cui tentano di replicarlo:

Prevedere il successo degli studenti che partecipano ai corsi di programmazione introduttiva è un'area di ricerca attiva da oltre 25 anni. Fino a poco tempo fa, nessuna variabile o test ha avuto un significativo potere predittivo. Tuttavia, Dehnadi e Bornat affermano di aver trovato un semplice test per programmare l'attitudine a separare in modo chiaro le pecore da programmazione da capre non programmatrici. Presentiamo brevemente la loro teoria e il loro strumento di prova.

Abbiamo ripetuto il test nel nostro contesto locale per verificare e forse generalizzare i risultati, ma non abbiamo potuto dimostrare che il test prevede il successo degli studenti nel nostro corso introduttivo di programmazione.

Sulla base di questo fallimento dello strumento di prova, discutiamo di varie spiegazioni per i nostri diversi risultati e suggeriamo un metodo di ricerca dal quale potrebbe essere possibile generalizzare i risultati locali in questo settore. Inoltre, discutiamo e critichiamo il test attitudinale di programmazione di Dehnadi e Bornat e concepiamo strumenti di test alternativi.


4

Si possono fare studi sulle capacità di astrazione o altre conoscenze utili, ma la definizione di programmazione non è chiara e penso che la citazione sia irrilevante, perché ci sono modi opposti per guardare alla programmazione:

Il primo tipo: i linguaggi di programmazione sono (o dovrebbero essere) una sorta di linguaggio umano fatto per descrivere un'attività che il computer deve eseguire, quindi chiunque parli dovrebbe essere in grado di programmare. Si chiama scripting, BASIC, il sistema di composizione TeX , ecc ... Il linguaggio o il sistema non importa, è il modo in cui i loro creatori e persone lo guardavano: "Caro programma / computer, per favore stampa il mio nome" , piuttosto che "Fammi spazio della dimensione di undici caratteri, quindi dammi l'indirizzo di questo spazio, quindi lascia che lo memorizzi, quindi inserisci undici caratteri in questa memoria che puoi estrarre dal mio buffer della tastiera (ma non dimenticare di pulirlo , eccetera."

In questo caso è chiaro che lo studio preferirebbe essere "Non tutte le lingue possono essere assimilate rapidamente?".

D'altro canto, i linguaggi di programmazione sono solo un modo per descrivere come funziona un computer o come dovrebbe funzionare, come dovrebbe essere "connesso" se si pensa ai computer degli anni '50. Pertanto il programmatore non può fare nulla, anche se "parla" perfettamente il linguaggio di programmazione, se la sua intelligenza non riesce a raggiungere questo livello di astrazione in cui vedi i byte che vengono memorizzati, stringhe come puntatori, ecc., E poi tornare sulla terra per collegarlo al problema. Pertanto non tutti gli umani possono programmare (in linguaggio assembly ...).

A parte questo, avrai bisogno di tutte le qualità necessarie per lavorare e produrre qualcosa: conosci molto bene quello che vuoi, rendi facile per gli altri capire / completare / rivedere, concentrarti sui tuoi obiettivi, ecc ... Ma proprio come un architetto, uno scrittore, un musicista, una prostituta ... protesista, ecc.

Ma la maggior parte degli umani ha buone capacità di astrazione, specialmente i bambini. Alcune scuole tedesche insegnano Haskell ai pre-adolescenti (linguaggi di programmazione come Pascal o Delphi vengono insegnati in ogni scuola tedesca).

Quindi direi che alla domanda è molto difficile rispondere e che qualsiasi risposta (o studio) è probabilmente irrilevante.

Troverai una breve analisi di come le persone imparano la programmazione nell'articolo Teach Yourself Programming in Ten Years di Peter Norvig. Sembra pensare che non esista un programmatore nato.


3
Ciao e Benvenuto! Sono un po 'confuso su come la tua risposta risponda alla domanda, che riguarda davvero se questo è stato studiato o no ...
yannis,

scusate ho sbagliato con il pulsante "invia" ... Spero che abbia più senso
Yves

Sei sulla strada giusta ma leghi strettamente i linguaggi di programmazione con l'hardware (computer). La programmazione non è esclusivamente la capacità di parlare al computer. La programmazione riguarda la descrizione di un processo in modo coerente. Descrivere un processo ad un altro essere umano è simile a codificarlo in un linguaggio di programmazione di alto livello. La differenza più grande è che gli umani sono più tolleranti verso l'ambiguità.
Imperatore Orionii,

Non difendo questo punto di vista, ma ho cercato di sottolineare il fatto che le persone tendono a vedere i linguaggi di programmazione e l'uso che dovrebbe essere fatto di essi come descrizioni dei compiti (che è importante per la programmazione e lo scripting di alto livello), oppure come descrizioni di "processi informatici" (ad es. linguaggi di basso livello sembrano più vicini al linguaggio di modellazione VHDL che a VB.NET, anche se sono linguaggi di programmazione). Questi 2 approcci sono molto diversi e tuttavia 2 facce della stessa medaglia. Insistono su diversi aspetti dell'intelligenza umana, che sono difficili da quantificare. Quindi è difficile studiarli.
Yves,

3

Molti anni fa ho seguito diversi corsi che includevano la teoria della leadership militare. Parte della teoria era che esiste un continuum di leadership, da quelli che sono leader naturali a quelli che non potevano condurre un cane al guinzaglio. L'idea era che le persone fossero distribuite su questo continuum di leadership in una curva a campana, con la maggior parte delle persone che si trovava da qualche parte tra i due estremi. A parte i pochi all'estremo estremo "non poteva condurre un cane", quasi tutti potevano insegnare l'arte della leadership. La quantità di sforzo richiesta per trasformare qualcuno in un leader dipendeva da dove sedessero sul continuum.

Sospetto che la programmazione abbia un continuum simile e una distribuzione simile. Ci saranno quelli che lo ottengono senza sforzo e quelli che non potrebbero mai ottenerlo se le loro vite dipendessero da esso. Ma sono i pochi alla coda della curva a campana. La maggior parte delle persone si siede tra quegli estremi nel continuum. Possono imparare a programmare ma lo sforzo richiesto per insegnare dipenderà da dove siedono i continuum.


Vedo molte persone che non conducono correttamente un cane al guinzaglio. Ero in grado di portare a spasso i miei cani senza guinzaglio, anche in città. Mi sono sempre chiesto perché le persone non pensassero al cane.

2

Non sono sicuro che sia solo programmazione. Ho visto lo stesso tipo di fenomeno con le persone che hanno semplicemente imparato a usare i computer. Al college ero un assistente di laboratorio in un laboratorio che ospitava un alfabetizzazione informatica per la classe degli anziani.

Entro due settimane sono riuscito a identificare chi l'avrebbe ottenuto e chi non l'avrebbe fatto con una precisione praticamente del 100%. O hai accettato che questo è il modo in cui funziona il computer o hai battuto la testa contro di esso per l'intera classe. Non c'era via di mezzo. (Il fatto che fosse una classe per anziani significava che avevamo molti battitori di testa che rendevano il modello molto più evidente.)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.