Cita de Wikipedia del artículo "Lenguaje de programación de alto nivel":
Un lenguaje de programación de alto nivel es un lenguaje de programación con una fuerte abstracción de los detalles de la computadora. En comparación con los lenguajes de programación de bajo nivel, puede usar elementos de lenguaje natural, ser más fácil de usar o ser más portátil en todas las plataformas. Tales lenguajes ocultan los detalles de las operaciones de la CPU, como los modelos de acceso a la memoria y la administración del alcance.
Es decir, a medida que aumenta el nivel del lenguaje de programación, cuanto más se aleja el programador del hardware en el que se ejecuta el programa.
Ahora no conozco las estadísticas del uso del idioma en todos los niveles, pero sospecho que los idiomas de nivel superior reemplazan cada vez más a los idiomas de nivel inferior. Si es así, ¿puede esto conducir a un déficit de programadores con conocimientos de arquitectura de computadoras? ¿Sería esto un problema para la industria?
Creo que sí. Es una tendencia que me tiene preocupado. Ninguna abstracción es perfecta ; Si hubiera una manera perfecta de simplificar cualquier problema complejo, reemplazaría el original muy rápidamente. (Eso sucedió en el pasado, ocasionalmente con computadoras, y con mucha más frecuencia en otros campos que no se preocupan tanto por la compatibilidad con versiones anteriores como nosotros, como la física).
Lo que esto significa es que cada vez que usa una abstracción, hay una pieza importante de complejidad esencial que se le oculta. Si no sabes qué es eso, por qué está allí y qué está haciendo, terminas accidentalmente escribiendo grandes restos de trenes y sin saber cómo solucionarlos porque no sabes lo que realmente está sucediendo.
Cualquiera que intente decirte lo contrario está vendiendo aceite de serpiente o simplemente no tiene mucha experiencia con un software serio. En el trabajo, trabajo en un programa que ejecuta un buen porcentaje de todas las estaciones de TV y radio en los Estados Unidos. A medida que las estaciones y las redes se hacen más grandes y complejas, las técnicas rápidas y sucias que funcionaron bien para diseñar un producto para una estación pequeña terminan golpeando grandes paredes técnicas cuando se implementan para una red con 50 estaciones y 200 canales. Sin una comprensión profunda de cómo funciona el lenguaje (y un lenguaje eficiente en primer lugar) y una comprensión profunda de cómo funciona la base de datos, nuestros codificadores nunca habrían podido hacer que el producto escalara con éxito.
Esta tampoco es una historia aislada. El software continúa creciendo más y más complejo, no más simple, y me temo que este nivel de experiencia técnica se convertirá en una especie de arte perdido, y los programas de mañana serán peores que los de hoy, no mejores.
fuente
javascript:alert("Hello world")
requiere un doctorado en teoría de cuerdas.Sí, creo que la gente entenderá el hardware mucho menos a medida que progresen los idiomas (y, de manera similar, a medida que avance la instrucción). Pero como se ha observado en muchos otros lugares, la restricción principal en la mayoría de los programas hoy en día no es el tiempo o la eficiencia de la CPU, sino el tiempo del programador. Si las personas que diseñan idiomas siguen haciendo su trabajo para hacer que la abstracción sea eficiente, y si las personas siguen usando estas abstracciones correctamente, entonces no es del todo necesario comprender la arquitectura de la computadora; Al menos un conocimiento completo no es fundamental para ser un buen programador en estos días.
fuente
No, no conducirá a un déficit de programadores con conocimientos de arquitectura informática. Los idiomas se utilizan para resolver problemas en un dominio particular. Si desea resolver un problema en particular, utilice el lenguaje apropiado o uno suficientemente bueno dados sus recursos.
En realidad, ¿qué dominios realmente necesitan conocimiento de la arquitectura de la computadora? ¿Eso debe estar vinculado a una arquitectura de hardware en particular? ¿Sistemas operativos? ¿Controladores de dispositivo? Claro, pero incluso entonces solo partes de dicho código necesitan conocimientos arquitectónicos específicos.
¿Mejora del rendimiento? Sí, puede aplicar el conocimiento de la arquitectura de la computadora para mejorar el rendimiento de los algoritmos. Pero otros dos factores tienen un mayor impacto en el rendimiento: el uso de mejores algoritmos y el conocimiento del entorno de tiempo de ejecución del lenguaje.
En esencia, los lenguajes de programación más abstractos resuelven problemas para los que no se necesitan detalles de la arquitectura de la computadora. Permiten resolver más problemas. Las personas que los usan no los usan para resolver problemas dependientes de la máquina. Las personas que necesiten resolver problemas dependientes de la máquina continuarán usando lenguajes con capacidad de máquina. Este no es un problema de suma cero.
fuente