¿Debería un desarrollador conocer el funcionamiento interno del hardware de las computadoras? [cerrado]

13

No estoy hablando solo de cómo se asigna la memoria y la administración de la memoria (cosas que puede aprender de C, por ejemplo), sino más bien el aspecto del hardware y cómo cada componente del hardware de la computadora funciona internamente y cómo se comunican entre sí.

¿Cuántos de ustedes saben todo esto?

Adrian
fuente

Respuestas:

31

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.

Greyfade
fuente
20
Conocer su máquina siempre lo convierte en un mejor desarrollador, incluso si solo hace aplicaciones de línea de negocio. Tal conocimiento puede no ser requerido, pero ciertamente es importante.
Robert Harvey
@Robert Harvey: Correcto, por eso digo "no necesito saber". Ciertamente no hace daño saber estas cosas de todos modos. :)
greyfade
2
+1, pero conozco (más que) algunos desarrolladores web que nunca consideran el uso de memoria.
Tim Post
-1 para "Si es un desarrollador de aplicaciones, no necesita saber nada de esto, excepto mantener el uso de la memoria a niveles razonables". Algunos de los problemas más grandes en los sistemas aquí son causados ​​por los diseñadores de aplicaciones que no saben cómo usar las bases de datos y luego culpan a los dba cuando "las cosas se están ejecutando lentamente, y no es mi código; mira, ahí está el perfil".
Andrew Hill
@ AndrewHill: ¿Cuándo es importante el hardware y no el algoritmo? La pregunta se trata de comprender el comportamiento del hardware de bajo nivel, no los algoritmos de alto nivel.
greyfade
12

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.

Michael K
fuente
6

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.

Pemdas
fuente
2

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.

mctylr
fuente
1

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.

David Thornley
fuente
0

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.

John Bode
fuente
0

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.

bestattendance
fuente
0

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.

George Marian
fuente
0

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.

Thomas Owens
fuente