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

15

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?

gablin
fuente

Respuestas:

16

Puede , pero probablemente no dará lugar a un problema.

Es solo economía. Si la gran mayoría de las personas pierde la capacidad de comprender la arquitectura subyacente, y todavía existe una gran NECESIDAD de comprender la arquitectura subyacente, los que sí lo hagan tendrán trabajo y recibirán más pagos, mientras que los que no lo hagan solo tendrán trabajos en los que no es necesario (y aún así se les puede pagar más ... ¿quién sabe?).

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

Ryan Hayes
fuente
44
Pero todas las abstracciones tienen fugas. Conocer la arquitectura subyacente es imprescindible si desea ser el tipo de referencia para solucionar problemas de abstracciones con fugas.
dsimcha
55
@dsimcha, de acuerdo, pero para ser el tipo al que necesitas ir, "los otros" van a ti ;-) Si todos necesitan saberlo todo, la abstracción ha fallado miserablemente.
Calles
1
@Preets, y es por eso que muchas abstracciones han fallado miserablemente. Incluso tener espacio para que exista un hombre al que recurrir es prueba de que una abstracción ya ha fallado.
Pacerier
@ Ryan, en realidad conducirá a un problema en el que en el futuro el mundo se verá inundado de aplicaciones llenas de errores sutiles debido a capas sobre capas de abstracciones con fugas. Es lo suficientemente sorprendente ahora que compañías como Google con recursos infinitos todavía pueden tener errores en sus aplicaciones principales.
Pacerier
3
@Pacerier google tiene recursos infinitos y hacen que las aplicaciones que son de varios órdenes de magnitud sean más complejas y que consisten en varios órdenes de magnitud más líneas de código que la mayoría de los demás. afirmar que todos deberían saber cosas de computadoras de bajo nivel porque todas las abstracciones pueden filtrarse es como decir que todos deberían saber cómo construir una casa desde cero sin usar herramientas porque una tormenta podría derrumbar su casa. simplemente no es factible (o inteligente) gastar recursos como ese.
sara
9

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.

Mason Wheeler
fuente
55
Lo escuché expresado como "necesitas conocer la abstracción una capa hacia abajo desde donde trabajas". Bueno, era bastante pithier; mi memoria es defectuosa Entonces, si está trabajando en C o Delphi, debe saber cómo funciona el ensamblaje. Si está trabajando en Smalltalk o Java, debe saber cómo funciona su VM. (¡Podría decirse que siempre debe saber algo sobre el ensamblaje!) Si está trabajando con TCP, debe saber cómo funciona IP. Y así.
Frank Shearar
1
Quiero decir, podrías llevarlo aún más lejos: ¿por qué debería ser suficiente solo conocer el ensamblaje? eso es solo una abstracción manual de alto nivel sobre las instrucciones binarias de la CPU. ¡pero espera! ¿codigo de maquina? eso es solo una abstracción! ¡necesita aprender cómo se construye la CPU usando transistores para construir puertas lógicas! y el bus y los registros. ¡pero espera! transistores? eso es solo una abstracción para una determinada configuración de átomos. y los átomos son solo una abstracción sobre las fluctuaciones en los campos cuánticos. Al final, esto solo javascript:alert("Hello world")requiere un doctorado en teoría de cuerdas.
sara
1
@kai Estás siendo un poco ridículo . Tiendo a estar de acuerdo con usted en que no suele ser el caso que necesite comprender varias capas hacia abajo para la mayoría de las aplicaciones. Pero estamos hablando de casos extremos, no todos los días. Claro, no necesita saber cómo funcionan las tuberías para lavar los platos. Pero si el agua sucia comienza a llenar su fregadero, probablemente debería aprender un poco antes de intentar arreglarlo. O bien, puede empujar una barra de refuerzo por el desagüe hasta que vuelva a funcionar, y a quién le importa dónde va el agua. (cont ...)
DrewJordan
1
@DrewJordan, mi punto es solo eso: a menos que sea un profesional que necesite conocer y solucionar una determinada clase de problemas (o simplemente tenga un gran interés privado), es francamente absurdo afirmar que necesita conocer el funcionamiento interno. y sutiles sutilezas de cada herramienta que estás usando. Simplemente dibujé el punto de vista a su conclusión lógica. Claro, saber cómo se construye un cable de Ethernet le permitiría construir uno nuevo, dadas las herramientas adecuadas cuando falla su conexión a Internet, pero gastar tiempo y dinero en obtener el conocimiento cuando trabaja 20 capas arriba es un desperdicio.
sara
1
@DrewJordan, por supuesto, ALGUIEN necesita saber todo esto para que alguien pueda solucionarlo cuando se rompe una abstracción, pero todo el PUNTO de abstracciones es mantener al mínimo el número de personas que necesitan conocer los detalles para que la gran mayoría pueda concentrarse en hacer las cosas. donde trazas arbitrariamente la línea de donde las cosas se ponen "demasiado bajo" solo depende de con qué trabajes personalmente, como se ilustra con mi argumento ad absurdium (¡lo cual no es una falacia, lo haré saber!)
sara
5

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.

David Hollman
fuente
2
En teoría, sí, pero esos son un par de ifs bastante grandes .
Mason Wheeler
1

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.

Huperniketes
fuente