Hay tres cosas aquí:
Principios
Este es un lado de la moneda. Hasta cierto punto, creo que es bueno insistir en corregir errores (o implementaciones incorrectas, incluso si "funcionan"), incluso si nadie lo nota.
Míralo de esta manera: el problema real no es necesariamente el error, en tu ejemplo, sino el hecho de que un programador pensó que era una buena idea implementar el bucle de esta manera, en primer lugar. Era obvio desde el primer momento que esta no era una buena solución. Ahora hay dos posibilidades:
-
El programador simplemente no se dio cuenta. Bueno ... un programador debe desarrollar una intuición de cómo se ejecuta su código. No es como la recursión es un concepto muy difícil. Al corregir el error (y sudar a través de todo el trabajo adicional), tal vez aprende algo y lo recuerda, aunque solo sea para evitar el trabajo adicional en el futuro. Si la razón es que simplemente no tuvo tiempo suficiente, la administración podría aprender que los programadores hacen necesitan más tiempo para crear un código de mayor calidad.
-
El programador lo notó, pero lo consideró "no es un problema". Si se deja reposar, entonces se desarrolla una cultura de laissez-faire que, en última instancia, conducirá a los errores donde realmente duele. En este caso particular, a quién le importa. Pero, ¿qué pasa si el programador está desarrollando una aplicación bancaria la próxima vez y decide que una cierta constelación nunca sucederá? Entonces lo hace. Malos tiempos.
Pragmatismo
Este es el otro lado. Por supuesto, es probable que, en este caso particular, no corrija el error. Pero cuidado, hay pragmatismo, y luego hay pragmatismo. Un buen pragmatismo es si encuentra una solución rápida pero sólida y bien fundada para un problema. Es decir, evitas diseñar cosas en exceso, pero las cosas que realmente implementas aún están bien pensadas. El mal pragmatismo es cuando simplemente se piratea algo que funciona "solo así" y se romperá en la primera oportunidad.
Fallo rápido, falla duro
En caso de duda, falle rápido y falle.
Esto significa, entre otras cosas, que su código advierte la condición de error, no el entorno.
En este ejemplo, lo menos que puede hacer es hacerlo para que no se produzca el error de tiempo de ejecución duro ("profundidad de pila excedida" o algo así), al reemplazarlo por una excepción dura de la suya. Por ejemplo, podría tener un contador global y decidir arbitrariamente que se rescatará después de 1000 videos (o el número que sea lo suficientemente alto como para que nunca ocurra en el uso normal y lo suficientemente bajo como para que funcione en la mayoría de los navegadores). Luego dé a esa excepción (que puede ser una excepción genérica, por ejemplo, un RuntimeException
en Java, o una cadena simple en JavaScript o Ruby) un mensaje significativo. No tiene que ir al extremo para crear un nuevo tipo de excepciones o lo que sea que haga en su lenguaje de programación particular.
De esta manera, tienes
- ... documentó el problema dentro del código.
- ... lo convirtió en un problema determinista. Usted sabe que su excepción sucederá. No está en el capricho de los cambios en la tecnología del navegador subyacente (piense no solo en el navegador de la PC, sino también en los teléfonos inteligentes, tabletas o tecnología futura).
- ... hizo que sea más fácil solucionarlo cuando eventualmente lo necesite. La fuente del problema se señala en su mensaje, obtendrá un retroceso significativo y todo eso.
- ... aún no pierde el tiempo haciendo el manejo de errores "real" (recuerde que nunca espera que ocurra el error).
Mi convención es prefijar dichos mensajes de error con la palabra "Paranoia:". Esta es una señal clara para mí y para todos los demás de que nunca espero que se produzca ese error. Puedo separarlos claramente de las excepciones "reales". Si veo uno como ese en una GUI o en un archivo de registro, estoy seguro de que tengo un problema serio: después de todo, nunca esperé que ocurrieran. En este punto, entro en modo crítico (con una buena posibilidad de resolverlo de forma rápida y bastante fácil, ya que sé exactamente dónde ocurrió el problema, lo que me ahorra una gran cantidad de depuración falsa).