¿Qué tan buena idea crees que sería enseñar a la gente a ensamblar (alguna variante) como primer lenguaje de programación? Tomaría mucho más esfuerzo que aprender, por ejemplo, Java o Python, pero uno tendría una buena comprensión de la máquina más o menos desde el "primer día de programación" (en comparación con muchos lenguajes de nivel superior, al menos). ¿Qué piensas? ¿Es una idea realista, al menos para aquellos que están dispuestos a hacer un esfuerzo extra? ¿Ventajas y desventajas?
Nota: no soy profesor, solo curiosidad
Respuestas:
Sería difícil inspirar a un nuevo programador con código de ensamblaje. Un hola dinámico, el sitio web del usuario es mucho más genial con menos esfuerzo. No digo que las lecciones fundamentales sean las mismas, pero un curso introductorio tendrá un gran contenido inspirador, o de lo contrario no habrá un segundo curso.
Recuerdo que mis primeros cursos de programación se enseñaron en Scheme y me sentí frustrado porque no podía compilar fácilmente un archivo .exe y "ejecutar" mi programa (pensé que MS Visual Basic era el final de la programación). No fue hasta años después que realmente comprendí con qué herramienta poderosa había estado jugando. Creo que lo hubiera apreciado más y hubiera aprendido mejor esas lecciones si hubiera tenido alguna experiencia temprana en algo un poco más pragmático al principio.
fuente
Creo que es una idea terrible para los estudiantes de Ingeniería de Software y CS, y en general para cualquiera que esté más interesado en la programación que en la electrónica.
Se puede hacer, pero no significa que deba hacerse. En el pasado, la forma de hacer cosas realmente geniales con las computadoras domésticas era aprender primero el ensamblaje. Eso se debió a las primeras limitaciones de hardware: los lenguajes de nivel superior simplemente no eran lo suficientemente potentes y rápidos. Hoy en día, puedes hacer cosas mucho más geniales, en menos tiempo, con un lenguaje de nivel superior.
¿Qué suena más interesante, escribir un prototipo rápido para un juego simple y jugar con variaciones en un algoritmo, o luchar con registros y cosas de bajo nivel?
fuente
No creo que sea una idea terrible, pero ¿qué tan complejo programa les vas a dar a estos estudiantes? El montaje requiere mucho más trabajo. Puede estar bien comenzar con cosas muy básicas y luego moverlas a algo más fácil de trabajar, una vez que hayan recibido una apreciación por trabajar en el nivel inferior. Los estudiantes primerizos a veces tienen ideas en la cabeza, codificarán el próximo Halo, MS Office o AutoCAD o algo así, y cuando vean cuánto trabajo se dedica a un lenguaje ensamblador simple , podrían asustarse, así que aclare que hay mejores cosas que ensamblar y luego moverlas a eso una vez que hayan visto los conceptos. También podría intentar enseñar ensamblaje por concurrencia con algo más como C.
Además, ¿qué lenguaje ensamblador? De alguna manera recuerdo que MIPS era relativamente fácil de trabajar, y creo que se ejecuta en un emulador, por lo que no hay peligro de causar problemas a la máquina real , aunque ahora puede haber mejores herramientas que esa.
Esto podría funcionar bien, si se hace bien. Sólo sé cuidadoso...
fuente
La asamblea fue el primer idioma que aprendimos en la escuela de electrónica (en la década de 1900) y parecía una elección natural. Nos abrimos paso a través de nuestros cursos desde componentes discretos, hasta lógica de resistencia-transistor, puertas lógicas, circuitos integrados, procesadores y hasta programación en ensamblaje. Muchos de los estudiantes en estas clases nunca antes habían programado en ningún idioma y lo aprendieron de inmediato.
Por lo tanto, la asamblea puede ser una buena opción para un primer idioma si se establecen las bases adecuadas para el estudiante. Sin embargo, para cualquiera cuyo objetivo sea ser un desarrollador de aplicaciones o web, creo que el ensamblaje es probablemente un punto de partida de muy bajo nivel.
fuente
Una cosa es segura, si las personas, aprendiendo primero la Asamblea, lo logran, serán programadores increíbles.
Esto me recuerda cuando aprendí a conducir. Mi madre insistió
El razonamiento es que no quería que me distrajera con más de lo que necesitaba, todo de una vez.
Aplique eso a aprender a programar, ¿es necesario arrojar todo sobre un alumno de una vez? Aprenden qué es una variable al mismo tiempo que aprenden cuántos datos pueden almacenar en qué tipo de registro.
Más de la mitad de mi clase reprobó nuestra clase de asamblea, y este era un grupo de personas que, en ese momento, se consideraban conocedores de la programación durante más de 2 años.
Mi preferencia personal, si tuviera que aprender todo de nuevo, sería comenzar con un idioma que haga todo lo posible por mí. Luego, a medida que aprendo, retroceda hacia los idiomas de nivel inferior.
fuente
No
¿Por qué es eso ventajoso? ¿Puede proporcionar un ejemplo o una pista sobre cómo esto podría tener algún valor?
Ventajas: ninguna.
Desventajas
Un montón de curiosidades aleatorias sobre banderas y estados y registros y esquemas complejos de direccionamiento de memoria y dispositivos de E / S y DMA e interrupciones y ciclos de reloj y demás. Ninguno de los cuales ayuda a comprender los lenguajes y la informática modernos basados en VM.
Una desconexión de la resolución de problemas real a la que se aplican realmente las computadoras.
Un divorcio de los usuarios finales y los datos prácticos y los problemas de procesamiento que necesitan resolver.
Una serie innecesaria de explicaciones de la máquina y la máquina virtual y el compilador e intérprete y toda la pila de tortugas que sostienen el mundo.
Una gran cantidad de "esta es la implementación física de un 'objeto'" en el lenguaje de nivel superior al que finalmente llegan.
Una gran cantidad de "así es como se distribuyen las funciones del método" en el lenguaje de nivel superior al que eventualmente llegan.
Muchas de las explicaciones de "esto no se aplica a 80386 pero sí a 80586 chipset".
Muchas llamadas de API de sistema operativo de bajo nivel para hacer que un programa ASM haga algo que parezca ser útil para alguien.
El objetivo de un primer lenguaje de programación no es dominar el conjunto de chips.
El objetivo de un primer lenguaje de programación es
Comprende cómo pensar en informática.
Comprenda cómo hacer un procesamiento de datos útil.
Comprende cómo hacer algo. Diseño - código - prueba.
fuente
Si me encargaran diseñar un plan de estudios, tendría dos cursos en ejecución al mismo tiempo el primer semestre: asm + organización / arquitectura básica de computadoras, y un curso basado en SICP fundado en Scheme. El segundo semestre estaría orientado a estructuras de datos y algoritmos elementales en Scheme.
El segundo año sería un proyecto de un año de duración utilizando uno de Delphi, C ++ o C #, centrado en el diseño de software moderno (diseño OO, diseño funcional, ingeniería de software, control de versiones, etc.).
El efecto debería ser dar una base intensa tanto en lo abstracto como en lo práctico, conduciendo a cursos en profundidad en el tercer y cuarto año.
fuente
Solía asistir a clases introductorias de informática, y creo que es una mala idea.
Dicho esto, creo que el hardware de ensamblaje / computadora debería ser una clase muy temprana, idealmente, el primer trimestre de la carrera. Haga que los estudiantes obtengan un lenguaje de alto nivel debajo de sus cinturones, luego salte a las cosas de hardware de bajo nivel de inmediato antes de pasar a las estructuras de datos, idealmente en un lenguaje que requiera el manejo de la memoria.
fuente
La asamblea fue mi segundo idioma, justo después de BASIC. Sin embargo, cuando estaba aprendiendo era un momento diferente. Mi Commodore 64 tenía otros idiomas disponibles, pero si quería que algo pareciera rápido, o deseaba hacer más de una cosa a la vez, tenía que aprender el lenguaje ensamblador y cómo trabajar con las interrupciones. El sistema operativo de entorno gráfico (GEOS) que le dio al Commodore un sistema de ventanas también fue todo ensamblado. En general, fue la mejor API de ensamblaje que he visto. También fue la única plataforma que utilicé donde puedes diseñar tu código. Así es, podría usar cursiva y diferentes tamaños de fuente, algo que resultó útil para leer los comentarios.
Aprendí mucho sobre cómo funcionaba el Commodore, pero el chip Motorolla tenía un conjunto de códigos de operación muy simple. No es demasiado difícil mantener menos de 255 códigos de operación separados entre sí. Yo era no poder valerse de mi experiencia en el chip de 6510 Motorolla a la programación para el Intel 8086. Las patatas fritas y arquitecturas de sistemas eran demasiado diferentes. Me imagino que también habría tenido los mismos problemas para pasar al chip Amiga's Motorolla 68000.
En resumen, tengo que estar totalmente en desacuerdo con cualquiera que diga que la Asamblea debería ser un buen primer idioma. Este es el por qué:
En estos días, el lenguaje ensamblador se usa para acelerar ciertas acciones finitas donde el ensamblaje hecho a mano sería más rápido que el ensamblado generado por el compilador. La estructura principal de la aplicación se realiza en un lenguaje de nivel superior como C, C ++, etc. Por supuesto, la programación de ensamblaje sería muy importante si comienza a escribir compiladores. ¿Cuántos de nosotros hacemos eso?
fuente
Tomé asamblea en mi último año de secundaria. Ya había tomado clases en Java, Pascal, C y C ++, y no era competente en ninguna de ellas y realmente apestaba en la Asamblea: era la única persona que tomaba la clase en un programa de aprendizaje a distancia en el colegio comunitario, me llevó uno o dos meses antes de que alguien pudiera hacer que el compilador funcionara para mí.
No creo que sea necesario o inteligente aprender primero el lenguaje ensamblador, pero es inteligente aprender lo que le enseñan en las primeras semanas de ensamblaje, sobre cómo funciona el procesador y algunos de los trucos de depuración. Esas cosas me parecieron muy interesantes e ilustrativas como neófito.
fuente
No veo por qué no se pudo hacer, aunque lo buena idea que es depende totalmente de la multitud que le enseñarías también. Alguien cuyo objetivo final es ser un desarrollador web probablemente se aburriría y podría dejar de fumar, ya que no les daría la satisfacción inmediata de crear algo que Python, Ruby, etc. Si desean eventualmente trabajar en hardware u otros proyectos de bajo nivel, entonces creo que sería un buen comienzo (siempre que proporcione suficiente experiencia en arquitectura de computadoras para que tenga sentido). Creo que podría ayudar a las personas a escribir un mejor código en el futuro, aunque creo que sería más difícil comenzar a aprender otros idiomas.
fuente
Creo que el lenguaje ensamblador solo tendrá sentido si te enfocas en cosas como:
Sin un enfoque en esta área, es solo un lenguaje simplista que tenderá a enseñar malos hábitos de organización. Es bueno tener una codificación a nivel de máquina en el kit de herramientas para saber cómo funcionan las cosas, pero no es un buen primer idioma.
Me interesaría alguien en un lenguaje de nivel superior. Luego enseñe C ++; luego ensamble con un enfoque en cómo los compiladores de C ++ generan código de ensamblaje. La comprensión de las tablas v y otras características de lenguaje de nivel superior ayudarán al desarrollador a pensar en cómo funcionan realmente los idiomas, en lugar de simplemente archivar la información bajo 'magia'.
fuente