“Nem todo mundo pode ser programador” foi estudado?

180

Um velho ditado que muitos programadores adotam é "É preciso um certo tipo de mente para aprender programação, e nem todo mundo pode fazer isso."

Agora, tenho certeza de que todos nós temos nossa própria evidência, mas isso foi estudado cientificamente?

    
por System Down 04.09.2012 / 18:25
fonte

9 respostas

87

Outro estudo, Investigando a viabilidade de modelos mentais mantidos por programadores novatos :

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.

Além disso, veja pesquisas posteriores dos mesmos autores do estudo Sheep vs Goats ( que nunca foi publicado, para ser claro). Seu último e mais recente estudo sobre este tema de 2009 é Meta-análise do efeito da consistência sobre o sucesso na aprendizagem precoce da programação (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.

    
por 04.09.2012 / 20:40
fonte
92

Sim, há um papel on-line muito famoso criado para determinar mais ou menos "quem é um programador".

Um estudo cognitivo da aprendizagem precoce da programação - 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.

Aqui está um post de Jeff Atwood que interpreta os resultados e coloca algumas coisas em contexto.

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.

    
por 04.09.2012 / 18:27
fonte
33

Qualquer um pode ser um programador. Considere a facilidade com que as pessoas captam as planilhas. Considere com que facilidade Alan Kay introduz as crianças à programação por meio de experimentos e explorações em um ambiente programável.

As pessoas podem estudar o sucesso em cursos de nível universitário e concluir que "algumas pessoas não estão aptas para aprender programação". Entretanto, tal conclusão ultrapassa severamente os limites da evidência observada. Quanta falha poderia ser atribuída a como a programação é ensinada (abstrata demais?), Ou qual estilo de programação é ensinado (imperativo demais?) Ou o ambiente de programação (compilação, sem feedback imediato?).

É bem compreendido que as pessoas entendem as abstrações mais prontamente depois de já terem trabalhado com múltiplas instâncias concretas - ou seja, que não podemos aprender algo até que quase já a conhecemos. Começar com o resumo, portanto, é uma maneira totalmente tola de ensinar programação. Muitas pessoas que tropeçam em "modelos mentais" pré-concebidos se desenvolveriam se fossem ensinadas em um ambiente mais concreto com feedback em tempo real (por exemplo, como na Kahn Academy for CS ) então encorajados a subir a escada da abstração quando estiverem prontos para isso. A Programação Aprendizável é um ensaio recente de Bret Victor chama a atenção para desafios ambientais desnecessários que os programadores enfrentam na aprendizagem.

Em alguns casos, são os alunos que falham em suas aulas. Preguiça intelectual e ignorância voluntária existirão em qualquer grande grupo de humanos. Pessoas inteligentes não são exceção, como qualquer um que tenha argumentado com uma manivela brilhante pode atestar. Mas, especialmente para programação e matemática, muitas vezes são as classes que estão falhando nos alunos.

    
por 04.09.2012 / 21:12
fonte
19

Talvez isso seja anedótico, mas quando ensinei programação de introdução a algumas centenas de estudantes de artes liberais, não encontrei tal "dupla corcunda". Parecia-me que todos eram bem capazes, embora alguns trabalhassem mais que outros, e muito poucos tentaram blefar.

Muito tem a ver com como é ensinado.

Muito também tem a ver com o desejo - alguns não acham a programação um pouco interessante. Mas mesmo assim, eles podem aprender se eles fizerem um esforço honesto.

    
por 04.09.2012 / 22:59
fonte
7

Quando comecei, era comum fazer um "teste de aptidão" antes de você conseguir um trabalho de programação. Não havia tantos graduados em ciência da computação, então era comum recrutar de outras disciplinas.

Os testes foram semelhantes ao que você vê nos testes de QI (qual é o próximo número na sequência, etc.) .

A evidência anedótica é que, embora nem todo mundo que passou no teste tenha se tornado um bom programador, ninguém que fracassou no teste, mas foi contratado por outras razões, já se tornou um bom programador.

Infelizmente, os drones de RH não entenderam esses testes (e falharam quando os pegaram!), então o recrutamento hoje em dia depende de coisas que os drones de RH entendem - boas habilidades de uso em faculdades, comunicação e na área de vestimenta.

Esta é basicamente a razão pela qual os grandes departamentos de TI têm muitas pessoas que são ótimas em programas do PowerPoint e muito poucos bons programadores.

    
por 05.09.2012 / 07:53
fonte
4

Para aqueles que citam o estudo de Dehnadi e Bornat em corcunda dupla ou caprinos-ovelhas, vale a pena conferir Mental Modelos e Aptidão de Programação de Caspersen et al (2007) em que eles tentam replicá-lo:

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.

    
por 16.09.2012 / 12:57
fonte
4

Pode-se fazer estudos sobre capacidades de abstração, ou outros conhecimentos úteis, mas a definição de programação não é clara, e eu acho que a citação é irrelevante, porque existem maneiras opostas de olhar para a programação:

O primeiro tipo: Linguagens de programação são (ou deveriam ser) algum tipo de linguagem humana feita para descrever uma tarefa para o computador executar, assim todos que falam devem poder programar. É chamado de script, BASIC, o sistema de composição TeX , etc ... A linguagem ou o sistema não importa, é a forma como os criadores e as pessoas olhavam para ele: "Caro programa / computador, por favor, imprima meu nome" , em vez de "Obtenha espaço do tamanho de onze caracteres, depois me dê o endereço neste espaço, então deixe-me armazená-lo, em seguida, digite onze caracteres para esta memória que você pode tirar do meu buffer de teclado (mas não se esqueça de limpá-lo, etc ".

Nesse caso, fica claro que o estudo seria "Nem toda linguagem pode ser assimilada rapidamente?".

Por outro lado, as linguagens de programação são apenas uma maneira de descrever como um computador funciona ou como ele deve funcionar, como ele deve ser 'conectado' se você pensar em computadores dos anos 50. Portanto, o programador não pode fazer nada, mesmo que "fale" perfeitamente a linguagem de programação, se sua inteligência não puder atingir esse nível de abstração onde você vê bytes sendo armazenados na memória, strings como ponteiros, etc., e então voltar para a terra para ligá-lo ao problema. Portanto, nem todo ser humano pode programar (em linguagem assembly ...).

Além disso, você precisará de todas as qualidades necessárias para trabalhar e produzir algo: saiba muito bem o que deseja, facilite a compreensão / conclusão / revisão, concentre-se em seus objetivos, etc. um arquiteto, um escritor, um músico, um prostituto, um prothesist, etc.

Mas a maioria dos humanos tem boas capacidades de abstração, especialmente crianças. Algumas escolas alemãs estão ensinando Haskell para pré-adolescentes (linguagens de programação como Pascal ou Delphi estão sendo ensinados em todas as escolas alemãs).

Então, eu diria que a pergunta é muito difícil de responder, e qualquer resposta (ou estudo) é provavelmente irrelevante.

Você encontrará uma breve análise de como as pessoas aprendem a programar no artigo Ensine-se a programar em dez anos de Peter Norvig. Ele parece pensar que não existe um programador nascido.

    
por 04.09.2012 / 22:01
fonte
3

Muitos anos atrás eu fiz vários cursos que incluíam a teoria da liderança militar. Parte da teoria era que existe um contínuo de liderança, desde aqueles que são líderes naturais até aqueles que não conseguiam levar um cachorro na coleira. A ideia era que as pessoas fossem distribuídas nesse contínuo de liderança em uma curva de sino, com a maioria das pessoas estando em algum lugar entre os dois extremos. Além dos poucos no extremo "não poderia levar um cachorro" final quase todo mundo poderia ser ensinado a arte da liderança. A quantidade de esforço necessário para transformar alguém em líder dependia de onde eles se sentavam no continuum.

Eu suspeito que a programação tenha um continuum similar e uma distribuição similar. Haverá aqueles que simplesmente conseguirão sem esforço, e aqueles que nunca conseguiriam se suas vidas dependessem disso. Mas eles são os poucos na cauda da curva do sino. A maioria das pessoas se senta entre esses extremos no continuum. Eles podem aprender a programar, mas o esforço necessário para ensiná-los dependerá de onde eles se encontram.

    
por 16.09.2012 / 13:33
fonte
2

Não tenho certeza se é apenas programação. Eu vi o mesmo tipo de fenômeno com pessoas simplesmente aprendendo a usar computadores. De volta à faculdade, eu era assistente de laboratório em um laboratório que hospedava uma alfabetização em informática para idosos.

Dentro de duas semanas eu pude identificar aqueles que conseguiriam e aqueles que não fariam com 100% de precisão. Você ou aceitou que esta é a maneira que o computador funciona ou você bateu sua cabeça contra ele para toda a classe. Não havia meio termo. (O fato de ser uma turma de idosos significava que tínhamos muitos batedores de cabeça que tornavam o padrão muito mais óbvio).

    
por 16.09.2012 / 17:09
fonte