Voy a ir en una dirección muy diferente a las otras respuestas.
Hace más de una década, el empresario Joel Spolsky advirtió sobre los peligros de enseñar programación usando Java.
El mensaje general de Spolsky es que para realmente “aprender” cómo programar, uno tiene que comprender conceptos fundamentales como punteros y recursividad. Si un estudiante no puede asimilar esos elementos esenciales, probablemente no sea posible convertirse en un programador verdaderamente competente.
Spolsky señala que “[p] ointers y recursividad requieren una cierta habilidad para razonar, pensar en abstracciones y, lo más importante, ver un problema en varios niveles de abstracción simultáneamente. Y por lo tanto, la capacidad de comprender los punteros y la recursión está directamente correlacionada con la capacidad de ser un gran programador “.
- Si estuviera escribiendo una biografía para una carrera, incluso ficticia, ¿qué categorías pondría en la plantilla para cubrirla tanto como sea posible?
- Me he vuelto cada vez más insensible, hasta el punto de que lucho por empatizar. ¿Cómo puedo revertir todo esto? Además, ¿qué pasó con la opción de detalles de la pregunta?
- Quiero convertirme en antropólogo forense, ¿puedo hacer una licenciatura en cualquier otra materia que no sea antropología?
- He enfrentado muchos problemas desde mi nacimiento a las 9:25 am el 01/04/1997 en Ahmedabad. ¿Cuáles son algunas predicciones para mi futuro?
- Entiendo qué es la gravedad, qué peso puede soportar la tierra en términos de personas y edificios, etc. ¿Puede la Tierra colapsar con un peso extra extremo?
Según Spolsky, nada sobre un plan de estudios basado en Java (y muchos de los otros lenguajes de alto nivel) realmente “elimina” a aquellos que no pueden lidiar con estos conceptos clave.
Su artículo realmente resonó conmigo.
Comencé mi carrera escribiendo ensamblador Intel 8080 y luego me gradué en un lenguaje de alto nivel: ensamblador x86. Eso es una broma: créanme cuando les digo que escribir un juego de “Space Invaders” en el ensamblador x86 para el Sanyo MBC550, que hice por diversión en los años ochenta, no es un paseo por el parque.
Uno de mis primeros trabajos, en serio, fue escribir un sistema operativo en tiempo real para un pequeño sistema embebido x86. Solo el ensamblador trabajaría para esto … y más tarde fue adoptado por IBM en algunas de sus plantas de fabricación.
Más tarde me gradué para escribir millones de líneas de código C y C ++ en tiempo real para productos de software retractilados (CellWorks de Brooks Automation y Alpha Five de Alpha Software).
Baste decir que el desarrollo del aprendizaje desde la CPU fue un gran generador de confianza. Conocía PIC (controladores de interrupción programables “, código fuente de BIOS, chips de temporización y controladores de dispositivo. Hay muy pocos misterios en la programación cuando creces de esta manera.
Por el contrario, un plan de estudios basado en Java (o C #, Python, PHP, Javascript, etc.) puede ser bueno para aprender algunos de los conceptos básicos de programación, conceptos orientados a objetos, inyección de dependencias, etc.
Pero la maquinaria real de la informática en sí misma seguirá siendo un misterio para aquellos desarrolladores que dependen de JVM, CLR o misteriosas DLL para ejecutar su código.
¿Qué pasaría si las clases de informática comenzaran enseñando lenguaje ensamblador?
Le enseñaría arquitectura de CPU, recursividad, conceptos en tiempo real como procesamiento de interrupción y mucho más. Además, los punteros están incluidos … ¡ gratis !
Si quieres convertirte en un verdadero programador de grado A, un Spolsky, un Adam Bosworth o Raymond Chen, etc., deberás haber conquistado una parte importante del ensamblaje.
No puedo pensar en un desarrollador superestrella que no tenga ese tipo de experiencia. Porque una vez que conoces los elementos internos reales, todo lo demás se convierte en una abstracción comprensible. Como dije, ¡es un gran generador de confianza saber lo que realmente está sucediendo dentro de su computadora portátil!