44 puntos por GN⁺ 2024-08-20 | 5 comentarios | Compartir por WhatsApp
  • En una conversación reciente con un reconocido CEO tecnológico y un ingeniero, escuché una metodología interesante de desarrollo de software. Esta metodología me hizo pensar en otras heurísticas y generalizaciones.

Su método

  • Al empezar el día, se pone a trabajar en una funcionalidad. Si no logra terminarla antes de que acabe el día, borra todo y vuelve a empezar al día siguiente. Las pruebas unitarias que escribió sí se pueden conservar.
  • Si después de varios días todavía no logra implementar la funcionalidad, piensa en la base, la infraestructura o el refactor necesario para hacerla posible, implementa eso y luego vuelve a la funcionalidad.
  • Este método es similar al movimiento de programación extrema de finales de los 90 y principios de los 2000.

Ideas sobre el método

"Escribe todo dos veces"

  • Un consejo para ingenieros junior: resuelve el problema, guarda el código en una rama y luego vuelve a escribirlo.
  • Descubrí este método por accidente después de que mi laptop se descompusiera. Reescribir tomó solo el 25% del tiempo de la implementación inicial y el resultado fue mucho mejor.
  • Puedes obtener código con el doble de calidad en 1.25 veces el tiempo. Es útil para proyectos que requieren mantenimiento a largo plazo.
  • El método de "volver a empezar cada día" es todavía más extremo. Cada vez que reescribes, terminas encontrando una solución más elegante.

"La cantidad tiene una cualidad propia"

  • La cita de Stalin también aplica a los ingenieros de software. Para un ingeniero junior, sus primeras 100 mil líneas de código son indispensables.
  • El método de "volver a empezar cada día" ayuda a escribir esas 100 mil líneas más rápido.
  • Resolver el mismo problema repetidamente ayuda a recordar patrones.
  • Con 5 mil líneas de código perfecto puedes ver todos los patrones principales. Las 95 mil líneas restantes reacomodan tus neuronas a través de la repetición.

Comparación con la heurística de "con una pistola en la cabeza"

  • A la persona que propuso una solución para un problema, pregúntale: "Si tuvieras que terminarlo en 24 horas, ¿cómo lo harías?"
  • Este método rompe los sesgos de encuadre y anclaje. A menudo puede inducir en pocos minutos un plan que se podría terminar en un día.
  • En realidad no es un plan que de verdad pueda completarse en un día, pero la nueva solución muchas veces sí puede terminarse en unos pocos días.
  • El objetivo de este experimento mental no es generar una solución real, sino establecer una cota inferior para la solución.

Búsqueda de rutas

  • Lo clave es encontrar rutas dentro del espacio del problema. Cada ruta es una solución, y el rol del ingeniero es encontrar la mejor ruta.
  • Vale la pena pensar en las similitudes entre estas heurísticas y los distintos algoritmos de búsqueda de rutas.
  • Lo mismo ocurre con las heurísticas de ingeniería: convertirse en un mejor ingeniero significa encontrar mejores rutas dentro del espacio del problema.

Resumen de GN⁺

  • Este texto explora metodologías y heurísticas eficientes para el desarrollo de software.
  • El método de "volver a empezar cada día" y el de "escribir todo dos veces" son útiles para mejorar la calidad del código.
  • La resolución repetitiva de problemas ayuda al reconocimiento de patrones y al reacomodo de neuronas.
  • La heurística de "con una pistola en la cabeza" es útil para establecer una cota inferior para una solución.
  • Encontrar la mejor ruta dentro del espacio del problema es el rol central del ingeniero.

5 comentarios

 
ahwjdekf 2024-08-21

¿Están locos? Solo gente con muchísimo tiempo de sobra podría hacerlo; ¿de verdad creen que esto es algo realista?

 
dlehals2 2024-08-22

En el entorno coreano de SI eso sería imposible... jaja, quizás solo en proyectos personales

 
kaistj 2024-08-20

Este enfoque es algo que jamás se me habría ocurrido.
Tengo que probarlo jaja

 
eususu 2024-08-20

Coincido mucho con lo de reescribir.
Una vez borré por accidente el código en el que estaba trabajando y, al volver a escribirlo,
terminé haciéndolo considerando cosas que antes había ignorado por flojera de cambiar el diseño a mitad del proceso,
y el resultado fue incluso mejor.

 
GN⁺ 2024-08-20
Comentario en Hacker News
  • Es una buena estrategia escribir una función nueva dos veces. Pero para un desarrollador de negocio o un project manager, puede parecer una demora innecesaria

    • Escribir la función de principio a fin ayuda a ordenar la lógica y refactorizar
    • Reescribirla aclara el flujo lógico y permite seguir el plan de una forma más lineal
    • Tiende a reducir la necesidad de grandes refactorizaciones más adelante
  • La pregunta de “¿y si tuviera que terminarlo en 24 horas?” es algo que un project manager no puede preguntar

    • Es un ejercicio educativo personal, no una forma de terminar el trabajo más rápido
  • El buen código se escribe eligiendo las abstracciones adecuadas

    • Para elegir las abstracciones correctas, hay que conocer el panorama completo
    • En otras ramas de la ingeniería se usan buenos paradigmas de planos, como los layouts en CAD
    • En software faltan este tipo de planos
    • La experiencia importa porque ayuda a mantener el equilibrio
  • Si tienes colegas competentes, pueden mostrarte lo que se puede hacer en poco tiempo

    • Hay muchas razones por las que trabajar rápido es importante
    • Igual que en la reparación de autos, mientras más tiempo toma, más probable es olvidar cómo volver a ensamblarlo
    • Implementar una función en un solo día reduce el riesgo
    • Se necesita un entendimiento sólido de las herramientas y un proceso de CI/CD confiable
  • Comparto la idea de que es bueno escribir el software dos veces

    • Después de perder código que ya había escrito una vez, pierdo la motivación para volver a escribirlo
    • Cuando intento reescribirlo, me cuesta concentrarme y no recuerdo bien el enfoque
  • Si no puedes implementar una función incluso después de varios días, primero hay que hacer la infraestructura o la refactorización necesaria

    • Es importante construir y mantener el “vocabulario” de las herramientas
  • “En 24 horas” y “escribir todo dos veces” están relacionados entre sí

    • Si escribes el código así nomás, al final terminas reescribiéndolo
  • Esta publicación es uno de los mejores “consejos de programación” que hay

    • Es parecido al consejo de grug brained developer
  • A veces hace falta dejar corriendo un hilo en segundo plano para resolver un problema

    • La gente con más experiencia puede identificar este tipo de problemas más rápido
    • A veces conviene dejar el problema un rato y hacer otra cosa
  • El siguiente enfoque es útil

    • Primero escribir varias ideas para resolver el problema
    • Dividir el trabajo de forma que se pueda “completar dentro de una sola sesión”
    • Implementarlo de modo que al final de cada sesión el código siempre “funcione”
    • Al final de cada sesión, hacer un brain dump en comentarios o en el README