¿Se ha estudiado "No todos pueden ser programadores"?

182

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 ¿se ha estudiado esto científicamente?

Se cayó el sistema
fuente
63
Suena como una buena pregunta escéptica.
Chad Harrison
10
Aprender a programar es muy diferente de ser realmente un programador valioso . La programación es muy simple en su mayor parte. Leer especificaciones, implementar en consecuencia. Prueba. Repetir. Sí, todos pueden ser programadores. No todos pueden ser un programador valioso . Especialmente ciertas tareas requieren mucho más pensamiento y experimentación que otras. Es mejor dejar estas cosas para las personas que realmente disfrutan haciéndolo. Un ejemplo podría ser la implementación de construcciones de bajo nivel, contando ciclos de reloj, bits y bytes sin ninguna herramienta moderna de programmig ni nada. No todos pueden manejar eso.
zxcdw
99
@zxcdw - Realmente no estoy cuestionando "No todos pueden ser un programador bueno / valioso". Eso es un hecho dado que "No todos pueden ser una X buena / valiosa" es una verdad universal para casi cualquier valor de X como vocación. Lo que estoy cuestionando es la capacidad de aprender programación y entenderlo para la persona común.
Sistema
37
El adagio se prueba todos los días en Programadores <suspiro>
yannis
15
Creo que el espíritu de esta pregunta no se trata de la calidad de los programadores, creo que se trata más bien de "¿se puede capacitar a todos para resolver un problema y esbozar una solución lógica correcta en un lenguaje no humano", lo que a veces creo que no es algo que todos pueden hacer. Los conceptos de diseñar la lógica para dictar los comportamientos no basados ​​en sustancias de una máquina no humana son extremadamente abstractos, este nivel de abstracción requiere que uno pueda seguir mentalmente muchas indirecciones lógicas porque no puede tocar los productos de cada uno. paso con las manos
Jimmy Hoffa

Respuestas:

87

Otro estudio, Investigando la viabilidad de los modelos mentales de los programadores novatos :

Este artículo describe una investigación sobre la viabilidad de los modelos mentales utilizados por programadores novatos al final de un curso de programación Java de primer año. Los hallazgos cualitativos identifican el rango de modelos mentales de valor y asignación de referencia de los participantes. El análisis cuantitativo revela que aproximadamente un tercio de los estudiantes tenían modelos mentales no viables de asignación de valores 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 tuvieron un rendimiento significativamente mejor que aquellos con modelos no viables. Estos hallazgos se utilizan para proponer un "constructivista" más

Además, vea la investigación posterior de los mismos autores del estudio Sheep vs Goats (que nunca se publicó, para ser claros). Su último y más reciente estudio sobre este tema desde 2009 es el metanálisis del efecto de la coherencia en el éxito en el aprendizaje temprano de la programación (pdf).

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

Jeff Atwood
fuente
24
"... primer curso de programación Java ..." <- Encontré tu problema.
Jon Galloway
44
Bornat, más allá de retractarse del artículo original, analiza los intentos de reproducir el resultado de 2009; para mí, no parecen alentadores: eis.mdx.ac.uk/staffpages/r_bornat/papers/…
Blaisorblade
66
Como se mencionó anteriormente, el documento original sobre esto fue retraído: retractionwatch.com/2014/07/18/…
Spongeboy
92

Sí, hay un periódico bastante famoso en línea 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 una "doble joroba". Es como si hubiera dos poblaciones: las que pueden [programar] y las que no pueden [programar], cada una con su propia curva de campana independiente.

Casi todas las investigaciones sobre programación de enseñanza y aprendizaje se han concentrado en la enseñanza: cambiar el idioma, cambiar el área de aplicación, usar un IDE y trabajar en la motivación. Nada de eso funciona, y la doble joroba persiste.

Tenemos una prueba que selecciona la población que puede programar, antes de que comience el curso. Podemos separar la doble joroba. Probablemente no creas esto, pero lo harás después de escuchar la charla. No sabemos exactamente cómo / 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 han tenido lugar desde que se inventó la informática electrónica en la década de 1950, algunas cosas permanecen obstinadamente igual. En particular, la mayoría de las personas no pueden aprender a programar: entre el 30% y el 60% de la entrada de cada departamento de informática de la universidad falla el primer curso de programación.

Los maestros experimentados están cansados ​​pero nunca ignoran este hecho; principiantes iluminados que creen que los viejos deben haberlo hecho mal aprenden la verdad de la amarga experiencia; y así ha sido durante casi dos generaciones, desde que el tema comenzó en la década de 1960.

sergserg
fuente
46
Para ser justos, ese estudio demuestra que del 30 al 60% de la ingesta de las escuelas no puede molestarse en hacer ningún trabajo. ¡Eso ha sido cierto en todos los temas y en todos los tiempos!
Martin Beckett
15
Este es un documento muy interesante y respalda la idea de que no todos están programados. Lamentablemente, el trabajo posterior de los autores (también en la página vinculada) muestra que su prueba es menos predictiva de lo que inicialmente se pensaba. "No podemos afirmar que estamos separando a las cabras programadas de las ovejas no programadas ... Es lamentable que el resultado no esté a la altura de la promesa inicial, pero no ha cerrado la puerta a nuestras exploraciones".
AShelly
26
Para ser claros, el primer artículo de 2006 fue solo un borrador y nunca fue publicado. Por lo tanto, no está exactamente revisado científicamente. Quizás sea mejor mirar los estudios posteriores en la página del autor .
Jeff Atwood
17
Investigar el éxito en un curso académico es una forma extraña de estudiar el fenómeno. Primero, las conferencias son probablemente la forma menos adecuada para enseñar programación. Segundo, no todos aprenden (bien) de las conferencias. Eso es demasiado sesgo por diseño para mí allí.
Raphael
55
El profesor Bornat más tarde se molestó en retractarse voluntariamente de ese borrador, porque tenía problemas de salud mental en ese momento. eis.mdx.ac.uk/staffpages/r_bornat/papers/… Además, mi lectura de Sec. 3 es que otros no pudieron replicar el resultado, como dicen, incluso la conclusión del metaanálisis de 2009 "se ve afectada al menos por el entorno cultural y las prácticas educativas ". En general, mi mejor suposición es que el curso fue malo, lo cual no es sorprendente ya que "cómo enseñar a programar de manera efectiva" es un problema de investigación.
Blaisorblade
33

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

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

Es bien sabido que las personas captan las abstracciones más fácilmente después de haber trabajado con varias instancias concretas, es decir, que no podemos aprender algo hasta que casi ya lo sepamos. Comenzar con el resumen, por lo tanto, es una forma completamente tonta de enseñar programación. Muchas personas que tropiezan con los "modelos mentales" concebidos como premisas prosperarían si se les enseñara en un entorno más concreto con retroalimentación en tiempo real (por ejemplo, como en la Kahn Academy for CS ) y luego se les animaría a subir la escalera de la abstracción cuando estén listos para ello. La 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 los que fallan en sus clases. La pereza intelectual y la ignorancia voluntaria existirán en cualquier grupo grande de humanos. Las personas inteligentes no son 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 fallan a los estudiantes.

embarcadero
fuente
77
Creo que casi cualquier persona puede aprender codificación rudimentaria al igual que pueden aprender música básica. Sin embargo, ganarse la vida es algo diferente. Por ejemplo, me encanta tocar la guitarra, pero no voy a ir a una gira por el estadio de varias ciudades o aparecer en un álbum de estudio importante en el corto plazo.
jfrankcarr
44
Eche un vistazo al papel vinculado en la respuesta de Serg. Incluso si no es tan claro como habían pensado inicialmente, la verdad es que algunas personas simplemente no pueden entender los conceptos de programación más básicos, incluso después de un mes o dos de clases, por ejemplo: x = 1; y = x;y la pregunta es " ¿Cuáles son los valores de xy y? "
Izkata
3
¡Hola y bienvenido! Probablemente no lo sepas, ya que eres muy nuevo, pero realmente no nos gustan las preguntas abiertas y / o de discusión. Eliminé la Is it true that not everyone can learn how to program?línea de la pregunta, nuestros miembros más experimentados la ignoraron, al darse cuenta de que no se ajustaba a nuestras pautas, y concentré sus respuestas en los aspectos científicos / de investigación de la pregunta. ¿Podrías hacer lo mismo?
Yannis
3
@jfrankcarr: cualquier habilidad, a nivel profesional o competitivo, dejará atrás a muchos practicantes. La mayoría de las personas no pueden hablar ni escribir ni siquiera lenguaje natural profesionalmente.
Dmbarbour
3
@Izkata - El papel Serg vinculado es de dudoso valor científico; se obtendrían resultados similares de cualquier clase mal enseñada: las personas que ya entendieron el tema lo hicieron bien. Y con respecto a su pregunta de ejemplo: más comunes fueron las preguntas que asumieron una semántica imperativa, que ciertamente no son intuitivas. ¿Podrías responder tu propia pregunta si no pudieras asumir la ausencia de concurrencia?
Dmbarbour
19

Tal vez esto sea anecdótico, pero cuando enseñé programación de introducción a unos 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 fingir.

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

Mucho también tiene que ver con el deseo: a algunos no les parece interesante la programación. Pero aun así, pueden aprenderlo si le hacen un esfuerzo sincero.

Mike Dunlavey
fuente
55
A menudo me pregunto dónde interviene el deseo en esto, todos sabemos cuán totalmente desinteresada es la programación para la gran mayoría de la población en general, me pregunto cuántas personas intentan ir por dinero, pero que las personas promedio no tengan interés en la forma en que La computadora funciona.
Jimmy Hoffa
66
@Jimmy: Traté de hacerlo interesante haciéndolos participar en proyectos personales sobre juegos, ciencia, finanzas, música, lo que les atrajera. La programación es mucho más interesante cuando es un medio para un fin.
Mike Dunlavey
2
@Den: Bueno, tenían que hacer pequeños programas para la tarea, tenían pruebas y exámenes, y cada uno tenía que hacer un importante proyecto de programación personal, todo lo cual califiqué. El curso fue requerido.
Mike Dunlavey
1
@MikeDunlavey Los estudiantes siempre tienen amigos que pueden programar y la tarea puede ser engañada fácilmente.
Sulthan
2
@Sulthan: No en mi clase no lo hicieron. Algunos lo intentaron. Algunos intentaron copiar de otros en una prueba. Era obvio: el código era demasiado parecido al de otra persona y, al mismo tiempo, contenía errores obvios. Para los proyectos, no hay dos iguales, y nada levanta una bandera roja como alguien que hace un trabajo mediocre en cuestionarios y tareas, pero se convierte en un hermoso proyecto. Solo hago otra prueba y se la doy. Si claramente no saben cuál es el camino, no estoy obligado a darles una buena calificación. Alternativamente, puedo llamar a otro profesor.
Mike Dunlavey
7

Cuando comencé, era común hacer una "prueba de aptitud" antes de obtener un trabajo de programación. No había tantos graduados en informática, por lo que era común reclutar de otras disciplinas.

Las pruebas fueron similares a lo que ves en las pruebas de coeficiente intelectual (cuál es el siguiente número en la secuencia, etc.).

La evidencia anecdótica fue que, aunque no todos los que aprobaron la prueba se convirtieron en buenos programadores, nadie que reprobó la prueba pero fue contratado por otras razones nunca se convirtió en un buen programador.

Lamentablemente, los drones de recursos humanos no entendieron estas pruebas (¡y fallaron cuando las tomaron!), Por lo que el reclutamiento en estos días depende de lo que entiendan los drones de recursos humanos: buenas habilidades para la universidad, la comunicación y el uso de trajes.

Esta es más o menos la razón por la cual los grandes departamentos de TI tienen muchas personas que son excelentes en los programas de PowerPoint y muy pocos buenos programadores.

James Anderson
fuente
1
+ Estoy tan agradecido de que nunca (casi) tuve que pasar por RRHH.
Mike Dunlavey
4

Para aquellos que citan el estudio de doble joroba o de cabra contra oveja de Dehnadi y Bornat, vale la pena echarle un vistazo a Modelos mentales y aptitud de programación de Caspersen et al (2007) en el que intentan replicarlo:

Predecir el éxito de los estudiantes que participan en cursos introductorios de programación ha sido un área de investigación activa durante más de 25 años. Hasta hace poco, ninguna variable o prueba había tenido un poder predictivo significativo. Sin embargo, Dehnadi y Bornat afirman haber encontrado una prueba simple para la aptitud de programación para separar limpiamente las ovejas programadas de las cabras no programadas. Presentamos brevemente su teoría e instrumento de prueba.

Hemos repetido su prueba en nuestro contexto local para verificar y quizás generalizar sus hallazgos, pero no pudimos demostrar que la prueba predice el éxito de los estudiantes en nuestro curso introductorio de programación de programas.

En base a esta falla del instrumento de prueba, discutimos varias explicaciones para nuestros diferentes resultados y sugerimos un método de investigación desde el cual puede ser posible generalizar los resultados locales en esta área. Además, discutimos y criticamos la prueba de aptitud de programación de Dehnadi y Bornat y diseñamos instrumentos de prueba alternativos.

Thomas Park
fuente
4

Uno puede hacer estudios sobre 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 para que la computadora la ejecute, por lo que todos los que hablen deberían 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 personas lo miraron: "Estimado programa / computadora, imprima mi nombre" , en lugar de "Dame espacio del tamaño de once caracteres, luego dame la dirección de este espacio, luego déjame almacenarlo, luego ingresa once caracteres en esta memoria que puedes sacar del búfer de mi teclado (pero no olvides limpiarlo , etc. "

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

Por otro lado, los lenguajes de programación son solo una forma de describir cómo funciona una computadora o cómo debería funcionar, cómo debería estar 'conectada' si se 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 perfectamente, si su inteligencia no puede alcanzar este nivel de abstracción donde se ven los bytes almacenados en la memoria, cadenas como punteros, etc., y luego vuelve a la tierra para vincularlo con el problema. Por lo tanto, no todos los humanos pueden programar (en lenguaje ensamblador ...).

Además de esto, necesitará todas las cualidades necesarias para trabajar y producir algo: sepa muy bien lo que quiere, haga que los demás lo comprendan / completen / revisen, se centren en sus objetivos, etc. Pero como un arquitecto, un escritor, un músico, una prostituta ... ahh 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 a Haskell a preadolescentes (se están enseñando lenguajes de programación como Pascal o Delphi en todas las escuelas alemanas).

Entonces diría que la pregunta es muy difícil de responder, y cualquier respuesta (o estudio) probablemente sea irrelevante.

Encontrará un análisis muy breve de cómo las personas aprenden a programar en el artículo Teach Yourself Programming in Ten Years de Peter Norvig. Parece pensar que no hay un programador nato.

Yves
fuente
3
¡Hola y bienvenido! Estoy un poco confundido sobre cómo su respuesta responde a la pregunta, que es realmente acerca de si esto se ha estudiado o no ...
Yannis
lo siento, me equivoqué con el botón "enviar" ... espero que esto tenga más sentido
Yves
Estás en el camino correcto, pero atas los lenguajes de programación con hardware (computadoras). La programación no es exclusivamente la capacidad de hablar con la computadora. La programación consiste en describir un proceso de manera coherente. Describir un proceso para otro ser humano es similar a codificarlo en un lenguaje de programación de alto nivel. La mayor diferencia es que los humanos son más tolerantes a la ambigüedad.
Emperador Orionii
No defiendo este punto de vista, pero traté de señalar el hecho de que las personas tienden a ver los lenguajes de programación y el uso que se debe hacer de ellos, ya sea como descripciones de tareas (lo cual es importante para la programación y scripting de alto nivel), o como descripciones de "proceso informático" (por ejemplo, los lenguajes de bajo nivel parecen más cercanos al lenguaje de modelado VHDL que a VB.NET, incluso si son lenguajes de programación). Estos 2 enfoques son muy diferentes y, sin embargo, 2 caras de la misma moneda. Insisten en diferentes aspectos de la inteligencia humana, que son difíciles de cuantificar. Entonces es difícil estudiarlos.
Yves
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 podían llevar 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 a un perro", casi todos podían aprender el arte del liderazgo. La cantidad de esfuerzo requerida para convertir a alguien en un líder dependía de dónde se sentaran en el continuo.

Sospecho que la programación tiene un continuo similar y una distribución similar. Habrá aquellos que simplemente lo obtienen 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á de en qué parte del continuo se sientan.

Simon Tewsi
fuente
Veo a muchas personas que no llevan correctamente a un perro con una correa. Solía ​​poder pasear a mis perros sin correa, incluso en la ciudad. Siempre me pregunté por qué la gente no le importa al perro.
2

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

En dos semanas pude identificar a quienes lo obtendrían y a quienes no lo harían con una precisión del 100%. Usted aceptó que esta es la forma en que funciona la computadora o se golpeó la cabeza contra ella durante toda la clase. No había término medio. (El hecho de que fuera una clase para personas mayores significaba que teníamos muchos golpes de cabeza que hacían que el patrón fuera mucho más obvio).

Loren Pechtel
fuente