¿Es realista lidiar con una enorme base de código sin documentar para el proyecto de maestría?

Actualmente estoy cursando una maestría en un campo STEM y trabajando en una tesis. Para mi tesis de maestría, mi asesor me sugirió expandir el código del software del grupo y agregarle nuevas funciones. Sin embargo, es muy grande (algunos archivos tienen miles de líneas) y es difícil de leer. Consiste en muchos archivos diferentes y apenas hay comentarios que expliquen qué hacen las funciones, el significado de las variables, etc. No hay documentación que explique qué hacen las funciones/clases. Parece que cada vez que me enfoco en lo que hace una función, hay múltiples funciones/variables que están definidas en otro archivo y esas funciones/clases en sí mismas tienen cientos de líneas de largo.

Si bien mi asesor mencionó que está dispuesto a ayudarme con cualquier pregunta que tenga, la mayoría de los problemas que tengo están relacionados con el código, ya que es tan gigantesco que ni siquiera sé por dónde empezar a hacer preguntas. Pero el profesor no sabe mucho sobre el código, así que tengo que preguntarle al posdoctorado cada vez que tengo preguntas sobre el código. Sin embargo, el postdoctorado ni siquiera sabe mucho del código (sabe C++, pero la mayor parte del código fue escrito por un postdoctorado anterior), y me dijo que debería enviarle un correo electrónico a ese postdoctorado anterior para responder a mis preguntas sobre el código.

He hablado con algunas personas sobre esto y me han dicho que es una situación muy mala. ¿Debo dejar este grupo y unirme a uno nuevo, incluso si eso significa que tengo que retrasar mi graduación por un semestre adicional (suponiendo que me graduaré a tiempo si continúo con este grupo actual)?

Ha pasado un mes desde que me uní a este grupo y espero terminar para la próxima primavera, pero no sé qué tan realista es esa meta.

Para mí, las preguntas clave son en qué tema/campo se supone que debe ser su tesis y qué significa exactamente " expandir el código ". Si " expandir el código " significa, por ejemplo, aplicar nuevos algoritmos y análisis en su campo STEM, entonces podría estar bien (pero aún variaría). Si significa arreglar/agregar cosas al azar a su base de código, no suena como un tema de tesis para una maestría en STEM.
En cuanto a lo que quiere decir con 'expandir el código', quiere que agregue una nueva función/análisis, para que maneje casos dinámicos, no solo estáticos. No es como si solo arreglara o agregara cosas al azar. Por cierto, mencioné en otro comentario anterior que no será fácil para mí pasar a otro grupo de investigación aunque me gustaría
Mi asesor sabe de C++ y programación orientada a objetos. Cuando le pregunté cuánto esfuerzo cree que tomará, solo dijo que depende de mí. Pensó que ya entendería el código lo suficientemente bien ya que le dije antes que tengo una cantidad decente de experiencia en programación (supongo que mentí al sobrestimar mis habilidades de codificación). Esto es considerando el hecho de que me uní al grupo hace un mes y no pregunté acerca de obtener documentación/comentarios del ex postdoctorado hasta hace poco. Por cierto, otros estudiantes me han dicho que no recomiendan trabajar con este asesor. Solo me uní porque no tengo otras opciones.

Respuestas (5)

Sería muy cauteloso al abordar este tema de tesis. Hay una gran cantidad de esfuerzo de programación aquí, pero no está tratando de obtener una maestría en ingeniería de software, por lo que necesariamente será un proyecto en el que pasará la mayor parte de su tiempo haciendo un trabajo que en realidad está fuera de su disciplina. Además, existe el riesgo de que nunca pueda comprender varios aspectos del código o que entienda mal las cosas y luego haga cambios que rompan el código.

Entonces, ¿debería dejar este grupo y unirme a uno nuevo? Si lo hago, mi graduación (suponiendo que me gradúe a tiempo si continúo con este grupo actual) se retrasará un semestre. Si bien es tentador irme, no solo por el código deficiente, sino porque me gustaría trabajar con mejores personas en un grupo de investigación, tampoco quiero retrasar mi graduación.
@csx Tengo que apoyar a Brian Borchers; esto suena como una empresa muy arriesgada. De hecho, en mi humilde opinión, esto no parece que deba ser un proyecto de tesis académica en absoluto (preveo que un proyecto de ingeniería de software sea más... sistemático y constructivo), sino algo por lo que te pagarían. Teniendo en cuenta cómo ha descrito la situación, yo personalmente aceptaría la demora.
A los asistentes de investigación de estudiantes graduados se les paga por trabajar 20 horas a la semana en un proyecto de investigación. Sin embargo, generalmente también tienen la oportunidad de hacer un trabajo que contribuya activamente a su tesis de maestría y resulte en una investigación publicable. Esto parece mucho trabajo con pocas posibilidades de hacer una investigación publicable. Eso no es un muy buen negocio para el estudiante.
Tengo la intención de ingresar a la industria después de completar la maestría, por lo que no necesito producir una investigación publicable. Y quiero trabajar en el modelado numérico después de graduarme, entonces, ¿quizás programar mucho sea bueno? Pero sí, no estoy interesado en obtener una maestría en ingeniería de software.
No será fácil unirse a un nuevo grupo. Para obtener la maestría, necesito completar 2 semestres de un curso de tesis y actualmente estoy en el primer semestre. Mi objetivo es obtener crédito por el segundo semestre completando la tesis la próxima primavera. Si me voy ahora, no recibiré crédito por el curso este semestre y puede afectar mi promedio general. Además, tendré que volver a tomar el primer semestre de este curso de tesis en la primavera y completar el segundo semestre en el verano Además, antes de unirme a este grupo, me tomó algunas semanas preguntar a muchos profesores, y solo fue esto profesor y un par más que estaban dispuestos a aceptarme
¿Qué planea hacer para su proyecto de tesis, ya que reescribir este código claramente no conducirá a una tesis?
En cuanto a lo que el profesor quiere decir con 'expandir el código', quiere que agregue una nueva función/análisis, para que maneje casos dinámicos, no solo estáticos. No es como si solo arreglara o agregara cosas al azar. Ese es nuestro plan para el proyecto de tesis. ¿Es esta una señal de que debo dejar este grupo?

Esta no es una respuesta completa de ninguna manera y está muy lejos de ser mi campo, pero me pregunto si existe la posibilidad de una alternativa antes de abandonar el barco. ¿Podría ir al posdoctorado existente y preguntarle si hay algún proyecto relacionado con el código base, que podría hacer en el tiempo disponible, que ayudaría a avanzar en su trabajo? Luego, llévale esa idea al supervisor y dile que la discutiste con el posdoctorado. Puede obtener un poco de supervisión informal y podría trabajar en una parte del código sobre la que podría recibir asesoramiento... si fuera técnicamente posible, todos estuvieran dispuestos, etc.

siento oír hablar de las dificultades. Yo también era estudiante de posgrado y la mayoría de mis amigos actuales con los que interactúo casi a diario son estudiantes de posgrado. Como señaló Greg, este escenario es muy común pero ciertamente está lejos de ser ideal. Entiendo muy bien sus preocupaciones ya que estuve en este escenario no hace mucho tiempo. Estaba depurando un código escrito por un postdoctorado anterior que estaba en C++ y solo era un novato en C++. Mi supervisor sabía que yo era un novato y no sabía mucho sobre los detalles del código. Sin embargo, solo estaba depurando el código, por lo que no necesitaba suficiente experiencia para agregar nuevas funciones. Al final, después de un par de meses de esfuerzo, pude arreglar el código. Esa fue mi historia.

Sin embargo, en tu caso hay 4 posibilidades:

1) Su supervisor prevé algunas funciones útiles, pero no tiene idea de cuánto esfuerzo implica implementarlas o piensa que puede que no requiera mucho esfuerzo, pero en realidad lo requiere. - (Mal escenario)

2) Su supervisor tiene una buena idea de cuánto esfuerzo es y necesita que lo haga para que pueda usar estas nuevas características en su trabajo (a continuación) y escribir una tesis basada en ello. - (No es un mal escenario a menos que tenga diferentes gustos por los temas en los que desea trabajar para su tesis).

3) Tu supervisor tiene una buena idea de cuánto esfuerzo es y necesita que lo hagas como algo útil para el grupo además de tu tesis. -(No es un mal escenario a menos que tome más de un mes o dos y absolutamente no pueda entrar en su tesis).

4) Tu supervisor tiene una buena idea de cuánto esfuerzo es y necesita que lo hagas porque será útil para el grupo y tomará varios meses y no te ayuda a avanzar en tu campo o no puede ir en tu tesis -(Mal escenario)

Ahora, debe averiguar en qué escenario encaja en términos generales. La forma de averiguarlo es discutir y hacer preguntas al posdoctorado en el grupo, así como a su supervisor. Solicite una reunión y discuta sus inquietudes (no se percibe como lo mejor que se puede hacer, pero en realidad es lo mejor que se puede hacer). Muchos estudiantes se preocupan de que sus supervisores los juzguen negativamente. Esta preocupación debe suspenderse ya que está en juego algo más grande. La comunicación adecuada eventualmente conducirá a buenos resultados y, a su vez, a un buen juicio de todos modos. Nuevamente, debe discutir y comprender cuán útil es este proyecto para usted. Luego, debe llegar a un consenso con los demás sobre cuánto tiempo se espera que tome y si vale la pena hacerlo. Por último, también debe discutir y poner algunas garantías en su plan, es decir,

Y otra cosa importante: Si el proyecto u otros posibles proyectos que podrías emprender en este grupo de investigación no te interesan en absoluto, entonces deberías buscar en otro lado.

Espero que esto ayude. Mis mejores deseos. Siéntase libre de hacer más preguntas en respuesta.

Mi asesor sabe de C++ y programación orientada a objetos. Cuando le pregunté cuánto esfuerzo cree que tomará, solo dijo que depende de mí. Pensó que ya entendería el código lo suficientemente bien ya que le dije antes que tengo una cantidad decente de experiencia en programación (supongo que mentí al sobrestimar mis habilidades de codificación). Esto es considerando el hecho de que me uní al grupo hace un mes y no pregunté acerca de obtener documentación/comentarios del ex postdoctorado hasta hace poco.
En cuanto a lo que quiere decir con 'expandir el código', quiere que agregue una nueva función/análisis, para que maneje casos dinámicos, no solo estáticos. No es como si solo arreglara o agregara cosas al azar. Por cierto, mencioné en otro comentario anterior que no será fácil para mí pasar a otro grupo de investigación aunque me gustaría
Mmm. Bueno, sí, depende de usted, pero su supervisor debería tener una idea de cuánto tiempo le tomaría a alguien con su nivel de experiencia. De todos modos, revisar el código no documentado de otra persona nunca es divertido a menos que seas un experto. Si tiene cierta confianza para seguir adelante con el proyecto, entonces podría estudiar el código un poco más y elaborar un plan para implementar las funciones que se le piden (o tal vez una fracción de ellas). Si siente que está haciendo un buen progreso en unas pocas semanas, continúe hasta que pueda. Si siente que no va a ninguna parte, entonces podría intentar cambiar de proyecto.

Como sé que algunas personas aquí pueden no estar completamente familiarizadas con la informática y la "documentación", incluyo esto para ayudar a las personas a comprender mejor el escenario.

El contexto

En algún momento de la vida, si trabaja con código, independientemente de si ingresa a la investigación o a la industria, es probable que se encuentre con magic code.

En la mayoría de los casos, las magic codeobras. Nadie sabe cómo ni por qué, y es probable que el desarrollador del mago original haya seguido adelante. Así que tenemos un producto que funciona, pero nadie conoce la metodología de encantamientos que se usó para producir los resultados.

Un ejemplo de magic code:

c=["6B8CFF","B13425","6A6B04","E39D25"];a='0155000555540ABEC02EFEFC2EBFBF2BFEA803FFF00A6A002A69A8AA55AAF9D76FFD557FF5555F0541502A00A8AA00AA';with(document)for(i=0;i<96;write('<br>')){h=('000'+parseInt(a.slice(i,i+=6),16).toString(4)).slice(-12);for(j=0;j<12;write('<rp style="padding:1 8;background:#'+c[h[j++]]+'"></rp>'))

Nadie, ni siquiera las personas con conocimientos de este lenguaje, sabrán instintivamente lo que hace este fragmento de JavaScript. Hace un dibujo de Mario

Escribiendo código como este, el desarrollador sabrá lo que está haciendo, pero nadie más lo sabrá. Es una técnica notablemente eficiente que ahorra tiempo y espacio si no tiene que explicarle a nadie lo que está haciendo.

La advertencia sobre el código sin comentarios es que en algún momento se desmorona y se vuelve imposible de mejorar o comprender. Alguien antes que usted probablemente tomó el código y lo codificó sobre el código original sin comentarios, y siguió pasando la documentación para que otra persona la manejara, es decir, ahorró tiempo ahora para un eventual costo de tiempo más adelante.

En este punto, parece que "más tarde" ha alcanzado una masa crítica, donde el progreso no puede continuar a menos que se haya documentado el progreso anterior.

Dejar el proyecto lo elimina del problema, pero el problema aún existe y aterrizará en el regazo de otra persona, y si el código es tan malo como usted indica, esta aplicación está a punto de morir.

lo que debe hacer al respecto

Debe reunirse con su asesor para discutir sus inquietudes, así como estos problemas:

  • Este código, si bien es funcional, no sigue la convención de codificación estándar y es probable que deba actualizarse a los estándares antes de que el desarrollo pueda continuar.
  • La documentación del código no documentado requiere mucho tiempo, pero en última instancia mejora los desarrollos futuros. La documentación puede tomar fácilmente un porcentaje justo del tiempo real dedicado a la codificación. Si este código se ha desarrollado durante 4 años, no me parecería irrazonable que una persona nueva se tome varios meses para documentar todo, o unas pocas semanas para documentar las cosas importantes, dejando intactas las entrañas.
  • Posibles proyectos alternativos, como el análisis retrospectivo y la mejora de la aplicación para obtener mejoras, mientras se corrobora el tema real con la forma en que lo maneja el código.
No creo que sus recomendaciones sean particularmente realistas. Hay razones por las que este código base se desarrolló sin seguir las buenas prácticas estándar , y es un escenario común en el mundo académico. Dadas esas razones, gastar mucho esfuerzo para arreglar este código base puede o no ser algo valioso para este grupo de investigación.

La respuesta corta a su pregunta es, sí, es realista en el sentido de que es un escenario común, y no, no es realista en el sentido de que puede perjudicar gravemente su carrera y es posible que no quiera involucrarse en un atolladero como este.

La respuesta larga: los científicos son notoriamente malos en el desarrollo y manejo de códigos. Como resultado, a menudo termina como códigos FORTRAN indocumentados de 30 años que solo se ejecutan en una máquina Win95. Puede sonar exagerado, pero solía tener una PC vieja porque cierto software solo podía compilarse con cierto compilador Fortran que tiene la última versión que ejecuta solo Win95 o sistemas anteriores. Por lo tanto, la situación es común y, obviamente, puede ser muy agotador arreglar todo esto. Si no crees que vale la pena el esfuerzo, no te metas. Por otro lado, hay casos en los que el código puede hacer magia y magia importante. En este caso, es una oportunidad para que te conviertas en un mago y un experto en una herramienta que muchos necesitan, pero que, por razones obvias, solo puede ser utilizada por muy pocos. En otras palabras, si es un programa importante, puede ser rentable a largo plazo.