¿Por qué algunos programadores ignoran tanto la electrónica como la física?

Creo que porque hay un camino terriblemente largo hacia abajo, y cada vez es más largo.

Si enseña a las personas cómo animar cosas en sus navegadores web en el extremo superior, y ese voltaje de puerta suficiente forma un canal de inversión en la parte inferior, les será muy difícil conectar lo que uno tiene que hacer con el otro.

La sugerencia de comenzar la capacitación de programadores con una introducción rápida al funcionamiento de los transistores de efecto de campo no es mala, pero considere nuestra historia reciente: desde 1965 más o menos, el plan de estudios sobre lo que estamos haciendo con el presupuesto de transistores de un integrado El circuito se ha duplicado en el plazo de un solo título universitario. No tengo una descripción histórica completa para comparar, pero en cuanto al entrenamiento, apostaría a que este es el peor de los casos en movimiento en la historia humana, han sido 40 años de revolución sostenida.

Ante esto, dependemos de producir un número creciente de personas que sean capaces de aprovechar la maquinaria más compleja que existe, ya que seguimos creando nuevas áreas de aplicación. Si finalmente logramos hacer que todo suceda sin mayor sacrificio que hacer que una rama de la disciplina dependa de otra para una caja negra, creo que estamos en bastante buena forma, testimonio de un magnífico trabajo del hardware para ocultar su complejidad real. . El ideal de querer solo ingenieros completamente consumados con una visión general completa es muy completo, pero si significa tener un total de veintitrés desarrolladores de software excepcionales que todos puedan compartir en todo el mundo, imagino que podría surgir algún tipo de crisis. Podemos admirar a personas así, pero el resto de nosotros también somos personas.

Se podría decir que un mayor énfasis en el lado físico no es lo mismo que exigir todo , pero luego se evapora en una discusión sobre las áreas grises y la importancia relativa que se está explorando en muchas variaciones en diferentes lugares. No creo que hicieras una llamada para dar más detalles al respecto.

En este contexto, respondería que probablemente se deba a que muchos programadores no tienen que saber para hacer un trabajo útil, y que los beneficios de exigirlo de todos modos no justifican los sacrificios necesarios para que esto suceda. Por ahora, en cualquier caso, secretamente temo que podamos ver el listón elevado nuevamente en tiempos interesantes no muy lejanos (pero eso es solo una estimación de la bola de cristal, que no está particularmente bien fundada, ni aborda la pregunta en cuestión).

Muchos programadores están capacitados para escribir software a través de un programa de tecnología en lugar de a través de un título universitario de ingeniería o ciencias de la computación que requiere conocimientos de física, matemáticas y hardware. Mi clase de electrónica era una optativa opcional.

Muchas empresas tienen dificultades para encontrar programadores capacitados, así que cuando trabajé en Boeing, teníamos un historiador, un físico, personas como mi esposo, que era economista, que tenían funciones informáticas y trabajos para desarrollar o mantener el código. Boeing pagó para volver a capacitar a las personas en otras carreras a través de nuevas escuelas de tecnología porque las escuelas tradicionales no podían satisfacer la demanda. Uno de los tipos con los que trabajé manejó documentos en el mismo proyecto donde trabajé pero no cómo programar, no le gustó su salario, su estado o el conjunto cambiante de requisitos con los que tuvo que lidiar para obtener su grado de computación y se sintió resentido porque pensó que él
Tenía el mismo trabajo que yo. Pero, en general, a todos nos pagaron y en su mayoría tuvimos la misma retención, beneficios y carga de trabajo . Sin embargo, las oportunidades de avance eran más limitadas sin el título.

La informática es un campo relativamente nuevo en el ámbito de la educación y descubrí:
1) poco respeto por parte de las personas que trabajaron en este campo por parte de los empresarios
2) no hay camino aprobado para convertirse en maestro en la escuela secundaria (todos los otros títulos tenían uno)
3) confusión entre las personas que encienden las computadoras y las configuran y alguien que diseña y desarrolla software
4) principios de diseño inconsistentes: en ingeniería, los ingenieros principales a menudo inspeccionan los diseños y trabajan para cumplir con los estándares y vi lo difícil que era hacer cumplir estándares similares en informática.
5) La certificación informática de Microsoft complicó los asuntos (no por ser ineficaz) sino al agregar una nueva capa de base de conocimiento informático que no incluía un título de BS, enseñó cosas diferentes que los otros programas de tecnología e hizo que las prácticas de contratación fueran incomprensibles para la mayoría departamentos porque no tenían idea de qué hacían las personas informáticas para ganarse la vida y qué persona debían contratar.
6) Las personas que trabajan en informática deben reeducarse con más frecuencia de lo que Microsoft cambia el sistema operativo

La cantidad de conocimiento requerida para comprender la totalidad del hardware y el software de una aplicación moderna probablemente esté más allá de lo que una sola persona puede dominar en la vida. El trabajo fundamental de un ingeniero es hacer compensaciones, y parte de eso es comprender lo suficiente como para tomar las decisiones de las que es responsable, y no terminar investigando patrones dobles autoalineados para descubrir cómo animar una imagen de una cara sonriente en un navegador web.

Solo para darle una idea de lo abrumador que sería hacer lo que propone, considere todas las tecnologías involucradas en la ejecución de una aplicación web Java respaldada por una base de datos en mi computadora portátil, no exactamente la altura de la tecnología, sino que requiere software y hardware razonablemente modernos .

Aquí hay una lista incompleta: HTML, XML, HTTP, Javascript, Java, TCP / IP, Ethernet Gigabit, 802.11n, la red de cable, ATM (probablemente), compiladores, intérpretes, compiladores JIT, JVM, recolección de basura, MacOS X, Objetivo C, C, DRAM moderna, unidades de disco duro, RAID, SQL, MySQL, equilibrio de carga, diseño de aplicaciones web, diseño de PCB, diseño de IC, CMOS FET, doble patrón, interconexión de cobre.

Hay varios campos de investigación en los que las personas pasan toda su vida en esa lista. Tengo 38 años y he estado trabajando y jugando en software y hardware desde que tenía 8 años y sé lo suficiente como para saber que cada elemento tiene su propia literatura de investigación, herramientas de software y especialistas que tomarían varios meses de concierto. esfuerzo para enfrentarme si fuera necesario.

Existe una gran brecha entre las culturas de hardware y software.

Cuando era niño, era todo sobre hardware. Hice circuitos digitales desde relés telefónicos y bombillas de neón con diodos, resistencias y condensadores. Más tarde, cuando pude pagarlo, me metí en la serie de chips HEP, luego en el 7400 (que se puso realmente caliente antes de la serie LS).

Me llevó un par de años asimilar el software. Hablé con mucha gente sobre esto, y me pareció que había una división masiva entre hardware y software. Logré cruzarlo, aunque principalmente de mis propios dispositivos.

No estoy seguro de por qué ocurre la división, pero después de décadas, miraré hacia atrás y lo intentaré. Cuando se trata de hardware, se trata de retrasos en la propagación y despliegues, problemas técnicos y resonancias. Intenta obtener algo que se calme en un período de tiempo razonable. Considere hacer un sumador de varios bits de sumadores completos. Te preocupa la velocidad de las puertas y los cables, pero cuando hace el trabajo de manera confiable en una unidad de tiempo, ya terminaste. Mientras que, para el software, ese es el comienzo, y uno tiene que lidiar con un nivel de abstracción donde esas cosas detalladas no son importantes.

Porque no tienen que hacerlo, para ser buenos en lo que hacen.

Un buen programador necesita saber qué sucede una capa de abstracción hacia abajo. Los mejores programadores sabrán lo que está sucediendo, tal vez dos o tres capas hacia abajo.

Supongamos que escribe código para una aplicación web, sabiendo que las solicitudes HTTP serán suficientes para que usted sea bueno. Mejor si sabe optimizar E / S y tiempos de espera. Debajo de eso, no hay necesidad de que un programador hurgue a nivel de ensamblaje / instrucción, eso es para los programadores del núcleo.

Finalmente, no hay necesidad de reducirlo a ecuaciones de Maxwells en una escala electrónica a menos que esté diseñando chips.

Por la misma razón que tenemos ingenieros de materiales, ingenieros mecánicos, ingenieros eléctricos, etc. Las personas se especializan en diferentes partes de la pila, diferentes niveles de abstracción.

Entiendo, a nivel general, cómo funciona un procesador, por qué es mucho más lento extraer de la memoria que el caché de la CPU y mucho más lento aún extraer de un disco duro, y qué tiene usted. Pero yo no ingeniero esas cosas. No necesito conocerlos al nivel muy profundo que se requeriría de alguien que trabaja como ingeniero en esos campos.

Para cuando la computadora está en mi mano, esas cosas son un hecho. Si mi procesador se quema o el cabezal del HDD falla, voy a reemplazar ese componente. Mi trabajo es hacer que esas partes hagan cosas interesantes, como el sitio en el que estamos teniendo esta discusión en este momento.

Las personas que desarrollaron y mantienen Quora no necesitan saber, a nivel molecular, cómo funciona el equipo que enruta las solicitudes de Internet. Eso se abstrae y usan los estándares desarrollados (TCP / IP) para hacer que esas cosas hagan lo que necesitan hacer. Lo mismo es cierto para la gran mayoría de los desarrolladores.

Porque las personas tienden a especializarse.

Hay una enorme montaña de conocimiento en el mundo del software, y la mayoría de los ingenieros de software se centran en eso.

Cualquiera que use teléfonos móviles no necesita saber cómo está hecho. Esto es lo mismo para los ingenieros de software, usa su hardware para obtener beneficios y la parte de hardware ya está hecha para usted.

En una palabra, la respuesta es: abstracción.

En dos palabras, la respuesta es: abstracción, especialización.

“Un ingeniero debe manejar el lado lógico y físico de las cosas”. – No estamos en la era de la física newtoniana. Siga adelante. La informática es ciencia en sí misma.