Aporto un punto de vista semi-único a este problema, creo, debido a las siguientes razones:
- Como tutor, enseño a personas que simplemente no obtienen programación, ya sea por falta de interés o por un estilo de aprendizaje que no se alinea con los métodos de enseñanza actuales.
- Como tengo problemas de aprendizaje, el sistema educativo me rechazó, lo que me consideró incapaz de comprender algo tan complejo como la programación, aunque aprendí a programar antes de aprender a leer debido a los mismos problemas de LD.
Me pregunto si los “niños” menores de 10 u 11 años deberían aprender a codificar y, de la misma manera, si la programación debería ser necesaria en el nivel K – 12. Discutiré estos dos temas al final de mi respuesta, que se centrará en cómo enseñar a los alumnos “lentos” mayores de 11 años. A continuación se presentan algunas razones por las cuales a muchas personas les resulta difícil aprender a programar:
- Bloques mentales sobre qué es la programación, qué no es y los requisitos previos para la programación
- Demasiada automatización de algunas materias académicas (p. Ej., Uso de una calculadora para hacer matemáticas) y poco énfasis en el pensamiento crítico riguroso.
- La creencia errónea de que aprender “cómo programar” es un reemplazo para las 3 R y la alfabetización informática básica (saber cómo, cuándo y por qué usar computadoras y para qué)
- Confundir datos en bruto para obtener información
- Falta de vincular la abstracción de la programación con la vida real
Muchos creen erróneamente que debido a que las computadoras piensan en números en los niveles más bajos, la programación requiere matemáticas, aunque la mayoría de las tareas de codificación de nivel de entrada no requieren matemáticas.
La informática hardcore está realmente orientada a las matemáticas. Pero al escribir un programa para consultar o actualizar la base de datos de Quora, por ejemplo, las matemáticas no tienen casi nada que ver con eso.
- ¿Qué GCSE debo elegir si deseo estudiar física teórica en la Universidad de Cambridge?
- ¿Cómo fue ser educado en casa durante la secundaria?
- ¿Se requiere que los niños griegos memoricen el mapa de su país?
- ¿Es la programación una buena habilidad para aprender para aquellos interesados en la ley o la política?
- ¿Es cierto que los estudiantes con un programa de doble titulación en BITS Pilani no pueden disfrutar de la vida en el campus y pasar casi todo su tiempo estudiando (debido a la carga de trabajo)?
La programación requiere el tipo de pensamiento lógico que se encuentra en las matemáticas, pero no las matemáticas en sí. A nivel universitario, es completamente incorrecto decir que la programación requiere cálculo, cuando de hecho el cálculo se usa solo en “cálculo de números” (computación científica) y gráficos. Vea la respuesta de Marcas Neal a ¿Cuál es la forma más rápida para que un estudiante de informática moleste a un programador / ingeniero de software que trabaja?
Todo lo que se necesita para ser un programador es pre-álgebra, es decir, la comprensión de fórmulas simbólicas. Esta es la razón principal por la que digo que la mayoría de la gente no está lista para ser programadora antes de los 10 u 11 años. Incluso aquí, la idea esencial es que puede usar símbolos para representar valores concretos.
Uno de los problemas a los que me enfrento a menudo al dar clases a estudiantes universitarios, específicamente en los niveles de segundo / tercer nivel de cuatro años y en colegios comunitarios, es el conocimiento general de matemáticas que es suficiente para la aritmética, pero insuficiente para comprender realmente cómo funciona la matemática.
En los niveles superiores, la racionalización de algunas matemáticas de la escuela secundaria causa problemas. Por ejemplo, enseñé a alguien que aprobó AP Computer Science en x86 Assembly pero, sin embargo, no pudo convertir decimal a hexadecimal y luego a binario.
Después de 15 minutos de intentar todos los métodos de enseñanza que conocía, descubrí que el estudiante no tenía el concepto de los restos de una división larga. El estudiante nunca había hecho la división a mano, sino solo en una calculadora.
Debido a que el estudiante no tenía idea de que el dígito para cualquier posición dada era el módulo (resto) después de dividir el número decimal por 16 (o cualquier base a la que se esté convirtiendo), tuve que pasar los siguientes 15 minutos enseñando la habilidad de largo división a mano.
Otro problema común es un esfuerzo por incluir el cálculo en el plan de estudios de la escuela secundaria. Esta es una mala idea, en mi humilde opinión. Se han descartado conceptos importantes de otras clases, como descartar geometría basada en pruebas en favor de clases que enseñan los resultados de las pruebas, pero no las pruebas en sí mismas.
Si bien las pruebas en sí mismas no son tan importantes, el riguroso pensamiento lógico que requieren es la piedra angular de la programación y es, quizás, la lección individual más importante para toda la vida que la programación tiene que enseñar.
Otro problema con la enseñanza de la programación aislada es la idea errónea de que construir un programa para ejecutar alguna tarea es el fin de todo, cuando saber cómo y cuándo debe automatizar es más importante.
Por ejemplo, un énfasis excesivo en los algoritmos de enseñanza puede ocultar el problema de para qué sirven los algoritmos y cuándo.
Por esta razón, lo principal que debemos enseñar en todos los niveles de grado es cómo pensar sobre el mundo: cómo buscar patrones. También es muy importante: pensamiento crítico sobre qué puede y debe automatizarse versus qué no puede y no debe automatizarse.
Esta es la razón por la cual la mayoría de las instrucciones de programación no deben realizarse frente a un teclado o incluso con una computadora a la vista. En cambio, deberíamos enseñar a los estudiantes a buscar patrones comunes en el mundo real, y una vez que decidan que estos patrones son “fáciles” de automatizar, deberíamos enseñarles cómo traducir ese patrón en un algoritmo.
Codificar ese algoritmo es relativamente fácil; Es el algoritmo el que es más difícil de entender.
Ayude a los estudiantes a mirar las cosas que les interesan desde un ángulo diferente. Si a él le encantan las Torres de Hanoi, algo que se puede traducir directamente en un algoritmo elegante, deje que su estudiante juegue con un modelo real de las Torres, utilizando 5 o 6 discos. Deje que el estudiante lo aborde con la solución que considere mejor.
Pídales a los alumnos que piensen por qué hacen cada movimiento, asignándoles la tarea de redactar un conjunto de reglas: una “hoja de trucos” para usar como referencia cuando intenten resolver el rompecabezas.
Si los estudiantes se quedan atascados, pregúnteles cómo resolver el problema con menos discos, hasta que puedan hacerlo mientras duermen. Luego reescalar. Estoy seguro de que propondrán alguna variante del algoritmo estándar.
Dígales a los estudiantes que investiguen cómo otras personas resolvieron el problema. Finalmente, pídales que escriban el código, mostrándoles que solo se trata de escribir y depurar en el último momento, ya que todo el trabajo duro ya se ha hecho. Vea la respuesta de Marcas Neal a ¿Cómo funciona el diseño de algoritmos?
Entonces, ¿por qué me pregunto si deberíamos enseñar programación, en lugar de enseñar a los estudiantes cómo ser usuarios avanzados?
No estamos a fines de la década de 1970, una era en la que había una grave falta de software. Ahora tenemos lo contrario: un exceso de software. No necesitamos 8 mil millones de programadores, especialmente teniendo en cuenta lo fácil que es usar la mayoría de las computadoras en este momento.
Necesitamos personas que puedan pensar críticamente sobre la informática.
El conocimiento del proceso subyacente de la programación ayuda, pero no es obligatorio. Aquí está lo fundamental para enseñar: hasta que llegue a la persona adecuada, específicamente en una forma en la que pueda actuar, los datos sin procesar son solo datos sin procesar. Entonces y solo entonces se convierte en información.