¿Se ha estudiado “No todos pueden ser programadores”?

180

Un viejo adagio al que se adhieren muchos programadores es "Se necesita un cierto tipo de mente para aprender a programar, y no todos pueden hacerlo".

Ahora estoy seguro de que todos tenemos nuestro propio tesoro de evidencia anecdótica, pero ¿esto ha sido estudiado científicamente?

    
pregunta System Down 04.09.2012 - 18:25

9 respuestas

87

Otro estudio, Investigación de la viabilidad de los modelos mentales en poder de los programadores novatos :

  

Este documento describe una investigación sobre la viabilidad de los modelos mentales utilizados por los programadores novatos al final de un curso de programación Java del primer año. Los hallazgos cualitativos identifican la gama de modelos mentales de valor y la asignación de referencia llevada a cabo por los participantes. El análisis cuantitativo revela que aproximadamente un tercio de los estudiantes tenían modelos mentales no viables de asignación de valor y solo el 17% de los estudiantes tenían un modelo mental viable de asignación de referencia. Además, en términos de una comparación entre los modelos mentales de los participantes y su desempeño en las evaluaciones en curso y el examen final, se encontró que los estudiantes con modelos mentales viables se desempeñaron significativamente mejor que aquellos con modelos no viables. Estos resultados se utilizan para proponer un enfoque más "constructivista" para la enseñanza de la programación basada en la integración del "conflicto cognitivo" y la visualización del programa.

También, vea investigación posterior de los mismos autores del estudio Sheep vs Goats ( que nunca fue realmente publicado, para ser claros). Su último y más reciente estudio sobre este tema de 2009 es Meta-análisis del efecto de la consistencia sobre el éxito en el aprendizaje temprano de la programación (pdf).

  

Se diseñó una prueba que aparentemente examinó el conocimiento de un estudiante sobre la asignación y la secuencia antes de un primer curso de programación pero, de hecho, fue diseñada para capturar sus estrategias de razonamiento. Un experimento encontró dos poblaciones distintas de estudiantes: uno podría construir y aplicar de manera consistente un modelo mental de ejecución del programa; el otro parecía no poder construir un modelo o aplicar uno de manera consistente. El primer grupo se desempeñó mucho mejor en su examen de final de curso que el segundo en términos de éxito o fracaso. La prueba no predice con precisión los niveles de rendimiento, pero al combinar el resultado de seis repeticiones del experimento, cinco en el Reino Unido y una en Australia, mostramos que la consistencia tiene un fuerte efecto en el éxito en el aprendizaje temprano para programar, pero la experiencia de programación en segundo plano, por otro lado, tiene poco o ningún efecto.

    
respondido por el Jeff Atwood 04.09.2012 - 20:40
92

Sí, hay un artículo en línea bastante famoso diseñado para determinar más o menos "Quién está hecho para ser un programador".

Un estudio cognitivo del aprendizaje temprano de la programación - Prof Richard Bornat, Dr. Ray Adams

  

Todos los profesores de programación encuentran que sus resultados muestran un 'doble   joroba'. Es como si hubiera dos poblaciones: las que pueden [programa],   y aquellos que no pueden [programa], cada uno con su propia campana independiente   curva.

     

Casi todas las investigaciones sobre programación, enseñanza y aprendizaje tienen   Concentrado en la enseñanza: cambiar el idioma, cambiar la aplicación.   Área, utilizar un IDE y trabajar en la motivación. Nada de eso funciona, y la   Persiste la doble joroba.

     

Tenemos una prueba que selecciona a la población   Que se puede programar, antes de que comience el curso. Podemos separar el   doble joroba. Probablemente no creas esto, pero lo harás después de ti.   escuchar la charla No sabemos exactamente cómo y por qué funciona, pero tenemos   Algunas buenas teorías.

Aquí hay una publicación de blog de Jeff Atwood que interpreta los resultados y pone algunas cosas en contexto.

  

A pesar de los enormes cambios que se han producido desde la electrónica.   la computación se inventó en la década de 1950, algunas cosas siguen siendo obstinadamente las   mismo. En particular, la mayoría de las personas no pueden aprender a programar: entre un 30%   y el 60% de los ingresos de cada departamento de informática de la universidad fallan   El primer curso de programación.

     

Los profesores experimentados están cansados pero nunca   ajeno a este hecho; principiantes que creen que los viejos   Los que deben haber estado haciendo mal aprenden la verdad de lo amargo   experiencia; Y así ha sido durante casi dos generaciones, desde entonces.   el tema comenzó en la década de 1960.

    
respondido por el sergserg 04.09.2012 - 18:27
33

Cualquiera puede ser un programador. Considera con qué facilidad las personas captan las hojas de cálculo. Considere con qué facilidad Alan Kay introduce a los niños a la programación mediante experimentos y exploraciones en un entorno programable.

Las personas pueden estudiar el éxito en cursos de nivel universitario y concluir que "algunas personas no son aptas para aprender a programar". Sin embargo, tal conclusión supera con creces los límites de la evidencia observada. ¿Cuántas fallas podrían atribuirse a cómo se enseña la programación (¿demasiado abstracta?), O qué estilo de programación se enseña (¿es demasiado imperativo?), O al entorno de programación (compilación, no hay retroalimentación inmediata?).

Se entiende bien que las personas entienden las abstracciones más fácilmente después de haber trabajado con múltiples instancias concretas, es decir, que no podemos aprender algo hasta que ya casi lo sabemos. Comenzar con lo abstracto, por lo tanto, es una forma completamente tonta de enseñar programación. Muchas personas que tropiezan con los "modelos mentales" premisconcebidos prosperarían si se les enseñara en un entorno más concreto con comentarios en tiempo real (por ejemplo, como en la Academia Kahn para CS ) luego lo alentó a subir la escalera de la abstracción cuando estén listos para ello. Programación aprendible es un ensayo reciente de Bret Victor que llama la atención sobre los desafíos ambientales innecesarios que enfrentan los programadores en el aprendizaje.

En algunos casos, son los estudiantes quienes suspenden sus clases. La pereza intelectual y la ignorancia voluntaria existirán en cualquier grupo grande de humanos. La gente inteligente no es una excepción, como puede atestiguar cualquiera que haya discutido con una manivela brillante. Pero, especialmente para la programación y las matemáticas, a menudo son las clases las que están fallando a los estudiantes.

    
respondido por el dmbarbour 04.09.2012 - 21:12
19

Tal vez esto sea anecdótico, pero cuando enseñé programación de introducción a unos pocos cientos de estudiantes de artes liberales, no encontré tal "doble joroba". Me pareció que todos eran bastante capaces, aunque algunos trabajaron más duro que otros, y muy pocos intentaron engañar a su manera.

Mucho tiene que ver con cómo se enseña.

Mucho también tiene que ver con el deseo, a algunos no les parece que la programación sea lo más interesante. Pero aun así, pueden aprenderlo si le dan un esfuerzo honesto.

    
respondido por el Mike Dunlavey 04.09.2012 - 22:59
7

Cuando comencé, era común realizar una "prueba de aptitud" antes de que obtuvieras un trabajo de programación. No había tantos graduados en ciencias de la computación, por lo que era común reclutar de otras disciplinas.

Las pruebas fueron similares a las que se ven en las pruebas de IQ (cuál es el siguiente número en la secuencia, etc.) .

La evidencia anecdótica fue que si bien no todos los que pasaron la prueba se convirtieron en un buen programador, nadie que falló la prueba pero que fue contratado por otras razones se convirtió en un buen programador.

Lamentablemente, los drones de HR no entendieron estas pruebas (¡y fallaron cuando las tomaron!), por lo que el reclutamiento en estos días depende de las cosas que los drones de HR entiendan: buena universidad, comunicación y habilidades para usar trajes.

Esta es una de las razones por las que los grandes departamentos de TI tienen mucha gente que es excelente en programas de PowerPoint y muy pocos buenos programadores.

    
respondido por el James Anderson 05.09.2012 - 07:53
4

Para los que citan el estudio de Dehnadi y Bornat sobre la doble joroba o las cabras frente a las ovejas, vale la pena echar un vistazo a Mental Modelos y aptitudes de programación de Caspersen et al (2007) en los que intentan replicarlo:

  

Predecir el éxito de los estudiantes que participan en la introducción   Los cursos de programación han sido un área de investigación activa por más de 25   años. Hasta hace poco, ninguna variable o prueba ha tenido ningún efecto significativo.   poder de predicción. Sin embargo, Dehnadi y Bornat afirman haber encontrado un   Prueba simple para la capacidad de programación para separar limpiamente la programación.   Ovejas de cabras no programadas. Presentamos brevemente su teoría y   instrumento de prueba.

     

Hemos repetido su prueba en nuestro contexto local para verificar   y tal vez generalizar sus hallazgos, pero no pudimos demostrar que el   prueba predice el éxito de los estudiantes en nuestro programa introductorio   curso.

     

Sobre la base de este fallo del instrumento de prueba, discutimos varios   Explicaciones de nuestros diferentes resultados y sugerir un método de investigación.   a partir de la cual puede ser posible generalizar los resultados locales en este   zona. Además, discutimos y criticamos a Dehnadi y Bornat   Programar pruebas de aptitud y diseñar instrumentos de prueba alternativos.

    
respondido por el Thomas Park 16.09.2012 - 12:57
4

Uno puede realizar estudios sobre las capacidades de abstracción u otro conocimiento útil, pero la definición de programación no está clara, y creo que la cita es irrelevante, porque hay formas opuestas de ver la programación:

El primer tipo: los lenguajes de programación son (o deberían ser) algún tipo de lenguaje humano creado para describir una tarea que la computadora debe ejecutar, por lo que todos los que hablan deben poder programar. Se llama scripting, BASIC, el sistema de composición tipográfica TeX , etc ... El idioma o el sistema no importa, es la forma en que sus creadores y las personas lo vieron: "Estimado programa / computadora, escriba mi nombre" , en lugar de "Dame espacio del tamaño de once caracteres, luego dame la dirección de este espacio, luego déjeme almacenarlo, luego ingrese once caracteres en esta memoria que puede sacar de mi teclado (pero no olvide limpiarlo, etc. "

En este caso, está claro que el estudio preferiría "¿No se pueden asimilar todos los idiomas rápidamente?".

Por otro lado, los lenguajes de programación son solo una manera de describir cómo funciona una computadora o cómo debería funcionar, cómo debería estar 'conectada' si piensa en las computadoras de la década de 1950. Por lo tanto, el programador no puede hacer nada, incluso si "habla" el lenguaje de programación a la perfección, si su inteligencia no puede alcanzar este nivel de abstracción donde se ven los bytes almacenados en la memoria, las cadenas como punteros, etc., y luego Regresa a la tierra para vincularlo al problema. Por lo tanto, no todos los humanos pueden programar (en lenguaje ensamblador ...).

Aparte de esto, necesitarás todas las cualidades necesarias para trabajar y producir algo: saber muy bien lo que quieres, facilitar que otros entiendan / completen / revisen, se centren en tus objetivos, etc ... Pero al igual que un arquitecto, un escritor, un músico, una prostituta ... un protesista, etc.

Pero la mayoría de los humanos tienen buenas capacidades de abstracción, especialmente los niños. Algunas escuelas alemanas están enseñando Haskell a los pre-adolescentes (lenguajes de programación como Pascal o Delphi se enseñan en el bee en todas las escuelas alemanas).

Por lo tanto, diría que la pregunta es muy difícil de responder y que cualquier respuesta (o estudio) es irrelevante.

Encontrará un análisis muy breve de cómo las personas aprenden a programar en el artículo Enseñe la programación en diez años por Peter Norvig. Parece que piensa que no hay programador nato.

    
respondido por el Yves 04.09.2012 - 22:01
3

Hace muchos años hice varios cursos que incluían la teoría del liderazgo militar. Parte de la teoría era que existe un continuo de liderazgo, desde aquellos que son líderes naturales hasta aquellos que no pueden conducir a un perro con una correa. La idea era que las personas se distribuyeran en este continuo de liderazgo en una curva de campana, con la mayoría de las personas en algún lugar entre los dos extremos. Aparte de los pocos en el extremo extremo "no podía llevar un perro", casi todos podían aprender el arte del liderazgo. La cantidad de esfuerzo necesario para convertir a alguien en un líder depende de dónde se sentaron en el continuo.

Sospecho que la programación tiene un continuo similar y una distribución similar. Habrá aquellos que solo lo obtendrán sin esfuerzo, y aquellos que nunca podrían obtenerlo si sus vidas dependieran de ello. Pero son los pocos en la cola de la curva de la campana. La mayoría de las personas se sientan entre esos extremos en el continuo. Pueden aprender a programar, pero el esfuerzo requerido para enseñarles dependerá del lugar en el que se sientan.

    
respondido por el Simon Tewsi 16.09.2012 - 13:33
2

No estoy seguro de que sea solo programación. Vi el mismo tipo de fenómeno con personas que simplemente aprenden a usar computadoras. De vuelta en la universidad, fui asistente de laboratorio en un laboratorio que ofrecía conocimientos de informática para la clase de adultos mayores.

Dentro de dos semanas, pude identificar a los que lo obtendrían y a los que no lo harían con una precisión del 100%. O bien aceptaste que esta es la forma en que funciona la computadora o golpeaste tu cabeza contra ella para toda la clase. No había un punto medio. (El hecho de que se tratara de una clase para personas de la tercera edad significaba que teníamos muchos golpeadores de cabeza, lo que hacía que el patrón fuera mucho más obvio).

    
respondido por el Loren Pechtel 16.09.2012 - 17:09

Lea otras preguntas en las etiquetas