¿Cuáles son algunas lecciones para la vida cotidiana que aprendió de la ingeniería de software? ¿Cuáles son algunas ideas que son contraintuitivas en relación con la sabiduría convencional y que es poco probable que provengan de otras experiencias?

La programación no se trata de software, se trata de una forma de pensar, te hace una mejor persona, permíteme ilustrarte utilizando algunos lenguajes de programación bien conocidos y cómo se aplican en la vida real.

1) Todo programador bueno sabe que ” cuanto antes comience, más tarde terminará “. Lo que implica que es extremadamente importante planificar primero y luego ejecutar, en lugar de disparar flechas en direcciones aleatorias, esperando que uno alcance el objetivo.

2) ‘Plan para el fracaso’: los sistemas de software son enormes, masivamente complejos, y es un milagro que funcionen en conjunto. La mierda que pasa es una lección del día 0, para la programación y para la vida. La idea es esperar y trabajar para lo mejor, y prepararse para lo peor.

3) Solución de problemas: las habilidades del boxeo negro, el aislamiento para restringir el alcance del área donde tengo que encontrar el error, es común a la forma en que tengo problemas para disparar, por ejemplo, una conexión eléctrica defectuosa o un plato mal hecho. Mantenga todo constante, cambie una variable y encuentre qué desordena su sistema.

4) Piensa en grande: cada vez que escribes un módulo de código, crees que, si es necesario ampliarlo, debería haber cambios mínimos. Lo mismo con la vida, tiene una gran visión, y comienza con una ejecución implementable. Diseño para el futuro, Implementar por ahora.

5) Inspirado en la naturaleza: la programación orientada a objetos, es un ejemplo clásico de observar patrones en su entorno natural y usarlos como modelos para encontrar soluciones.

1. Todo en la vida puede ser estimado aproximadamente. Si dices que no puedes, estás huyendo de pensar en todas las posibles consecuencias. (Inspirado en la estimación de software)

2. La vida está plagada de riesgos. Eres capaz de anticiparte a esos. Si se abstiene de identificarlos, controlarlos, mitigarlos o controlarlos, se sentirá más herido de lo que merece ser. (Inspirado en la gestión de riesgos de software)

3. Sabes cuánta carga puedes manejar. Siempre puede discutir si podrá asumir una responsabilidad o no. Abstenerse de asumir la responsabilidad es menos peor que no cumplir con su compromiso. (Inspirado en la estimación de software)

4. El tiempo es un recurso. Una muy importante. El tiempo y el dinero son convertibles. Habrá ocasiones en la vida en las que tendrá que pagar en una para obtener más de otra. (Inspirado en la estimación de software)

5. Uno siempre debe medir su valor cuantitativamente en un trabajo. De esa manera, evitará perder tiempo o sabrá si merece algo mejor. (Inspirado en la gestión de proyectos)

6. Haz un plan para tu vida. El plan puede cambiar a lo largo del tiempo, pero al menos sabe qué está cambiando de su vida y, lo que es más importante, dónde se encuentra en su vida en este momento. (Inspirado en la gestión de proyectos)

7. Sepa lo que quiere de la vida (Ingeniería de Requisitos). Piensa en lo buena que debería ser tu vida (Ingeniería de requisitos de calidad). Diseña tu vida considerando las restricciones (Arquitectura de Software). Implementar su plan, utilizando buenas prácticas (Aseguramiento de la Calidad). Arregla tus errores. (Control de calidad). Mantenga lo que ha hecho para usted: reputación, relaciones y buena voluntad (Mantenimiento de software).

Tenga cuidado con la brecha mientras se enjabona, enjuague y repita.

Un enfoque pragmático de la vida: las ideas tienen consecuencias, y es importante cómo se juegan juntas.

El Principio de Pareto; la distinción entre proceso y producto, dentro y fuera; Trabajo en equipo y múltiples perspectivas.

Estos temas tienen muchas ramificaciones:

  1. La programación, como la vida, es un asunto sin ego, si quieres hacer las cosas.
  2. Tolerancia al aburrimiento y gratificación diferida en apoyo de un objetivo a largo plazo. El ciclo de compilación-prueba-repetición del ciclo es casi como zen en sus duras lecciones para no adjuntar.
  3. Nada es realmente significativo a menos que puedas operacionalizarlo.
  4. No diseñes demasiado. Se “ágil”. La vida es un blanco en movimiento.
  5. En la vista del usuario, la percepción es la realidad. No les importa lo que pasa dentro.
  6. En la vista del sistema, priorice antes de optimizar. Resuelve los problemas importantes, no los más inmediatos u obvios.
  7. Multi-causalidad: cualquier error interesante tiene más de una causa. La depuración requerirá que cambie su visión actual de cómo funcionan las cosas. Esto también podría ser útil en la vida.
  8. Los problemas de Wicked en la vida son como sistemas que ya han sido optimizados y han llegado al punto de disminuir los rendimientos. Es difícil obtener alguna mejora porque todos los problemas importantes y fáciles ya se han resuelto . Lo que queda se llama un sistema complejo, también conocido como ecología, donde las condiciones tienen muchas causas que compiten y contribuyen.

Patrones de diseño y pruebas unitarias.

Por ejemplo:

  1. Una puerta con la que no te puedes cerrar nunca te dejaría afuera.
  2. Mantener la llave de la oficina junto con la llave del auto reduce significativamente la posibilidad de olvidar uno de ellos.
  3. Si es posible, siempre copie y pegue una dirección, correo electrónico o número de teléfono. Una gran parte de las conexiones perdidas son errores humanos que las computadoras no cometen.

Solucionar un problema es un proceso simple de dos pasos:

1. Comprender el problema y su causa.
2. Arreglarlo.

Es importante hacer los pasos en ese orden. La mayoría de las personas intentan arreglarlo antes de entender la causa raíz. Probar cosas puede ser una gran pérdida de tiempo y puede empeorar el problema.

Las suposiciones de los observadores casuales son casi siempre fuera de lugar e inútiles.

La mayoría de las veces, los problemas complicados tienen una solución simple.

Nunca es una cuestión de SI , solo de CUANDO .

Fallar no es una opción. Siempre hay una solución: encontrarla es solo cuestión de tiempo y esfuerzo.

Al menos, esta es una de las cosas que he aprendido de mi carrera de TI.

Planifica tu software, visualízalo, comienza a diseñar en papel.
Cuanto más puedas pensar, mejor podrás implementar.
La codificación no es más que el resultado del pensamiento. Qué módulos desea agregar, qué características desea que sean todas.
Una vez que esté en el papel y en su mente, puede irrumpir fácilmente en el pseudo código y la codificación no es nada después de eso.

Después de pensar en el mundo, la situación a la que se enfrentará su software, comenzar a probar, en todas las condiciones posibles y seguir probando, incluso si se lo entrega al usuario y sigue aprendiendo sobre eso.

Es como cada paso que necesitamos adoptar en la vida.
Piense, visualice, diseñe, trabaje, pruebe y aprenda si falló y aprenda si aprobó.

Paciencia. Todos los problemas pueden resolverse, solo hay que esforzarse un poco más y perseverar.

Depuración

Piensa mucho y duro, antes de convertirte en un ingeniero de software.

Aprendo esto en mi trabajo de ingeniería de software todos los días.

¡Agregue siempre un búfer de + -20% a sus estimaciones diarias! Si estaba esperando el autobús a las 11:10, vaya allí a las 10:58 y espere hasta las 11:22

Las mejores lecciones que obtuve de mi ingeniería son “cómo sentarse de 10:30 a 5:30 sin ningún conocimiento pero con gran experiencia”.