"Nem todo mundo pode ser um programador" foi estudado?


182

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

Agora, tenho certeza de que todos temos nosso próprio tesouro de evidência anedótica, mas isso foi estudado cientificamente?


63
Parece uma boa pergunta cética.
Chad Harrison

10
Aprender a programar é muito diferente de realmente ser capaz de ser um valioso programador. A programação é muito simples para a maior parte. Leia as especificações, implemente em conformidade. Teste. Repetir. Sim, todos podem ser programadores. Nem todo mundo pode ser um programador valioso . Especialmente certas tarefas exigem muito mais pensamento e experimentação do que outras. É melhor deixar essas coisas para as pessoas que realmente gostam de fazer isso. Um exemplo poderia ser a implementação de construções de baixo nível, contando ciclos de clock, bits e bytes sem nenhuma ferramenta moderna de programação ou qualquer coisa. Nem todo mundo pode lidar com isso.
Zxcdw 04/04/12

9
@zxcdw - Não estou realmente questionando "Nem todo mundo pode ser um programador bom / valioso". Isso é certo, já que "nem todo mundo pode ser um X bom / valioso" é uma verdade universal para quase qualquer valor de X como vocação. O que estou questionando é a capacidade de aprender programação e envolvê-la na cabeça da pessoa comum.
System Down

37
O ditado é verdadeiro provado todos os dias na programadores <suspiro>
yannis

15
Eu acho que o espírito desta pergunta não é sobre a qualidade dos programadores, acho que é mais sobre "todos podem ser treinados para resolver um problema e delinear uma solução logicamente correta em uma linguagem não humana", o que às vezes acho que não é algo que todos podem fazer. Os conceitos de projetar lógica para ditar comportamentos não baseados em substâncias de uma máquina não humana são extremamente abstratos; esse nível de abstração exige que você seja capaz de seguir muitos indiretos lógicos mentalmente, porque você não pode tocar nos produtos de cada um. pise com as mãos.
Jimmy Hoffa

Respostas:


87

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

Este artigo descreve uma investigação sobre a viabilidade de modelos mentais usados ​​por programadores iniciantes no final de um primeiro ano de curso de programação em Java. As descobertas qualitativas identificam a gama de modelos mentais de valor e atribuição de referência mantidos pelos participantes. A análise quantitativa revela que aproximadamente um terço dos estudantes possuía modelos mentais inviáveis ​​de atribuição de valor e apenas 17% dos estudantes possuíam um modelo mental viável de atribuição de referência. Além disso, em termos de comparação entre os modelos mentais dos participantes e seu desempenho nas avaliações em curso e no exame final, verificou-se que os alunos com modelos mentais viáveis ​​tiveram um desempenho significativamente melhor do que aqueles com modelos não viáveis. Essas descobertas são usadas para propor uma abordagem mais "construtivista"

Além disso, veja pesquisas posteriores dos mesmos autores do estudo Sheep vs Goats (que nunca foi realmente publicado, para ficar claro). Seu último e mais recente estudo sobre esse tópico, em 2009, é a meta-análise do efeito da consistência sobre o sucesso na aprendizagem precoce de programação (pdf).

Foi desenvolvido um teste que aparentemente examinava o conhecimento de tarefa e sequência de um aluno antes de um primeiro curso de programação, mas de fato foi projetado para capturar suas estratégias de raciocínio. Um experimento encontrou duas populações distintas de estudantes: era possível construir e aplicar consistentemente um modelo mental de execução do programa; o outro parecia incapaz de construir um modelo ou de aplicar um consistentemente. O primeiro grupo teve um desempenho muito melhor no exame de final de curso do que o segundo em termos de sucesso ou fracasso. O teste não prevê com precisão os níveis de desempenho, mas, combinando o resultado de seis repetições do experimento, cinco no Reino Unido e um na Austrália, mostramos que a consistência tem um forte efeito no sucesso da aprendizagem precoce de programação - mas experiência em programação em segundo plano, por outro lado,


24
"... primeiro ano de curso de programação Java ..." <- Encontrei seu problema.
Jon Galloway

4
Bornat, além de retirar o artigo original, discute tentativas de reproduzir o resultado de 2009 - para mim, elas não parecem encorajadoras: eis.mdx.ac.uk/staffpages/r_bornat/papers/…
Blaisorblade

6
Como mencionado acima, o artigo original foi retirado: retractionwatch.com/2014/07/18/…
Spongeboy

92

Sim, existe um artigo on-line bastante famoso, criado para determinar mais ou menos "quem é que foi programado".

Um estudo cognitivo da aprendizagem precoce da programação - Prof Richard Bornat, Dr. Ray Adams

Todos os professores de programação acham que seus resultados exibem uma 'dupla corcunda'. É como se houvesse duas populações: aquelas que podem programar e aquelas que não podem programar, cada uma com sua própria curva de sino independente.

Quase toda a pesquisa sobre programação de ensino e aprendizagem se concentrou no ensino: mude o idioma, mude a área de aplicação, use um IDE e trabalhe na motivação. Nada disso funciona, e a corcova dupla persiste.

Temos um teste que seleciona a população que pode programar antes do início do curso. Podemos separar a corcunda dupla. Você provavelmente não acredita nisso, mas depois de ouvir a conversa. Não sabemos exatamente como / por que funciona, mas temos algumas boas teorias.


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

Apesar das enormes mudanças que ocorreram desde que a computação eletrônica foi inventada na década de 1950, algumas coisas permanecem teimosamente iguais. Em particular, a maioria das pessoas não consegue aprender a programar: entre 30% e 60% da entrada de todos os departamentos de ciências da computação da universidade falha no primeiro curso de programação.

Professores experientes estão cansados, mas nunca esquecem esse fato; iniciantes de boa educação que acreditam que os antigos deviam estar fazendo errado aprendem a verdade com uma experiência amarga; e isso acontece há quase duas gerações, desde que o assunto começou na década de 1960.


46
Para ser justo - esse estudo prova que 30-60% da entrada das escolas não pode ser incomodada em fazer nenhum trabalho. Isso é verdade em todos os assuntos e em todos os tempos!
Martin Beckett

15
Este é um artigo muito interessante e apóia a idéia de que nem todo mundo está preparado para programar. Infelizmente, o trabalho posterior dos autores (também na página vinculada) mostra que o teste é menos preditivo do que se pensava inicialmente. "Não podemos afirmar que estamos separando as cabras de programação das ovelhas não programadas ... É lamentável que o resultado não cumpra a promessa inicial, mas não fechou as portas de nossas explorações".
ASHelly #

26
Para deixar claro que o primeiro artigo de 2006 foi apenas um rascunho e nunca foi publicado. Portanto, não é exatamente revisado cientificamente. Talvez seja melhor olhar para os estudos posteriores na página do autor .
Jeff Atwood

17
Investigar o sucesso de um curso acadêmico é uma maneira estranha de estudar o fenômeno. Primeiro, as palestras são provavelmente a maneira menos adequada para ensinar programação. Segundo, nem todo mundo aprende (bem) com as palestras. Isso é muito tendencioso por design para mim lá.
Raphael

5
O professor Bornat mais tarde se preocupou em retirar voluntariamente esse rascunho, porque ele estava com problemas de saúde mental na época. eis.mdx.ac.uk/staffpages/r_bornat/papers/… Além disso, minha leitura do cap. 3 é que outros não conseguiram replicar o resultado - como se costuma dizer, mesmo a conclusão da metaanálise de 2009 "é afetada pelo menos pelo ambiente cultural e pelas práticas educacionais ". No geral, meu melhor palpite é que o curso foi ruim, o que não é surpreendente, já que "como ensinar programação de maneira eficaz" é um problema de pesquisa.
Blaisorblade 15/03/2015

33

Qualquer um pode ser um programador. Considere com que facilidade as pessoas compreendem planilhas. Considere com que facilidade Alan Kay introduz as crianças na 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 superior e concluir que "algumas pessoas não estão aptas a aprender programação". No entanto, essa conclusão ultrapassa severamente os limites das evidências observadas. Quanta falha poderia ser atribuída à maneira como a programação é ensinada (muito abstrata?), Ou a qual estilo de programação é ensinado (imperativa demais?), Ou ao ambiente de programação (compilação, sem feedback imediato?).

É bem entendido que as pessoas compreendem abstrações com maior facilidade depois de já trabalharem com várias instâncias concretas - ou seja, que não podemos aprender algo até que quase já o conheçamos. A partir do resumo, portanto, é uma maneira totalmente tola de ensinar programação. Muitas pessoas que tropeçam em "modelos mentais" pré-concebidos prosperariam se fossem ensinadas em um ambiente mais concreto com feedback em tempo real (por exemplo, como na Kahn Academy for CS ), então encorajadas a subir a escada da abstração quando estiverem prontas para isso. Learnable Programming é um ensaio recente de Bret Victor que chama a atenção para desafios ambientais desnecessários que os programadores enfrentam na aprendizagem.

Em alguns casos, são os alunos que reprovam nas aulas. Preguiça intelectual e ignorância voluntária existirão em qualquer grande grupo de humanos. Pessoas inteligentes não são excepção, como qualquer pessoa que tenha discutido com uma manivela brilhante pode atestar. Mas, especialmente para programação e matemática, geralmente são as turmas que estão reprovando nos alunos.


7
Eu acho que qualquer pessoa pode aprender codificação rudimentar, assim como aprender música básica. Porém, ganhar a vida com isso é uma questão diferente. Por exemplo, eu amo tocar violão, mas não vou fazer uma turnê por várias cidades ou aparecer em um grande álbum de estúdio em breve.
Jfrankcarr

4
Dê uma olhada no artigo vinculado na resposta de Serg. Mesmo que não seja tão claro como eles pensavam inicialmente, a verdade é que algumas pessoas simplesmente não conseguem entender os conceitos mais básicos de programação, mesmo depois de um mês ou dois de aulas - por exemplo: x = 1; y = x;e a pergunta é " Quais são os valores de xe y? "
Izkata 4/09/12

3
Olá e bem-vindo! Você provavelmente não sabe disso, pois é muito novo, mas realmente não gostamos de perguntas abertas e / ou de discussão. Eu removi a Is it true that not everyone can learn how to program?linha da pergunta, nossos membros mais experientes a ignoraram, percebendo que ela não se encaixava em nossas diretrizes e concentrei suas respostas nos aspectos científicos / de pesquisa da pergunta. Você poderia fazer o mesmo?
yannis

3
@jfrankcarr - Qualquer habilidade, em nível profissional ou competitivo, deixará muitos profissionais para trás. A maioria das pessoas não consegue falar nem escrever profissionalmente em linguagem natural.
Dmbarbour

3
@ Izkata - O artigo publicado por Serg é de valor científico duvidoso; resultados semelhantes seriam alcançados em qualquer classe mal ensinada: as pessoas que já entenderam o assunto se saíram bem. E em relação à sua pergunta de exemplo: mais comuns eram perguntas que assumiam semântica imperativa, que certamente não são intuitivas. Você poderia responder sua própria pergunta se não pudesse assumir a ausência de simultaneidade?
Dmbarbour

19

Talvez isso seja anedótico, mas quando eu ensinei programação de introdução a algumas centenas de estudantes de artes liberais, não encontrei essa "dupla corcunda". Pareceu-me que todos eram bastante capazes, embora alguns trabalhassem mais do que outros, e muito poucos tentassem abrir caminho.

Muito tem a ver com a forma como é ensinado.

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


5
Muitas vezes me pergunto onde o desejo está envolvido nisso, todos sabemos como a programação é totalmente desinteressante para a grande maioria da população em geral, me faz pensar quantas pessoas tentam usar o dinheiro cs, mas fazer com que as pessoas comuns completem a falta de interesse na maneira como um computador funciona.
Jimmy Hoffa

6
@ Jimmy: Tentei torná-lo interessante, colocando-os em projetos pessoais sobre jogos, ciências, finanças, música, o que quer que os atraísse. A programação é muito mais interessante quando se trata de um meio para atingir um fim.
precisa saber é o seguinte

2
@ Den: Bem, eles tiveram que fazer pequenos programas para trabalhos de casa, realizar testes e testes, e cada um deles teve que fazer um projeto de programação pessoal significativo, que eu avaliei. O curso foi obrigatório.
Mike Dunlavey

1
@ MikeDunlavey Os alunos sempre têm amigos que podem programar e os trabalhos de casa podem ser facilmente enganados.
Sulthan

2
@Sulthan: Não na minha classe eles não. Alguns tentaram. Alguns tentaram copiar de outros em um teste. Era óbvio - o código era muito parecido com o de outra pessoa e, ao mesmo tempo, continha erros óbvios. Para os projetos, não havia dois iguais, e nada levanta uma bandeira vermelha como alguém que faz um trabalho medíocre em testes e trabalhos de casa, mas se vira em um belo projeto. Acabei de fazer outro teste e dar a eles. Se eles claramente não sabem qual o caminho a seguir, não tenho obrigação de dar uma boa nota a eles. Como alternativa, posso chamar outro professor.
precisa saber é o seguinte

7

Quando eu comecei, era comum fazer um "teste de aptidão" antes de conseguir um trabalho de programação. Como não havia tantos graduados em ciência da computação, era comum recrutar 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 era que, embora nem todos os que passaram no teste se tornaram um bom programador, ninguém que falhou no teste, mas foi contratado por outros motivos, se tornou um bom programador.

Infelizmente, os drones de RH não entenderam esses testes (e falharam quando os fizeram!); Portanto, o recrutamento hoje em dia depende de coisas que os drones de RH entendem - boa faculdade, comunicação e habilidades de uso.

Esse é o motivo pelo qual grandes departamentos de TI têm muitas pessoas ótimas nos shows do PowerPoint e muito poucos bons programadores.


1
+ Estou tão agradecido por nunca (quase) ter passado pelo RH.
precisa saber é o seguinte

4

Para aqueles que citam o estudo de corcova dupla de Dehnadi e Bornat ou cabras versus ovelhas, vale a pena conferir Modelos mentais e aptidão para programação de Caspersen et al (2007), nos quais tentam replicá-lo:

Prever o sucesso dos alunos que participam de cursos introdutórios de programação é uma área de pesquisa ativa há mais de 25 anos. Até recentemente, nenhuma variável ou teste possuía poder preditivo significativo. No entanto, Dehnadi e Bornat afirmam ter encontrado um teste simples para a aptidão de programação para separar claramente ovelhas de programação de cabras que não são de programação. Apresentamos brevemente sua teoria e instrumento de teste.

Repetimos o teste em nosso contexto local para verificar e talvez generalizar suas descobertas, mas não conseguimos mostrar que o teste prediz o sucesso dos alunos em nosso curso introdutório de programação.

Com base nessa falha do instrumento de teste, discutimos várias explicações para nossos diferentes resultados e sugerimos um método de pesquisa a partir do qual pode ser possível generalizar os resultados locais nessa área. Além disso, discutimos e criticamos o teste de aptidão de programação de Dehnadi e Bornat e desenvolvemos instrumentos de teste alternativos.


4

Pode-se fazer estudos sobre as capacidades de abstração ou outro conhecimento útil, mas a definição de programação não é clara, e acho que a citação é irrelevante, porque existem maneiras opostas de analisar a programação:

O primeiro tipo: as linguagens de programação são (ou deveriam ser) algum tipo de linguagem humana criada para descrever uma tarefa a ser executada pelo computador; portanto, todo mundo que fala deve poder programar. Chama-se script, BASIC, o sistema tipográfico TeX , etc ... A linguagem ou o sistema não importa, é a maneira como seus criadores e pessoas o encaravam: "Caro programa / computador, imprima meu nome" , em vez de "Consiga um espaço do tamanho de onze caracteres, depois me dê o endereço desse espaço, deixe-me armazená-lo e digite onze caracteres nessa memória que você pode retirar do buffer do teclado (mas não esqueça de limpá-lo etc. "

Nesse caso, fica claro que o estudo preferiria "Nem toda língua 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 deve funcionar, como deve ser 'conectado' se você pensar nos computadores dos anos 50. Portanto, o programador não pode fazer nada, mesmo que ele 'fale' a linguagem de programação perfeitamente, se sua inteligência não puder atingir esse nível de abstração em que você vê bytes armazenados na memória, seqüências de caracteres como ponteiros etc. volte ao mundo 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 por outros, concentre-se em seus objetivos, etc. um escritor, um músico, uma prostituta.

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 ensinadas 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 análise muito breve de como as pessoas aprendem programação no artigo Ensine-se a programar em dez anos, de Peter Norvig. Ele parece pensar que não há programador nato.


3
Olá e bem-vindo! Estou um pouco confuso sobre como a sua resposta responde à pergunta, o que é realmente sobre se este tem sido estudado ou não ...
yannis

Desculpe eu errei com o botão "enviar" ... Espero que isso faz mais sentido
Yves

Você está no caminho certo, mas vincula as linguagens de programação ao hardware (computadores). Programar não é exclusivamente a capacidade de conversar com o computador. Programar é descrever um processo de maneira consistente. Descrever um processo para outro ser humano é semelhante a codificá-lo em uma linguagem de programação de alto nível. A maior diferença é que os seres humanos são mais tolerantes à ambiguidade.
Imperador Orionii 5/09/12

Não defendo esse ponto de vista, mas tentei ressaltar o fato de que as pessoas tendem a ver as linguagens de programação e o uso que deve ser feito delas como descrições de tarefas (o que é importante para programação e script de alto nível), ou como descrições de "processo de computador" (por exemplo, linguagens de baixo nível parecem mais próximas à linguagem de modelagem VHDL do que ao VB.NET, mesmo que sejam linguagens de programação). Essas duas abordagens são muito diferentes e, no entanto, duas faces da mesma moeda. Eles insistem em diferentes aspectos da inteligência humana, que são difíceis de quantificar. Então é difícil estudá-los.
Yves

3

Muitos anos atrás, fiz vários cursos que incluíam a teoria da liderança militar. Parte da teoria era a de que existe um continuum de liderança, desde os líderes naturais até os que não podiam levar um cão na coleira. A idéia era que as pessoas fossem distribuídas nesse continuum de liderança em uma curva em sino, com a maioria das pessoas em algum lugar entre os dois extremos. Além dos poucos no extremo "não podia levar um cachorro", quase todo mundo podia aprender a arte da liderança. A quantidade de esforço necessária para transformar alguém em líder dependia de onde eles estavam no continuum.

Suspeito que a programação tenha um continuum semelhante e uma distribuição semelhante. Haverá aqueles que 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á do local em que estão sentados.


Vejo muitas pessoas que não conduzem corretamente um cachorro na coleira. Eu costumava passear com meus cães sem trela, mesmo na cidade. Eu sempre me perguntei por que as pessoas não fazem o cachorro se importar.

2

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

Dentro de duas semanas, eu conseguia identificar quem iria receber e quem não teria, basicamente, com 100% de precisão. Você aceitou que é assim que o computador funciona ou bateu a cabeça contra ele por toda a classe. Não havia meio termo. (O fato de ser uma aula para idosos significava que tínhamos muitos batedores de cabeça, o que tornava o padrão muito mais óbvio.)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.