¿Debe un desarrollador saber el funcionamiento interno del hardware de la computadora? [cerrado]

13

No estoy hablando solo de cómo se asigna la memoria y la administración de la memoria (cosas que puedes aprender de C, por ejemplo), sino del 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?

    
pregunta Adrian 29.12.2010 - 20:15

9 respuestas

31

Depende de lo que hagas.

Si eres un desarrollador integrado (y estás escribiendo muy cerca del metal en un dispositivo muy pequeño), debes conocer cada entrada y salida de cada componente del sistema.

Si eres un desarrollador de sistemas (y estás escribiendo sistemas operativos o controladores de dispositivos o tal vez incluso bases de datos), entonces necesitarás saber todo lo que hay que saber sobre interfaces de hardware de bajo nivel.

Si eres un desarrollador de juegos y estás al final de tu proyecto (donde estás optimizando cosas), debes conocer los entresijos de la arquitectura de memoria caché y gráficos de CPU que usarás.

Si eres un desarrollador de aplicaciones, no necesitas saber nada de esto, excepto mantener el uso de memoria en niveles razonables.

Si eres un desarrollador web, es útil conocer los protocolos de Internet, pero nada de esto es necesario, excepto cómo tratar los problemas de memoria.

    
respondido por el greyfade 29.12.2010 - 20:19
12

No, no tienes que hacerlo, pero creo que es una excelente idea. Aprender una visión general de cómo funcionan las cosas en el nivel lógico realmente me ha ayudado en el desarrollo.

    
respondido por el Michael K 29.12.2010 - 20:28
6

Creo que los comentarios sobre desarrolladores de aplicaciones y desarrolladores web son incorrectos.

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 muy importante que sepan en 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 aloje algún tipo de contenido descargado. Si conoce una gran cantidad de solicitudes, debe conocer mejor las capacidades de la unidad de disco y el tipo de interfaz de bus a la que esté conectada.

Desde el punto de vista de la aplicación, si está desarrollando algún tipo de programa de CAD, o algo que hace el renderizado en 3D, puede esperar que esta aplicación sea intensivamente computacional tanto de forma algorítmica como gráfica. Sería prudente entender el hardware para asegurarse de que la aplicación sea sensible y utilizable.

No estoy diciendo que tenga que ir tan lejos como para comprender los entresijos de algo como el protocolo PCI, pero debe comprender mejor de qué 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.

    
respondido por el Pemdas 29.12.2010 - 20:39
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 du jour . Me parece que ayuda a los programadores (y analistas) a tomar decisiones de diseño inteligentes, y a hacer algoritmos más informados & opciones de estructura de datos.

En mi propia experiencia, los mejores programadores tienden a conocer el funcionamiento interno, en mayor o menor grado, ya sea entendiendo la instrucción de ensamblaje nativa conjunto para una plataforma de destino, una organización de computadora curso en la escuela, rudimentario electrónica digital o poder entienda las descripciones detalladas de los núcleos de CPU y GPU en los últimos modelos, los mejores tienen un conocimiento más completo que sus compañeros menos estelares.

    
respondido por el mctylr 29.12.2010 - 21:23
1

No estoy seguro de si es útil, 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 cambié, o aprendí lo suficiente como para que uno más no vaya a expandir mucho mi percepción del sistema. Nunca he sido muy aficionado al hardware, pero puedo desarmar una computadora y nombrar los diferentes subsistemas y cómo interactúan.

    
respondido por el David Thornley 29.12.2010 - 21:22
0

Lo poco que sé que aprendí en una clase de arquitectura de computadoras hace casi 25 años, y en una arquitectura no real en ese sentido.

Realizo principalmente la 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 x86 de productos básicos, 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.

    
respondido por el John Bode 29.12.2010 - 20:44
0

Enseño programación Java como una clase de escuela 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 exagero, solo los conceptos simples, como la forma en que se almacenan las cosas en la memoria, parecen ayudar a los estudiantes.

    
respondido por el bestattendance 30.12.2010 - 19:10
0

Voy a responder esto como se pregunta en el título:

Sí, un desarrollador debería conocer el funcionamiento interno del hardware. ¿Cuánto depende del tipo de desarrollador & Sus objetivos, tiempo disponible e interés personal. La prioridad debe ser, por supuesto, en las herramientas, técnicas, etc. inmediatas que emplean en su área. Esta opinión está en la línea de ser un individuo bien redondeado. Cuanto más sepa de cosas fuera de su oficio, sin sacrificar su oficio, mejor.

Eso no significa que tengas que volverte loco con el 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? Heck no. He olvidado tanta información inútil sobre SCSI que ni siquiera es graciosa. Sin embargo, aprender sobre esto 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.

Por lo tanto, ciertamente sugiero aprender sobre el hardware. Hazlo a un ritmo razonable, dependiendo de tus necesidades. Aprenda la mayor cantidad de detalles posible, pero concéntrese en los conceptos.

    
respondido por el George Marian 30.12.2010 - 20:00
0

Todo desarrollador debe conocer los conceptos básicos asociados con la ingeniería informática: aritmética binaria, conversión de bases, álgebra de Boole, compuertas lógicas, composición de una CPU (y lo que hacen los componentes), caché, memoria virtual, compresión, detección y corrección de errores. ...

El grado de conocimiento de estos depende del trabajo del programador. Como han dicho otros, un desarrollador de sistemas integrados tendría que estar mucho más familiarizado con las capacidades de hardware y cómo escribir el software que mejor utiliza el hardware que, por ejemplo, un desarrollador web.

    
respondido por el Thomas Owens 30.12.2010 - 20:24

Lea otras preguntas en las etiquetas