È stato studiato "Non tutti possono essere programmatori"?

180

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

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

    
posta System Down 04.09.2012 - 18:25
fonte

9 risposte

87

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

This paper describes an investigation into the viability of mental models used by novice programmers at the end of a first year Java programming course. The qualitative findings identify the range of mental models of value and reference assignment held by the participants. The quantitative analysis reveals that approximately one third of students held non-viable mental models of value assignment and only 17% of students held a viable mental model of reference assignment. Further, in terms of a comparison between the participants' mental models and their performance in in-course assessments and final examination, it was found that students with viable mental models performed significantly better than those with non-viable models. These findings are used to propose a more "constructivist" approach to teaching programming based on the integration of "cognitive conflict" and program visualisation.

Inoltre, vedi ricerca successiva dagli 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 dal 2009 è Meta-analisi dell'effetto di coerenza sul successo nell'apprendimento precoce della programmazione (pdf).

A test was designed that apparently examined a student's knowledge of assignment and sequence before a first course in programming but in fact was designed to capture their reasoning strategies. An experiment found two distinct populations of students: one could build and consistently apply a mental model of program execution; the other appeared either unable to build a model or to apply one consistently. The first group performed very much better in their end-of-course examination than the second in terms of success or failure. The test does not very accurately predict levels of performance, but by combining the result of six replications of the experiment, five in UK and one in Australia, we show that consistency does have a strong effect on success in early learning to program -- but background programming experience, on the other hand, has little or no effect.

    
risposta data 04.09.2012 - 20:40
fonte
92

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

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

All teachers of programming find that their results display a 'double hump'. It is as if there are two populations: those who can [program], and those who cannot [program], each with its own independent bell curve.

Almost all research into programming teaching and learning have concentrated on teaching: change the language, change the application area, use an IDE and work on motivation. None of it works, and the double hump persists.

We have a test which picks out the population that can program, before the course begins. We can pick apart the double hump. You probably don't believe this, but you will after you hear the talk. We don't know exactly how/why it works, but we have some good theories.

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

Despite the enormous changes which have taken place since electronic computing was invented in the 1950s, some things remain stubbornly the same. In particular, most people can't learn to program: between 30% and 60% of every university computer science department's intake fail the first programming course.

Experienced teachers are weary but never oblivious of this fact; brighteyed beginners who believe that the old ones must have been doing it wrong learn the truth from bitter experience; and so it has been for almost two generations, ever since the subject began in the 1960s.

    
risposta data 04.09.2012 - 18:27
fonte
33

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

Le persone possono studiare il successo nei corsi universitari e concludere "alcune persone non sono in grado di apprendere la programmazione". Tuttavia, una tale conclusione oltrepassa gravemente i limiti delle prove osservate. Quanto fallimento potrebbe invece essere attribuito a come viene insegnata la programmazione (troppo astratta?), Oa quale stile di programmazione viene insegnato (troppo imperativo?), O all'ambiente di programmazione (compilazione, nessun feedback immediato?).

È chiaro che le persone afferrano le astrazioni più facilmente dopo aver già lavorato con più istanze concrete, cioè che non possiamo imparare qualcosa finché non lo sappiamo quasi già. A partire dall'astratto, quindi, è un modo assolutamente folle di insegnare la programmazione. Molte persone che inciampano nei "modelli mentali" premisconati prospererebbero se insegnassero in un ambiente più concreto con feedback in tempo reale (ad es. Come nella Kahn Academy per CS ) quindi incoraggiato a salire la scala dell'astrazione quando sono pronti per questo. Programmazione apprendibile è un recente saggio di Bret Victor che attira l'attenzione su inutili sfide ambientali che i programmatori affrontano nell'apprendimento.

In alcuni casi, sono gli studenti a non frequentare le lezioni. La pigrizia intellettuale e l'ignoranza volontaria esisteranno in qualsiasi grande gruppo di umani. La gente intelligente non fa eccezione, come può testimoniare chiunque abbia discusso con una brillante manovella. Ma, soprattutto per la programmazione e la matematica, spesso sono le classi a non riuscire gli studenti.

    
risposta data 04.09.2012 - 21:12
fonte
19

Forse questo è aneddotico, ma quando ho insegnato la programmazione intro a poche centinaia di studenti delle arti liberali, non ho trovato nessuna "doppia gobba". Mi sembrava che fossero tutti abbastanza capaci, anche se alcuni lavoravano più duramente di altri, e pochissimi hanno cercato di bluffare.

Molto ha a che fare con come 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.

    
risposta data 04.09.2012 - 22:59
fonte
7

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

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

L'evidenza aneddotica è stata che mentre 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 è diventato un buon programmatore.

Purtroppo i droni HR non comprendevano questi test (e fallirono quando li presero!), quindi le assunzioni in questi giorni dipendono dalle cose che i droni HR comprendono - buon college, comunicazione e capacità di indossare abiti.

Questo è praticamente il motivo per cui i dipartimenti IT di grandi dimensioni hanno un sacco di persone che sono bravissime ai programmi PowerPoint e pochissimi bravi programmatori.

    
risposta data 05.09.2012 - 07:53
fonte
4

A quelli che citano lo studio della doppia gobba di Dehnadi e Bornat, vale la pena dare un'occhiata a Mental Models and Programming Aptitude di Caspersen et al (2007) in cui tentano di replicarlo:

Predicting the success of students participating in introductory programming courses has been an active research area for more than 25 years. Until recently, no variables or tests have had any significant predictive power. However, Dehnadi and Bornat claim to have found a simple test for programming aptitude to cleanly separate programming sheep from non-programming goats. We briefly present their theory and test instrument.

We have repeated their test in our local context in order to verify and perhaps generalise their findings, but we could not show that the test predicts students' success in our introductory program-ming course.

Based on this failure of the test instrument, we discuss various explanations for our differing results and suggest a research method from which it may be possible to generalise local results in this area. Furthermore, we discuss and criticize Dehnadi and Bornat's programming aptitude test and devise alternative test instruments.

    
risposta data 16.09.2012 - 12:57
fonte
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 di guardare alla programmazione:

Il primo tipo: i linguaggi di programmazione sono (o dovrebbero essere) un qualche tipo di linguaggio umano creato per descrivere un compito che il computer deve eseguire, quindi tutti coloro che parlano dovrebbero essere in grado di programmare. Si chiama scripting, BASIC, il sistema di composizione TeX , ecc ... La lingua o il sistema non ha importanza, è il modo in cui i loro creatori e le persone l'hanno guardato: "Caro programma / computer, stampa il mio nome" , piuttosto che "Prendimi 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 di tastiera (ma non dimenticare di pulirlo, ecc. "

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. Quindi il programmatore non può fare nulla, anche se "parla" perfettamente il linguaggio di programmazione, se la sua intelligenza non può raggiungere questo livello di astrazione in cui si vedono i byte memorizzati in memoria, gli archi come puntatori, ecc., E quindi tornare sulla terra per collegarlo al problema. Quindi non tutti gli esseri umani possono programmare (in linguaggio assembly ...).

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

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

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

Troverai una breve analisi di come le persone imparano a programmare nell'articolo Ti insegna a programmare in dieci anni di Peter Norvig. Sembra pensare che non ci sia un programmatore nato.

    
risposta data 04.09.2012 - 22:01
fonte
3

Molti anni fa ho fatto 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 della leadership in una curva a campana, con la maggior parte delle persone che si trovava a metà strada tra i due estremi. A parte i pochi estremisti che "non potevano condurre un cane", quasi tutti potevano imparare l'arte della leadership. La quantità di sforzo richiesta per trasformare qualcuno in un leader dipendeva da dove si sedevano sul continuum.

Sospetto che la programmazione abbia un continuum simile e una distribuzione simile. Ci saranno quelli che lo faranno senza sforzo, e quelli che non potrebbero mai ottenerlo se la loro vita dipendesse da ciò. Ma sono i pochi in coda alla curva del campanello. La maggior parte delle persone siedono tra questi estremi sul continuum. Possono imparare a programmare, ma lo sforzo richiesto per insegnare dipenderà da dove si trovano nel continuum.

    
risposta data 16.09.2012 - 13:33
fonte
2

Non sono sicuro che sia solo programmazione. Ho visto lo stesso tipo di fenomeno con le persone che semplicemente imparano a usare il computer. All'università ero un assistente di laboratorio in un laboratorio che ospitava un computer per la classe degli anziani.

Nel giro di due settimane ho potuto identificare quelli che avrebbero capito e quelli che non lo avrebbero fatto con una precisione 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 si trattasse di una classe per anziani significava che avevamo molti head-beaters che rendevano il modello molto più ovvio.)

    
risposta data 16.09.2012 - 17:09
fonte

Leggi altre domande sui tag