Cómo lidiar con códigos complejos en proyectos (enormes)

8

Estoy preparando una memoria sobre "¿Por qué (algunos) proyectos de TI se vuelven demasiado complejos y cómo evitarlos?".

Si alguna vez ha encontrado proyectos que tienen códigos complejos o fueron difíciles de mantener, ¿cómo logró pasar por ellos?

Si tiene que elegir entre varias aplicaciones para usar en su proyecto, ¿cuál sería su principal prioridad en su funcionalidad y por qué?

dagofly
fuente
1
No hay códigos complejos en proyectos complejos. Ver english.stackexchange.com/questions/20455/…
Nadie mencionó el mapa de código o el mapa mental porque nunca han enseñado a usarlos y no tienen experiencia en usarlos porque no hay ningún complemento o software que pueda crear un mapa para el flujo de código de su gran proyecto. Millones de líneas de código y tienes que pasar por ellas durante horas para entender algo pequeño. La forma en que las personas crean programas es brutal y lleva mucho tiempo gestionar un proyecto. Espero que la programación visual de un día o al menos los complementos de generación de flujo de código encuentren su camino en el mundo de la programación como una herramienta valiosa.
Eftekhari

Respuestas:

8

Documento, documento, documento!

Trabajo con un código MVC bastante complejo, y solo ahora estoy realmente entendiendo cómo funciona, en lugar de aceptarlo por fe. Cada vez que hago un cambio que me cuesta entender, pongo un comentario en el código en esa sección para ayudar a aclarar lo que está sucediendo. Puede que no me haya ayudado ya que no estaba allí, pero ayudará a la siguiente persona. También me gusta pedirle a otros programadores a mi alrededor que observen mis cambios para ver si están claros.

Mi empresa tiene un wiki interno que utilizamos para documentar muchas de las metatareas que hacemos, como problemas del servidor virtual, consultas comunes, etc. para ver si hay un wiki en él. Si no hay, haré uno. Más personas se han involucrado recientemente, así que espero que crezca más rápido. Creo que realmente ayuda a comunicar las tareas más mundanas que tenemos.

Michael K
fuente
1
¡Interesante! Me pregunto por qué no tenemos esa wiki en nuestra empresa, habría sido mucho más fácil
dagofly
+1 para el wiki del desarrollador (¡siempre y cuando esté bien respaldado!)
MGOwen
6

No creo que puedas evitar por completo la complejidad con el tiempo, pero hay formas de mitigarla:

  • Mantenga el código lo más limpio posible en todo momento, dentro de lo razonable. (En el sentido de "cómo el tío Bob define el sentido" limpio ").
  • Aplique revisiones de código y / o programe pares para reducir las posibilidades de que un desarrollador exagere innecesariamente las cosas.
  • Mantener pruebas unitarias y pruebas de integración adecuadas.
  • Invierta en un servidor de integración continua y cree a menudo. Suelte a menudo también, si es posible.

Todo esto depende de alguna manera de lo que realmente implica el proyecto. A veces, por ejemplo, será beneficioso aceptar la complejidad a cambio del rendimiento. No todo el código complejo es necesariamente algo malo. Sin embargo, en general, creo que seguir estas pautas debería ayudar.

Adam Lear
fuente
3
  • deuda técnica

    refactorizar para eliminar

  • cambios comerciales

    adaptar y borrar

  • cambios de herramienta

    nuevas herramientas, la misma arquitectura antigua = falta de coincidencia de impedancia

Steven A. Lowe
fuente
exactamente, tratar con socios de código / arquitectura complejos (mal escritos) en lugar de refactorizarlos es pagar INTERESES por deudas técnicas. cuando eliminas esos puntos malos que estás pagando PRINCIPAL en deuda técnica
shershen
Una forma interesante de describir esto, desearía que algunos de mis clientes pudieran comprender esto. Construir sobre un código de base hacky malo, solo significa hacks más complejos necesarios en el futuro, en lugar de detenerse, mirar dónde estamos y cómo podemos hacer la vida más fácil y más rápida, y mover esa dirección ... mientras ($ client_does_not_listen) { $ client_does_not_listen = waste_time_and_money_until_client_listens (); }, ten cuidado porque este bucle while simple desperdiciará tus minutos de vida y te volverá loco, y claramente solo puede ser interrumpido por el cliente. Incluso he intentado lanzar un try {} catch () en vano. .
NinjaKC 01 de
3

Además, resista la tentación de agregar hacks rápidos porque el código ya es complejo / malo / hacky. En mi experiencia, terminarás con una mayor complejidad exponencial.

LennyProgrammers
fuente
55
Absolutamente. Cuando te encuentras en un hoyo, lo primero que debes hacer es dejar de cavar.
PeterAllenWebb