¿Cómo hacer frente mentalmente a un trabajo muy largo [cerrado]

8

Este es mi primer trabajo en la industria de los juegos y mi tarea es sacar un componente principal del juego y poner uno más nuevo.

Hasta ahora han pasado 5 semanas, y todavía estoy mirando los errores. Creo que pueden pasar meses antes de que pueda compilarse. Realmente me está deprimiendo. Solo estoy cambiando las cosas, realmente no estoy escribiendo nada yo mismo. Es interminable. Arreglo mil errores y nueve mil toman su lugar.

Estoy seguro de que esto debe ser algo común, así que me preguntaba, ¿cómo lidiar con esto? No parece que pueda dividirlo en pequeños trozos.

Sir Yakalot
fuente
3
Eeek ¿Quién escribiría un código tan malo que tomaría meses solo compilar? Es posible que desee repensar cómo va a hacer eso ... Una vez que compile estará lleno de errores lógicos.
MichaelHouse
77
Esta pregunta probablemente sea más adecuada en programmers.stackexchange.com (si es que existe)
George Duckett
3
@GeorgeDuckett Se podría proporcionar una respuesta específica de la industria de los juegos a esta pregunta que trata problemas que solo se encuentran en la programación de esta industria. Citado textualmente, la parte de las preguntas frecuentes que decide si las preguntas de código pertenecen aquí o en SO también ofrece sabiduría aquí: ¿Me daría un desarrollador de juegos profesional una respuesta mejor / diferente / más específica a esta pregunta que otros programadores? En caso afirmativo, no dude en preguntar aquí.
doppelgreener el
55
También voto por esto como una pregunta general de programación. Está refactorizando un gran desorden de código, que resulta ser un juego. Necesita consejos generales de programación / refactorización, no consejos de desarrollo de juegos.
Tim Holt
1
¿No se puede migrar esta publicación y sus respuestas en lugar de solo cerrarse?
SirYakalot

Respuestas:

21

Bienvenido a la industria del juego :)

Entonces estás haciendo una refactorización masiva. La refactorización masiva es malvada, pero ese no es el tema. Probablemente te dieron esta tarea para poner a prueba tus nervios de todos modos, así que no te rindas.

Mi respuesta es: usted tiene que descomponerlo en pequeños trozos. Será su rutina diaria en unos pocos meses, por lo que debe aprender a dividir y conquistar. Básicamente es tu trabajo. Algunas sugerencias

  • Asegúrese de comprender lo que se supone que debe hacer este componente . Juegue con lo que tiene que sacar y vea qué hace, pregunte a sus colegas si sus suposiciones son correctas.

  • Estás reescribiendo este módulo por una razón. Puede que no sea obvio para usted, pero si se le asignó esta tarea, lo más probable es que haya algo tan malo que la gente sienta que es mejor comenzar de nuevo. Pregunte: ¿cuáles son esos defectos ?

  • Intente encontrar la característica principal del componente que está reescribiendo, su esencia, la razón por la que existe, y comience por hacer que este funcione. Debe ser muy pequeño, tan pequeño como puedas. Pregúnteles a sus colegas qué creen que sería esta característica. Si es un sistema GFX, simplemente haga que muestre un polígono. Si se trata de un sistema de animación, simplemente coloque un hueso correctamente. Si es un sistema de IA, solo haz que reproduzca una animación. Etc. etc. Simplemente tira a la basura todo lo que se interponga y te dé todos esos errores desalentadores. No se preocupe por los detalles, solo haga que esta característica central funcione tan rápido como pueda. Su implementación será fea, llena de errores, hacks y números mágicos y no dejaría que nadie le eche un vistazo a su código, pero eso no es un problema.

  • Una vez que tenga esta característica principal, ya comenzará a sentirse mejor. Es esencial ver el resultado de su trabajo lo antes posible 1) para su moral 2) para poder probarlo. Entonces, pruébalo, pruébalo, tómalo . Si se bloquea o muestra algún error realmente malo, corríjalo. Es el corazón de su módulo, así que modifíquelo un poco y límpielo hasta que se sienta cómodo con él.

  • Luego muéstralo a tus colegas y pregúntales si eso es lo que necesita el juego. Solicite una revisión del código : sus colegas probablemente le informarán sobre muchas cosas en las que no pensó. Tendrá que refactorizar nuevamente para asegurarse de que su implementación se ajuste a lo que quiere el resto del equipo.

  • Luego, cuando se sienta listo para ello, elija una de las otras características que descartó anteriormente, enjuague y repita. Haga que funcione lo más rápido posible, vuelva a trabajar, solicite una revisión, vuelva a trabajar.

Tengo que poner el énfasis por última vez en esto: comunicarme . Pregúntele a sus colegas, no solo a su líder, no solo a los programadores, a todos los que usarán, probarán o evaluarán este sistema. No tema hacer preguntas estúpidas: en caso de duda, siempre es mejor obtener la información en este momento que esperar semanas para una reunión o una revisión.

La realidad de la programación de juegos es que no vas a crear nuevos sistemas brillantes todos los días, es un trabajo para mantener el enfoque y hacer las cosas de manera rápida y eficiente. ¡Ponte en forma, ponte a trabajar y buena suerte!

EDITAR

Hay información adicional que encuentro útil en el comentario de Leo y la respuesta de Dhasenan, estoy descaradamente averiguando eso para completar esta respuesta.

No escribí sobre cómo lidiar con las interdependencias . El módulo que está reescribiendo probablemente esté profundamente acoplado con el resto del juego, es por eso que obtiene tantos errores al cambiar algo. Entonces hay dos soluciones:

  • Si solo hay algunas dependencias, entonces tienes suerte. El módulo antiguo y el nuevo se pueden mantener en paralelo durante un tiempo, incluso puede tener un interruptor para sus usuarios para que puedan decidir cambiar entre el módulo antiguo y el nuevo cuando lo necesiten. Simplemente coloque un interruptor en algún lugar, en un archivo de configuración o en un menú de depuración, y úselo donde sea que su módulo esté conectado al resto del juego. Cuando su nuevo módulo esté listo para la producción, active el interruptor de forma predeterminada. Más adelante, cuando el módulo anterior ya no se use o cuando la producción deba continuar, retire el módulo anterior y el interruptor.

  • Si hay muchosdependencias, debe desconectarlas y volver a enchufarlas una por una. Intente mantener ambos módulos en segundo plano, y cada vez que tenga una nueva función para trabajar, cambie al nuevo módulo para esa función. Es decir, desenchufe y vuelva a enchufar lo que está relacionado con esta función. Le llevará algo de tiempo porque probablemente sea más trabajo que cambiar solo una llamada de función: algunas estructuras de datos pueden cambiar, el flujo del programa puede cambiar, etc. Pero aún es mejor que reescribir todo una vez y tomar semanas para matar a la bestia de compilación. Si eso es realmente imposible mantener tanto el módulo antiguo como el nuevo en paralelo porque su módulo es tan vital para el juego, puede considerar reescribirlo en su lugar. Pero tenga en cuenta que esto podría significar que si los defectos están en la interfaz del módulo anterior, terminará con los mismos defectos. De todos modos, si esto sucede,

Si hay algo específico en el desarrollo de videojuegos, es esto: no estamos haciendo ciencia espacial, o un trabajo de investigación complicado, somos parte de un proceso creativo. Al hacer algo, debes crear una primera versión lo más rápido posible para que pueda ser probada, jugada, desaprobada y modificada. No puede pasar semanas haciendo "un trabajo muy largo" sin entregar un poco.

Laurent Couvidou
fuente
Buena respuesta, claramente aplicable no solo a los juegos sino a cualquier proyecto.
Tim Holt
1
+1, punto clave para mí: no solo prueba , sino que tortura el código :) Para mí, este es un excelente consejo.
Stefan Hanke
55
+1, TIENES que dividir una gran refactorización en pequeños fragmentos. Estoy completamente de acuerdo en que es la única forma de completar una refactorización masiva. Idealmente, cambie el código fragmento por fragmento, asegurándose de que cada cambio deje el sistema funcionando (esto reducirá mucho la cantidad de errores). Si esto es imposible para la funcionalidad completa, al menos hágalo para alguna funcionalidad central. Cambiar todo a la vez es una forma segura de crear toneladas de errores difíciles de encontrar.
Leo
1

Tienes que dividir tu tarea, pero nadie te ofrece consejos sobre cómo hacerlo.

  • ¿Los módulos nuevos y viejos funcionan juntos? Es decir, ¿puedes compilar tu proyecto con ambos? Esto le permitirá al menos compilar y probablemente ejecutar pruebas automatizadas en algunos hitos.
  • ¿Estás escribiendo el nuevo módulo? ¿O es el antiguo código que tienes? Vuelva a escribir en su lugar (en la medida en que la API externa siga siendo la misma). Si arregla una función a la vez, debería poder continuar usando la API mestiza combinada, hasta cierto punto.
  • ¿Hay otros proyectos en la compañía que harán una transición similar? Escriba envoltorios alrededor de estos módulos para facilitar el proceso la próxima vez. Puede valer la pena hacer esto mientras tanto.
  • ¿Puedes comentar o evitar compilar fragmentos de tu cadena de dependencia? Si tiene medio millón de líneas de código en total, tal vez pueda dividirlo en veinte fragmentos que se compilan de forma independiente, hacer que uno funcione en un par de semanas y luego pasar a la siguiente. Tal vez no sean fragmentos completamente independientes todo el tiempo, pero luego puede hacerlo en orden de dependencias.

Además: solicite asesoramiento a su gerente. Probablemente comenzaría describiendo el problema: está tardando tanto en compilar las cosas correctamente que es difícil realizar un seguimiento de los cambios, lo que dificultará la depuración una vez que tenga algo que pueda probar. Luego mencionaría una posible solución y preguntaría: "¿Cómo me recomiendan implementar esta solución, o hay una mejor manera de hacerlo por completo?"

dhasenan
fuente