Depende de lo que hagas.
Si es un desarrollador integrado (y está escribiendo muy cerca del metal en un dispositivo muy pequeño), necesita conocer cada componente del sistema.
Si es un desarrollador de sistemas (y está escribiendo sistemas operativos o controladores de dispositivos o tal vez incluso bases de datos), necesitará saber todo lo que hay que saber sobre las interfaces de hardware de bajo nivel.
Si es un desarrollador de juegos y está atrasado en su proyecto (donde está optimizando cosas), necesita conocer los entresijos de la caché de la CPU y las arquitecturas gráficas que usará.
Si es desarrollador de aplicaciones, no necesita saber nada de esto, excepto mantener el uso de la memoria a niveles razonables.
Si es un desarrollador web, es útil conocer los protocolos de Internet, pero ninguna de estas otras cosas es necesaria, excepto cómo lidiar con los problemas de memoria.
No, usted no tiene que, pero creo que es una excelente idea. Aprender una visión general de cómo funcionan las cosas a nivel lógico realmente me ha ayudado en el desarrollo.
fuente
Creo que los comentarios sobre desarrolladores de aplicaciones y desarrolladores web están equivocados.
Por ejemplo, si alguien está desarrollando una aplicación web que involucra muchas cosas de seguridad como ssh o algún otro algoritmo de cifrado, es bastante importante que sepan qué tipo de hardware están ejecutando para que puedan determinar si la máquina realmente puede manejar la carga de trabajo. Otro ejemplo podría incluir un servidor que aloja algún tipo de contenido descargado. Conocerá mejor las capacidades de la unidad de disco y cualquier tipo de interfaz de bus al que esté conectada si espera una cantidad razonablemente grande de solicitudes.
Desde el punto de vista de la aplicación, si está desarrollando algún tipo de programa CAD, o algo que hace renderizado en 3D, puede esperar que estas aplicaciones sean intensivas en cómputo tanto algorítmica como gráficamente. Sería prudente comprender el hardware para asegurarse de que la aplicación sea receptiva y utilizable.
No digo que tenga que ir tan lejos como para comprender los entresijos de algo como el protocolo PCI, pero comprende mejor de lo que es capaz la interfaz y el hardware.
En última instancia, es importante independientemente del tipo de desarrollo que realice. El nivel de detalle necesario para que usted entienda es discutible.
fuente
Para un programador profesional, lo veo como un enfoque holístico para comprender todo el sistema , en lugar de simplemente conocer la sintaxis de un lenguaje de programación dado del día . Creo que ayuda a los programadores (y analistas) a tomar decisiones de diseño inteligentes y a tomar decisiones más informadas sobre algoritmos y estructuras de datos.
En mi propia experiencia, los mejores programadores tienden a saber sobre el funcionamiento interno, en diversos grados, si eso es comprender la instrucción de ensamblaje nativa establecida para una plataforma objetivo, un curso introductorio de organización de computadoras en la escuela, electrónica digital rudimentaria o poder comprender detalles Descripciones de núcleos de CPU y GPU en los últimos modelos, los mejores tienen un conocimiento más completo que sus pares menos estelares.
fuente
No estoy seguro de si ayuda, pero me siento más cómodo cuando sé más sobre el sistema en el que estoy trabajando de lo que realmente necesito. Cuando era más joven, no me gustaba no saber el lenguaje ensamblador del sistema en el que estaba trabajando; o he cambiado, o he aprendido lo suficiente como para que uno más no va a expandir mucho mi sensación del sistema. Nunca he sido un gran experto en hardware, pero puedo desmontar una computadora y nombrar los diferentes subsistemas y cómo interactúan.
fuente
Lo poco que sé lo aprendí en una clase de arquitectura de computadoras hace casi 25 años, y en una arquitectura que no es del mundo real.
Principalmente hago programación de aplicaciones en una variedad de plataformas. Hubo un período en el que estaba desarrollando código para ejecutar no solo en hardware básico x86, sino también en Sparc, PA-RISC y otras arquitecturas de servidor. El conocimiento a ese nivel simplemente no es necesario para el trabajo que hago.
fuente
Enseño programación en Java como una clase de secundaria AP. Descubrí que cuando los estudiantes saben algo sobre el funcionamiento interno de una computadora, les ayuda a comprender los conceptos de programación.
No me excedo, solo los conceptos simples como cómo se almacenan las cosas en la memoria parecen ayudar a los estudiantes.
fuente
Voy a responder esto como se pregunta en el título:
Sí, un desarrollador debe conocer el funcionamiento interno del hardware. Cuánto depende del tipo de desarrollador y sus objetivos, el tiempo disponible y el interés personal. La prioridad debería, por supuesto, estar en las herramientas inmediatas, técnicas, etc., que emplean en su área. Esta opinión está en la línea de ser un individuo bien redondeado. Cuanto más sepa de las cosas fuera de su oficio, sin sacrificar su oficio, mejor.
Eso no significa que deba volverse loco con Cheese Whiz. Tenga una buena visión general del hardware, cómo interactúan las piezas, cómo los usan los sistemas operativos. En este sentido, sugiero leer un libro de conceptos de sistemas operativos para todos los desarrolladores.
¿Sé todo esto? Diablos no. He olvidado tanta información inútil sobre SCSI que ni siquiera es graciosa. Sin embargo, conocerlo fue una experiencia invaluable. También he olvidado muchos otros detalles relacionados con el hardware, pero recuerdo los conceptos importantes que aprendí de ese conocimiento.
Entonces, ciertamente sugiero aprender sobre el hardware. Hazlo a un ritmo razonable, dependiendo de tus necesidades. Aprenda tantos detalles como sea razonablemente posible, pero concéntrese en los conceptos.
fuente
Todo desarrollador debe conocer los conceptos básicos asociados con la ingeniería informática: aritmética binaria, conversión de bases, álgebra booleana, compuertas lógicas, composición de una CPU (y qué hacen los componentes), caché, memoria virtual, compresión, detección y corrección de errores ...
La medida en que estos deben conocerse depende del trabajo del programador. Como otros han dicho, un desarrollador de sistemas integrados debería estar mucho más familiarizado con las capacidades del hardware y cómo escribir el software que mejor utiliza el hardware que, por ejemplo, un desarrollador web.
fuente