¿Cómo puedo juzgar si un proyecto es particularmente complejo o si solo tardo en recogerlo?

16

Estoy progresando poco en un proyecto importante. La fuente es masiva, muchas capas de objetos, código de macarrones, gráficos de doble diamante de herencia múltiple, características a medio congelar cuando el escritor original se fue, y nadie sabe por qué muchas piezas fueron diseñadas de la manera en que estaban.

Supongo que cualquier programador competente tendría problemas para resolverlo lo suficientemente bien como para corregir errores, terminar las cosas a medias y agregar nuevas funciones. Sin embargo, sospecho que voy más lento que un programador típico.

¿Cómo juzgo si la fuente es inusualmente mala y si me está yendo tan bien como cualquiera podría hacerlo, en comparación con la fuente es típica para un proyecto como este y soy poco inteligente o poco calificado?

DarenW
fuente
11
Comprender el código de los demás es un acto de empatía. Olvídate de lo rápido que vas y también olvídate de lo tontas que fueron las personas que escribieron el código. Resolverlo es un ejercicio de flexibilidad. Suponga que la fuente es inusualmente mala, y que está demasiado capacitado, y vuelva al trabajo y deje de joder en estos estúpidos foros. Lo que también se aplica a mí ... Tengo un código que discutir.
Dan Rosenstark, el
2
¡Olvídate especialmente de "qué montón de ..." cuando dichas personas son el jefe, el hermano del jefe, el jefe del jefe o el sobrino del jefe, etc.!
DarenW
2
Ah, el "por qué" perdido. Recuerde ponerlos cuando los descubra.
@DarenW: es un código de espagueti, no un código de macarrones: D (Lo siento, tuve que hacerlo).
Jas
1
@Jas google para el código de macarrones ... hay más tipos de pasta que solo espagueti ;-)
Jürgen A. Erhard

Respuestas:

6

La única forma de decidir esa pregunta es adquirir muchos más programadores para abordar el mismo problema y ver si les va mejor.

Por supuesto, esto rara vez es práctico, la tarea ha recaído en usted mismo y siempre que esté haciendo lo mejor que pueda, investigando dónde le falla su conocimiento. Separándolo donde la complejidad te engaña y manteniendo a quien le importa bien informado de tu progreso. Entonces no me preocuparía y seguiría así.

Orbling
fuente
16

En primer lugar, no pasaría demasiado tiempo preocupándome de que pueda ser "lento o poco calificado". Algunos proyectos son difíciles de entender, y los proyectos grandes a menudo tardan un tiempo en ponerse al día. Pensar que eres "estúpido" o que no estás preparado para la tarea no te ayudará de ninguna manera.

Parece que necesita ayuda con el código, así que considere sus recursos. ¿Tienes acceso a los codificadores originales? Si están disponibles, podrían ser buenos recursos para obtener información. ¿Qué documentación hay disponible? Si la documentación es escasa, saque un cuaderno y comience a crear su propia documentación personal.

La gran idea aquí es que debes esperar que este proceso tome tiempo, y cuanto menos tiempo pases golpeándote mentalmente, más energía tendrás para analizar el código y resolverlo. ¡Buena suerte!

Zeke
fuente
55
+1 Puede llevar más de 6 meses comenzar a conocer algunos sistemas complejos lo suficiente como para dominarlos. Incluso si la base del código es "buena", los diferentes desarrolladores y equipos tienen diferentes estilos, y a veces lleva tiempo acostumbrarse.
Ryan Hayes
3
@ Ryan, y 6 meses después de eso, tú mismo te conviertes en parte del problema :)
Benjol
@Benjol Sí, he estado allí.
Ryan Hayes
FWIW, cuando he estado en este bote (¡varias veces!), Me pareció más útil tomar descansos frecuentes que simplemente sentarme y arrastrarme sobre el código. Cuando tome un descanso, levántese y aléjese físicamente de la computadora. Estírate, mira por la ventana, piensa en lo que acabas de mirar, luego regresa y mira un poco más. YMMV, pero me encontré progresando mucho mejor cuando hice eso. ¡Buena suerte!
TMN
+1 para crear su propia documentación personal. Cuando hago este trabajo, encuentro que tomar muchas notas (ya sea en el código o en papel) y dibujar muchos diagramas (que generalmente solo significan algo para mí en ese momento) ayuda. Una ventaja adicional a todo eso es el refuerzo de los conceptos en su propia mente.
Andy Hunt
6

Alguna vez has visto la curva de aprendizaje. La curva de aprendizaje

La teoría dice que inicialmente lleva tiempo dar un paso adelante. El truco es pasar el punto de paso rápido. Si se estanca regularmente, solicite la ayuda de su gerente o al menos manténgalo informado sobre los problemas que enfrentó. Mientras esté bien para el horario no hay problemas.

Manoj R
fuente
2

Diseccionarlo, una pieza a la vez

Su situación es muy común, "familiarizarse" lleva tiempo, como ya lo han mencionado otros.

Lo que encuentro es que si lo abordas "una pieza a la vez" , independientemente de lo complejo que sea un proyecto, lo descubrirás. Solo tienes que ser lógico al respecto.

Comience con decir un botón, profundizar en el código fuente , poner puntos de interrupción, ver paso a paso lo que está sucediendo. Hay dos cosas que debes cumplir:

  • El resumen de alto nivel.
  • Los detalles esenciales que implementan la funcionalidad deseada anterior.
  • una vez que comprenda algunas partes, vuelva a factorizarlo.
Noche oscura
fuente
"Una pieza a la vez" podría funcionar en otros proyectos, pero esto tiene tantas clases derivadas de otras, clases de amigos, consejos para las entrañas de cada uno, hay pocas partes que se pueden entender de forma independiente.
DarenW
Estoy seguro de que es un laberinto complejo (algo que ha "crecido" con el tiempo). Sin embargo, si comienza con una función, ¿me está diciendo que no puede rastrearla de punta a punta?
Darknight
El seguimiento del flujo de datos, o la secuencia de eventos cuando, por ejemplo, el usuario hace clic en un botón, resultó imposible.
DarenW
1

¿Qué tal si tomas una vista diferente? ¿Qué necesitas saber sobre este código y tienes una manera de medirlo? Por ejemplo, si está tratando de corregir un error, eso puede requerir un tipo diferente de inmersión que si estuviera tratando de migrar el código de un idioma a otro, por ejemplo, pasar de VBScript a C #. Si está tratando de obtener todos los requisitos del código actual, eso puede llevar un tiempo, aunque sospecho que la mayoría de las personas tendrían ese tipo de problema.

JB King
fuente
Me gusta este comentario Uno debe tener un objetivo específico y trabajar para lograrlo (y solo ese) objetivo. De lo contrario, te perderás en él, muy parecido a un mapa.
NoChance
1

Mientras aprenden algo nuevo, muchos estudiantes pensarán: “Maldición, esto es difícil para mí. Me pregunto si soy estúpido ”.
Antes de continuar, asegúrate de que no eres estúpido y que algunas cosas son difíciles. ...

Sr. Aaron Hillegass con las palabras inteligentes.

No eres estúpido, no eres lento y no tienes poca habilidad. Estoy en el mismo barco, he asumido un nuevo rol y la base de código existente es increíblemente grande y muestra signos de sobredesarrollo repetido, me ha llevado semanas llegar a un punto en el que siento que incluso estoy obteniendo Cercano a toda velocidad. Imagine que el proyecto es como aprender un idioma completamente nuevo, no sucede de la noche a la mañana, pero requiere paciencia.

Nicholas Smith
fuente