¿Realmente necesitan los programadores conocer sobre hardware de computadoras?
Puede ser muy útil tener comprensión básica del hardware, pero no es tan determinante hoy en día como lo fue en los inicios de la computación. La razón es que los lenguajes de programación actuales como Java, C# y Python son de alto nivel, por lo que hay una capa de abstracción entre el código que se escribe y el hardware. De tal modo que no tratamos directamente con los chips ni dispositivos a bajo nivel como antaño se requería, y el software puede ejecutarse en una amplia gama de arquitecturas hardware, gracias al proceso de compilación o interpretación del código.
Sin embargo, en trabajos como la programación embebida donde se programan dispositivos cuyo software reside en chips, o la creación de drivers para dispositivos (p. ej. tarjetas de vídeo o impresoras), se emplean típicamente lenguajes de bajo nivel como ensamblador y C o una variante de éste, y requieren un amplio conocimiento de las arquitecturas en las cuales correrán. En estos casos es obligatorio tener ese conocimiento. Algo similar puede decirse sobre la programación de videojuegos, donde se explotan al máximo las capacidades del chipset, tarjetas gráficas, RAM y vídeo.
Sin más preámbulos, te dejo las 8 razones por las cuales, como programador, debes aprender sobre hardware:
1. Conocer cuánto espacio en disco se requiere. En programación debe considerarse no sólo la cantidad de almacenamiento necesario para las herramientas de desarrollo (IDEs, frameworks, gestores de base de datos o DBMS, imágenes, etc.), sino también para su implementación en los equipos que lo ejecutarán (espacio para instalación del software, librerías, bases de datos y archivos a gestionar, etc.) Los discos duros hoy día se miden en teras, pero las tecnologías existentes (HDD y SSD) tienen diferencias, ventajas y desventajas que debes comprender.
2. Conocer cuánta RAM se necesita. Usualmente se requiere más RAM para desarrollar programas que para ejecutarlos en los equipos cliente. La cantidad de RAM para la implentación depende principalmente del tipo de programa (si es desktop o web, etc.), su propósito (cálculo de datos, procesamiento de imágenes o vídeo, videojuegos, etc.), de los algoritmos empleados, del tamaño o "peso" de los recursos que opere o necesite (imágenes, clips de vídeo, documentos, etc.), la frecuencia de demanda de los mismos, y del tamaño y cantidad de archivos o bases de datos que deba manejar, así como de la cantidad de usuarios que tendrá.
3. El software se ejecuta sobre un hardware mínimo. De lo contrario correrá de forma torpe y lenta, y en algunos casos ni podrá llegar a instalarse en equipos con configuraciones inferiores al hardware y/o software con el que fue desarrollado. Aquí se toman en cuenta el tipo de procesador, la tarjeta gráfica y el chipset, por ejemplo. Por tal razón, las recomendaciones mínimas del hardware deben incluirse siempre en la documentación técnica.
4. Saber cuánto espacio requiere cada tipo de dato. En especial si se trabaja con árboles, pilas, colas, archivos o bases de datos. Por ejemplo, el espacio que utiliza una variable de tipo entero es menor al requerido por una de tipo numérico con decimales, tanto en RAM como en almacenamiento físico. Por tanto, elegir el tipo de dato y el tamaño correcto de los campos y variables determinará la eficiencia de tu código en el uso de los recursos y del poder de cómputo.
5. Saber la tecnología para la cual se desarrolla. No es lo mismo crear una app de facturación e inventario que un videojuego o una de procesamiento de mapas, y si deberá ejecutarse en ambiente web o desktop. De igual modo, si el software requerirá o no una GPU, o un tipo específico de CPU o de chipset. Cada programa tendrá sus requerimientos. Por tanto, debe conocerse lo básico de la tecnología para la que se desarrolla, los recursos que procesará y el entorno en el se ejecutará. De ello dependerá la elección tanto del lenguaje como de las herramientas a utilizar en su diseño e implementación.
6. Las bases de datos y los usuarios de tu software crecerán. En las fases iniciales de un proyecto de software se obtiene información relacionada al tipo, tamaño, cantidad y frecuencia de generación de los datos, su relaciones y cuántos usuarios tendrá, lo que nos ayuda a modelar las bases de datos, proyectar su futuro crecimiento y especificar los capacidades técnicas que requerirán los equipos en los que implementarás tu software. Si la base de datos incluye además imágenes, documentos digitales y recursos multimedia, el espacio de almacenamiento requerido definitivamente crecerá con el tiempo.
Por otro lado, puesto que también las aplicaciones tienden a crecer y aumentar su número de usuarios a medida que maduran, conviene aprender sobre servidores, racks, sistemas RAID, etc., para recomendar el más idóneo a tus clientes/usuarios, ya sea para su implantacion inicial o su migración a este tipo de tecnología.
7. Tu cliente/usuario necesita que lo asesores. Si éste no cuenta con el equipo informático necesario para implementar el sistema, o si el que posee no satisfacen las especificaciones mínimas, debes asesorarlo en la compra o actualización. Esta es una excelente manera de ganar su confianza y lealtad al ayudarles en la adquisición de equipos económicos, fiables, de bajo consumo y que satisfaga las necesidades actuales y futuras de tu aplicación.
8. Debes aprender a diagnosticar hardware. Tanto en el desarrollo como en la implementacion de software, debes conocer lo suficiente de hardware como para determinar las causas de ciertos tipos de problemas que puedan aparecer. Habrá muchos casos en los que la causa del fallo sea tu código, tus estrategias de solución, errores no descubiertos o un mal diseño, pero debes considerar también los fallos técnicos. Muchas veces el problema está en algún componente interno, dispositivos de red o cables dañados, errores de configuración, drivers o librerías corrompidas, y hasta por falsos contactos de cables de red, impresoras o de alimentación.
Muchos de estos problemas pueden ser diagnosticados y resueltos con poco o casi nada de esfuerzo: una sencilla configuración en el BIOS o en el sistema operativo, la aplicación de un update/upgrade del software o un upgrade del hardware, la reinstalación de un driver, un ajuste en las conexiones o el reemplazo de un componente interno será suficiente para que desaparezca el problema. Pero esto requiere cierta experiencia y conocimiento que debes adquirir.
Conclusiones
Todas las habilidades y conocimientos antes mencionados son sumamente valiosos, no solo durante tu proceso de formación como programador, sino también para construir una carrera exitosa en desarrollo de software. Como consejo final te sugiero que consideres tomar un curso de mantenimiento y reparación de computadoras. Los mejores desarrolladores de software que conozco tuvieron esa experiencia y se mantienen al día con la tecnología. De este modo darás un salto cualitativo en tu profesión, no solo al dominar herramientas, lenguajes, metodologías, sino también al adquirir conocimientos que ayuden a tu código a cumplir eficazmente su propósito.
Recursos adicionales
Te dejo algunos excelentes recursos que inspiraron este post y brindan más detalles e información. Te los recomiendo.
¿Cuánto almacenamiento necesito para programación? Detalla de forma sencilla la cantidad de espacio requerido según el tipo de programador que seas y las tareas adicionales que necesites realizar, tanto para el sistema operativo como para los IDE, editores de código, máquinas virtuales, navegadores y archivos de tus proyectos (cuyo tamaño depende de su tipo y envergadura). Por último añade recomendaciones relativas al espacio requerido por los recursos adicionales y software necesarios para los proyectos, habla sobre si utilizar HDD o SSD junto con consejos finales para elegir la cantidad total de almacenamiento para la programación.
¿Cuánta memoria RAM necesito para programar? Aborda el tema del hardware adicional para programación, incluye procesadores, repasa el tema de los HDD vs. SSD y brinda consejos para elegir la cantidad de RAM óptima según el tipo de programador.
¿Necesitan los programadores comprender el hardware informático? Profundiza en el tema de si es necesario que los desarrolladores de software conozcan el hardware de las computadoras. Es un vídeo de YouTube en inglés. Si no dominas este idioma, activa los subtítulos en español.
¡No corras al programador! Cómo saber los componentes de mi PC. Explica cómo averiguar información sobre los componentes técnicos de las computadoras, usando opciones de Windows y software gratuito descargable de la web.
Espero que este post te haya servido para comprender la importancia de conocer sobre hardware en tu proceso de aprendizaje o tu trabajo como programador. Si sabes de otras razones que valgan la pena incluir en este blog, házmelo saber. No olvides dejar tu comentario y compartir el post con quienes consideres que pueda serle útil. Si encuentras algún link roto o vídeo que no aparece, por favor avísame para corregirlo.

Interesante información, la interfaz del bloguer es muy intuitiva y cautivadora
ResponderBorrar