¿Por qué no querrías enseñar un lenguaje ensamblador infantil de 8-9 años para su primer lenguaje de programación?

Siempre me pregunto con estas preguntas si estamos hablando o no de un niño que se está muriendo a los 8 años para programar, o estamos hablando de un padre que nunca salió a jugar, y lo único que saben es enseñar a su hijo es cómo depurar controladores de dispositivos 🙂 Me gustaría pensar que las pequeñas ligas, volar una cometa o las lecciones de piano también son buenas cosas para presentar a un niño; así que asegúrese de que su hijo (no usted) realmente quiera estar sentado frente a un teclado mirando números hexadecimales durante toda la noche, eso es lo primero y lo más importante a considerar aquí. Entonces, en primer lugar, el niño podría estar mejor solo siendo un niño y aprendiendo más sobre el mundo fuera de su puerta de entrada.

Incluso si hay una aptitud presente en el niño, hay mucho tiempo en la vida posterior para aprender a ensamblar, suponiendo que incluso la necesiten. Y esa es una gran suposición, porque, según lo veo, ya no es una habilidad de programación convencional (y no lo ha sido desde que C salió en la década de 1980). Entonces, el segundo problema, es solo tiempo perdido en estos días de abstracciones y lenguajes de programación de alto nivel, que son mucho más frecuentes (y relevantes).

Entonces, suponiendo que el niño realmente esté haciendo preguntas como “cómo se implementa C” o “cuál es la interfaz entre mi programa y el hardware”, y esto necesita ser respondido mirando las cosas a nivel ASM, entonces creo que podría sería mejor comenzar con algunos programas C simples, cuya lógica se entiende mucho más fácilmente, y luego tal vez mostrarles la salida ASM correspondiente del compilador, o dejar que miren los registros y el desensamblaje en un depurador al pasar por el C código. Creo que es una mejor manera de comprender 1) la relación entre el código que la mayoría de la gente escribe, y la máquina y 2) ayudará al niño a apreciar lo que proporcionan los lenguajes de alto nivel.

Comenzar con ASM como lenguaje de programación parece una locura, es bastante difícil para una gran cantidad de adultos, y mucho menos para un niño de 9 años, y puede que ni siquiera les importe, es posible que tengas un desarrollador PHP incipiente cuando eras niño (lo siento, podría suceder :-), y todo lo que vas a terminar haciendo es que tu hijo odie las computadoras o piense que no van a ser buenas como programador porque ASM fue una crisis mental para ellos. Entonces, el tercer problema: solo vas a ahuyentar al niño de la programación.

Esta es una pregunta tan extraña. Aquí en 2010, de ninguna manera (en mi humilde opinión) es la elección correcta como lenguaje introductorio para un niño de 8-9 años. En parte porque hay formas más simples de presentar a los niños las computadoras hoy en día, principalmente porque los niños de esta edad que saben de computadoras no estarían entusiasmados con la cantidad de trabajo que tiene que hacer con el ensamblaje para realizar algo interesante, algo interesante como los muchos juegos, la web. sitios, etc., a los que ya tienen acceso, desearían poder lograr rápidamente para mantenerse interesados.
Mi primer idioma fue BASIC, mi segundo fue ensamblado (6502), ¡pero esto fue 1978 o algo así! y los programas muy simples para hacer y responder preguntas o dibujar gráficos simples eran para lo que se podía usar una TI99 / 4A o Apple II en ese momento, por lo que pude escribir rápidamente programas similares a los ejemplos en los manuales de la computadora o las revistas que teníamos .
Mi hijo acaba de cumplir 10. Ha estado usando Scratch ( http://scratch.mit.edu ) durante algunos años, y es una excelente introducción a la lógica, el control de flujo y las variables, creo que mejor que el antiguo LOGO. Está aprendiendo HTML y Javascript y estamos trabajando en una aplicación para iPhone en Objective-C usando conceptos Scratch (aunque muchas cosas están muy por encima de su cabeza). Ya no pasa tanto tiempo programando como solía hacerlo 🙂

No estoy de acuerdo con la mayoría de las personas que dicen que los niños ganarían más si primero aprendieran un lenguaje de programación de alto nivel como Python o Ruby, pero sigan mi consejo con un grano de sal, realmente depende de los niños y la familia involucrada.

Si eras un niño o adolescente en los años 80, recordarás que no era raro tener kits de hardware Z80 y otras cosas alrededor. Si le gustaran tales cosas, podría estudiar y desmontar los circuitos, aprender cómo funcionaba el hardware de bajo nivel y cómo hacer que hiciera cosas útiles.

Incluso la supercomputadora más sofisticada hoy en día todavía usa el mismo paradigma. Las máquinas de Von Neumann están en todas partes, y los lenguajes de programación más comunes son Turing completos con raíces Fortran. Cada computadora tiene una CPU, conjuntos de instrucciones básicas, registros, pilas.

A veces parece que los programadores jóvenes de hoy no tienen idea de qué son todos estos. Es realmente una pena. La “ciencia” informática está muriendo lentamente. Cuando se introduce a alguien a la computación a través de abstracciones de alto nivel, creo que tendrán más barreras para bajar a construcciones de nivel inferior (el tipo típico de Java tiene que ver el código C); mientras que si comenzaste desde los conceptos básicos de bajo nivel, comprender las construcciones de alto nivel es pan comido.

¿Entonces por qué no? Comience a los niños con hardware de bajo nivel, quizás simples, cuanto más cerca de los mecanismos subyacentes, mejor, luego acérquese a un nivel más alto en abstracciones paso a paso.

Si un adolescente puede entender cómo hacer aritmética con construcciones de bajo nivel como flip-flops, ciertamente tendremos mejores programadores en el futuro.