El Algoritmo De Java Que Estuvo Roto 10 años
- 30 Aug, 2022
Algunos de los algoritmos de Java estuvieron rotos por casi 10 años. Así lo cuenta Joshua Bloch, uno de los creadores del lenguaje. Publicó este post en un blog de Google en el ya lejano 2006, con el título de “¡Extra, extra! Casi todos los mergesort están rotos”.
Comienza contando cómo, durante su clase de algoritmos para el PhD, les pidieron implementar un binary search, pero ninguna de las implementaciones estaba libre de errores. Y esto, en una clase de posgrado con gente bastante brillante, que en un futuro estaría creando cosas tan importantes como el lenguaje Java. Además, el profesor de esa clase era John Bentley, otro reconocido investigador e ingeniero del software, que es justo el autor de un libro bastante conocido llamado Programming Pearls.
Pues en este libro, el profesor también había cometido el mismo error que tenían los algoritmos de Java. ¿Cuál era el error? Bueno, pues en el post nos muestran el código que contiene el error, y el error está ahí, en la línea 6. ¿Puedes detectarlo? El error era un overflow, que ocurre cuando intentas almacenar un valor más grande que lo que tu tipo de dato soporta, en este caso, un entero. Parte del error era que, en los ochentas, cuando se escribió el libro Programming Pearls, era muy difícil que un array tuviera índices tan altos como para exceder el tamaño de un entero. Pero, pues, las ideas de algoritmos tan fundamentales como esos sobreviven por mucho tiempo.
Aún así, ahí no acaban los errores. Todavía en 2008 se publicó una corrección del post para arreglar una de las posibles soluciones que se habían propuesto si se implementaba ese algoritmo en C y C++. Pues esto es una gran prueba de lo difícil que es crear código 100% libre de errores para todos los casos. Por eso, en el post de Joshua Bloch nos sugiere implementar todas las medidas posibles para intentar asegurar la calidad del código, pero que, aún así, es más que probable que los bugs siempre vayan a estar con nosotros.
@mkfnx algoritmos de #algoritmos#java#softwarebugs#bugs#errores#programacionjava#ingenieriadesoftware