He pasado 4 años en ingeniería de software: esto es lo que de verdad he aprendido

Este hilo de Reddit (y las discusiones que generó) revelan mucho sobre las realidades cotidianas de la ingeniería de software

Devscene
2 comentarios Facebook Twitter Flipboard E-mail

La ingeniería de software es una disciplina en constante evolución, donde la experiencia diaria moldean las perspectivas de sus profesionales. Un hilo publicado recientemente en Reddit, donde un ingeniero de software con casi cuatro años de experiencia comparte lo que aprendió en ese tiempo, generó un debate interesante, alejado de las visiones idealizadas que a veces se presentan en ámbitos académicos o en los cursos introductorios.

Para los desarrolladores jóvenes, estas reflexiones ofrecen una valiosa guía, mientras que para los más experimentados, sirven como un recordatorio de que, aunque las herramientas y lenguajes cambian, los principios fundamentales del buen desarrollo de software permanecen constantes.

1. El coste de tiempo e ingeniería es más elevado que el de los servidores

Estamos en un entorno donde la nube y los servicios escalables han reducido significativamente el coste de los recursos computacionales

Una de las afirmaciones más destacadas del hilo es que el tiempo y el esfuerzo de ingeniería son más valiosos que el costo de los servidores: esta idea subraya la importancia de optimizar los recursos humanos y de evitar el "over-engineering", donde se invierte demasiado tiempo en perfeccionar un código a expensas de la productividad: en un entorno donde las necesidades de mercado cambian rápidamente, el tiempo para lanzar al mercado puede ser un factor decisivo para el éxito o fracaso de un producto.

2. La productividad del desarrollador y el ecosistema tecnológico son más valiosos que la eficiencia en tiempo de ejecución

A menudo se critica ciertos lenguajes por su "lentitud", pero la realidad muestra que son los más utilizados en el desarrollo de software en el mundo real

En línea con el punto anterior, la flexibilidad y el ecosistema de una tecnología pueden ser más valiosos que su eficiencia técnica. Esto explica por qué lenguajes a menudo criticados por su lentitud, como Python, siguen siendo extremadamente populares: permiten a los desarrolladores iterar rápidamente y adaptarse a nuevas necesidades sin verse atrapados en los detalles técnicos.

3. Las prácticas 'Agile' no son seguidas de forma estricta por los equipos 'agile' exitosos

La flexibilidad en la implementación de metodologías 'agile' es tan importante como la metodología en sí

Una observación interesante es que los equipos ágiles exitosos no siguen la filosofía 'agile' de manera estricta, sino que adaptan los procesos según sus necesidades. Esto refuerza la idea de que la agilidad verdadera radica en la capacidad de adaptación, en lugar de adherirse ciegamente a un conjunto de reglas.

Sin embargo, este punto generó debate, especialmente entre aquellos usuarios que trabajaban en entornos donde cierta estructura es necesaria para manejar la complejidad y el tamaño del proyecto.

4. La elección de 'pila tecnológica' depende del equipo, no del proyecto

Una creencia común es que la elección de una pila tecnológica debe estar dictada por los requisitos específicos del proyecto

Contrario a la creencia común de que la elección de la pila tecnológica debería basarse en los requisitos del proyecto, el hilo sugiere que esta decisión suele depender más de la experiencia y las preferencias del equipo de desarrollo, especialmente del ingeniero senior. Aunque pragmático, este enfoque puede ser problemático si lleva a decisiones que no optimizan el rendimiento o la escalabilidad del producto.

5. La subjetividad de las "buenas prácticas"

Lo que se considera una práctica ideal en un contexto puede no ser aplicable o efectivo en otro

Las "buenas prácticas" están a menudo sesgadas por las experiencias previas y las preferencias de quienes las promueven. Por lo tanto, es crucial que los equipos desarrollen y adapten sus propias prácticas basadas en su contexto particular, en lugar de seguir ciegamente un conjunto de reglas supuestamente universales.

6. La comunicación efectiva es clave para el éxito de un equipo

Comunica

Quizás uno de los puntos menos controvertidos, pero no por ello menos cruciales

La clave de un equipo exitoso, más allá de las habilidades técnicas o de las herramientas o metodologías utilizadas, es la importancia de una comunicación efectiva: capacidad de transmitir ideas, resolver conflictos y colaborar en la resolución de problemas. Muchos comentaristas coincidieron en que la falta de comunicación puede ser la causa de la mayoría de los problemas en un proyecto, desde malentendidos técnicos hasta el fracaso en cumplir con los plazos.

7. GitHub como herramienta indispensable para el desarrollo de software

GitHub se ha convertido en el estándar de facto, especialmente en proyectos de código abierto y equipos distribuidos

GitHub destaca como una herramienta esencial para cualquier equipo de desarrollo, la más eficaz para el seguimiento y manejo de proyectos (al margen del tamaño o complejidad de los mismos), gracias a sus funciones de control de versiones, de colaboración y de gestión de tareas, la convierten en una herramienta esencial para cualquier equipo de desarrollo, sin importar el tamaño o la complejidad del proyecto.

Pese a todo, algunos participantes en el debate señalaron que no es necesariamente la mejor para todos los contextos: herramientas como GitLab o Azure DevOps salieron a colación como alternativas viables, especialmente en entornos corporativos con necesidades más complejas.

8. La prioridad es lograr que funcione

Puede parecer obvio, pero en la práctica, muchos desarrolladores caen en la trampa de anteponer la perfección técnica

Finalmente, en el desarrollo de software, la primera prioridad siempre debe ser hacer que el software funcione: un software que no funciona, por bien diseñado que esté, no tiene valor alguno. Por lo tanto, el enfoque inicial debe estar en lograr un producto funcional, sobre el cual luego se puedan realizar mejoras y optimizaciones.

9. El dominio de lo básico es el verdadero avance

La tentación de aprender constantemente nuevas tecnologías puede hacer que los desarrolladores descuiden los fundamentos

Una verdad universal en la ingeniería: el dominio de los conceptos básicos es lo que realmente te convierte en un desarrollador avanzado, lo que permite a un ingeniero enfrentarse a desafíos complejos con confianza y eficacia.

Imagen | Marcos Merino mediante IA

En Genbeta | Por qué muchos programadores dicen que los lenguajes no importan: el secreto está en el pseudocódigo y la sintaxis

Inicio