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?
case-studies
Se cayó el sistema
fuente
fuente
Respuestas:
Otro estudio, Investigando la viabilidad de los modelos mentales de los programadores novatos :
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).
fuente
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
Aquí hay una publicación de blog de Jeff Atwood que interpreta los resultados y pone algunas cosas en contexto.
fuente
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.
fuente
x = 1; y = x;
y la pregunta es " ¿Cuáles son los valores dex
yy
? "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?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.
fuente
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.
fuente
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:
fuente
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.
fuente
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.
fuente
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).
fuente