it-swarm-es.com

¿Puede un mayor uso de lenguajes de programación cada vez más altos conducir a un déficit de los programadores con conocimientos de arquitectura de computadoras?

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 entre plataformas. Dichos lenguajes ocultan los detalles de las operaciones de la CPU, como los modelos de acceso a la memoria y la gestión del alcance.

Es decir, a medida que aumenta el nivel de lenguaje de programación, más se aleja el programador del hardware en el que se ejecuta el programa.

Ahora no conozco las estadísticas de usos del lenguaje en todos los niveles, pero sospecho que los idiomas de nivel superior están reemplazando 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?

15
gablin

Puede, pero probablemente no dará lugar a ningún problema.

Es solo economía. Si la gran mayoría de las personas pierden la capacidad de comprender la arquitectura subyacente, y todavía existe una gran NECESIDAD de comprender la arquitectura subyacente, los que lo hagan tendrán trabajos y recibirán más dinero, mientras que los que no lo hagan solo tendrán trabajos donde eso no es necesario (y es posible que todavía se les pague más ... ¿quién sabe?).

¿Es útil saberlo? Absolutamente. Probablemente estará mejor. ¿Es necesario en la mayoría de los casos? No. Por eso la abstracción es tan grandiosa, nos apoyamos en los hombros de gigantes sin tener que ser gigantes (pero siempre habrá gigantes alrededor).

16
Ryan Hayes

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 las 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á ahí y qué está haciendo, terminas escribiendo accidentalmente grandes accidentes de tren y sin saber cómo arreglarlos porque no sabes qué es realmente va.

Cualquiera que intente decirle lo contrario está vendiendo aceite de serpiente o simplemente no tiene mucha experiencia con software serio. En el trabajo, trabajo en un programa que transmite un buen porcentaje de todas las estaciones de radio y televisión de 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 barreras 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 hubieran podido hacer que el producto escale con éxito.

Esta tampoco es una historia aislada. El software continúa haciéndose cada vez más complejo, no más simple, y me temo que este nivel de experiencia técnica se convertirá en algo así como un arte perdido, y los programas del mañana serán peores que los de hoy, no mejores.

9
Mason Wheeler

Sí, creo que la gente entenderá mucho menos el hardware a medida que avanzan los idiomas (y, de manera similar, a medida que avanzan los conjuntos de instrucciones). Pero como se ha señalado en muchos otros lugares, la principal limitación de la mayoría de los programas en la actualidad no es el tiempo o la eficiencia de la CPU, sino el tiempo del programador. Si las personas que diseñan lenguajes 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 estos dias.

5
David Hollman

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 en 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 necesita estar ligado 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 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 están usando para resolver problemas que dependen de la máquina. Las personas que necesitan resolver problemas dependientes de la máquina seguirán utilizando lenguajes con capacidad para máquinas. Este no es un problema de suma cero.

1
Huperniketes