¿En qué medida debe un ingeniero de software de aplicaciones saber cómo funciona una computadora?

Para ser un buen ingeniero de software, debe tener curiosidad sobre los sistemas y las máquinas y tener pasión por aprender sobre ellos. Muchos desarrolladores tienen pasatiempos que giran en torno a las máquinas, ya sean bicicletas, automóviles, guitarras, cámaras, legos, barcos, motocicletas, cocina o juegos.

Para responder la pregunta más directamente si está desarrollando una consola de juegos o sistemas integrados, necesitará saber cómo explotar cada parte de ella para obtener rendimiento: usar coprocesadores matemáticos cuando están inactivos, etc.

Para ser un desarrollador web de propósito general, debe comprender las partes de una PC lo suficientemente bien como para poder especificar las partes de New Egg y ensamblarlas. Comprenderá el rendimiento y las limitaciones y las compensaciones que deben realizarse. También debe comprender los conceptos de subprocesamiento, paralelismo, virtualización y almacenamiento. Debes saber lo que hace un compilador. Debe saber sobre el monitoreo y el registro y las responsabilidades del sistema operativo.

A medida que expanda su carrera, puede trabajar en aplicaciones que ejecutan diferentes funciones en diferentes motores informáticos: diferentes “cajas” en la “nube” que realizan funciones similares a la CPU, RAM, disco duro, sistema operativo y buses de la PC.

Estamos en transición hacia un mundo “posterior a la PC”, pero la forma básica en que una PC funciona hoy es un modelo para el futuro de la informática distribuida.

La mayoría de las veces estoy de acuerdo con Ramchandra, en que los desarrolladores de aplicaciones realmente no necesitan entender cómo funciona una computadora con mucho detalle. Pero a veces realmente importa. Por ejemplo, ¿sabe qué es una condición de carrera y por qué un código en particular puede experimentar una condición de carrera en una plataforma pero no en otra? Podría, por ejemplo, depender del tamaño entero nativo de la máquina y del comportamiento del programador de tareas / subprocesos del sistema operativo. Era ingeniero de hardware antes de ingresar en CSci e ingeniería de software, y de vez en cuando he podido resolver un problema que desconcertaba a otros desarrolladores, porque tenía una muy buena idea de lo que estaba haciendo el hardware.

Hace muchos años, estaba trabajando para una empresa que decidió pasar de un proveedor de hardware a un proveedor diferente, que tenía un sabor completamente diferente de UNIX. Esto requirió una actualización de todas las aplicaciones, incluida la base de datos y el software de desarrollo. Finalmente lo convertimos todo y comenzamos a ejecutar todo en el nuevo servidor. Después de desmantelar el antiguo servidor, notamos que el nuevo hardware / software se ralentizaba cada siete días. Nadie pudo resolverlo. La compañía llegó a personas de todos los proveedores de software y hardware y trabajamos el fin de semana para resolverlo. Todos los consultores a los que acudimos para ayudarnos parecían despistados a la hora de resolver el problema. Alrededor de las 4 de la tarde del domingo por la tarde descubrí que la base de datos estaba haciendo repetidas llamadas a la función malloc () de UNIX O / S, una pérdida de memoria. Pude escribir y aplicar un parche para resolver el problema hasta que recibimos una actualización de la base de datos. Si no hubiera sabido cómo funcionaban la computadora y el sistema operativo, la compañía podría haber gastado cientos de miles de dólares en consultores antes de encontrar a alguien que pudiera encontrar el problema.

En pocas palabras, a veces puede ser muy valioso tener a alguien en el equipo que pueda entender cómo funciona una computadora.

Francamente, no necesita saber nada sobre cómo funciona la computadora internamente para escribir software de aplicación. El sistema operativo le oculta esa complejidad. Solo necesita interactuar con el sistema operativo.

¿Necesita saber cómo funciona internamente el automóvil para conducirlo? No, los fabricantes de automóviles lo han abstraído. Solo necesita saber cómo interactuar con la interfaz del automóvil, es decir, los controles como la rueda, los frenos, etc.

More Interesting

¿Cuánto tiempo se tarda en ascender a ingeniero de software iii en Amazon?

¿Pueden los ingenieros / programadores / ingenieros de software / ingenieros mecánicos hacer artes marciales (sin que esto afecte sus habilidades mentales)?

¿Cuál es la mejor manera para que un joven ingeniero de software aumente su currículum / CV para ser aceptado en un programa de doctorado superior para estudiar aprendizaje automático?

¿Cuáles son algunas buenas historias sobre ingenieros de software y equipos de ingeniería?

¿Por qué hay menos personas entrando en hardware, mientras que más personas están entrando en software hoy en día?

¿Cuáles son algunos de los principios de CS que desea que entiendan los no ingenieros (UX, gerentes de producto, negocios)?

¿Por qué no podría obtener una entrevista para trabajos de ingeniero de software?

¿Cuáles son algunas técnicas para la resistencia mental como ingeniero de software? ¿Qué haces para mantener tu enfoque y calidad consistentemente altos mientras trabajas?

Cómo usar las matemáticas como ingeniero de software

Cómo escribir una biblioteca para un lenguaje de programación

¿Cuáles son los criterios para dominar C ++ en la industria de la ingeniería de software?

Cómo convertirse en líder de equipo / ejecutivo senior en Accenture (India) de un ingeniero de software asociado

¿Cómo podría resolver preguntas difíciles de software, si mis habilidades no me lo permiten?

¿Cómo puede un principiante en diseño de software convertirse en profesional en el campo? Estoy estudiando ingeniería de software, pero cuando veo software serio parece complicado. Entonces, ¿cómo debo llegar al punto en que pueda diseñar un software complejo y robusto?

¿Cuál es un título más práctico y / o más fácil de obtener, seguridad cibernética o ingeniería de software? ¿Por qué?