El jedi que sabía Hibernate

Confieso que cuando me dicen que evalúe de 1 a 10 mis conocimientos de Java dudo bastante qué poner.

Sable láser

Poner un 10 me parece excesivo. Sí, tengo buenos conocimientos de Java, conozco sus instrucciones, tengo un razonable conocimiento de la JDK y de la JVM, y sé leer el bytecode de un programa compilado para ver qué hace. ¿Es eso un conocimiento de 10? Bueno, un 10 representa la perfección. Si me dijeran que programase directamente en bytecode, habría de documentarme primero. Además, no conozco todas y cada una de las cuatro mil y pico clases de la JDK; siempre encuentro alguna función nueva que desconocía. ¿Es eso un 7? ¿Un 8? Ni idea. Por otra parte, hay mucha gente que no duda en poner un 10 y, seamos sinceros, hay más personas que se autoevalúan con un 10 que con un 8. Si yo no pongo un 10, parecerá que no domino suficiente. ¿Qué hacer? Siempre dudo.

Por si fuera poco, hay gente que ya no tiene suficiente con un 10: existen los gurús, los ninjas, los jedis de nuestros tiempos. Sus conocimientos ya no se pueden evaluar de 0 a 10; al parecer, hay que inventar una nueva categoría. Y no solo eso, ¡cada vez hay más! Regocijaos, porque sin duda es una señal de que la llegada del Javatar está próxima. ¿Tendré yo un nivel gurú y no me habré dado cuenta? Lo dudo.

A lo largo del tiempo, he visto gente que se autoevaluaba con nivel 10 de Java, incluso con un nivel gurú o que decían ser un Java Ninja, y he tenido la oportunidad de hacerles algunas preguntas. La realidad es que ninguno me ha parecido que dominase Java. Si pregunto para qué sirve volatile, la respuesta no puede ser «Esto lo vi en la certificación, pero ya no me acuerdo». ¿No estaba hablando yo con un gurú? Si sus conocimientos son de 10 o más, habría de saber todas las instrucciones de Java, ¿no? ¿O será que soy demasiado estricto?

Para mí, el problema es que si alguien dice que es un Jedi, tiende a creer que sus opiniones son las más válidas y no se le piden explicaciones. Después de todo, estamos hablando de un Jedi, los mismos que destruyeron la estrella de la muerte y liberaron la galaxia. ¿Qué podría ir mal con uno de ellos al mando?

Bueno, permitidme una historia personal. Una vez, en un proyecto en el que estuve, se encontró con un error de Hibernate. Esto no es de por sí raro; es normal encontrarse errores en librerías de terceros. En este caso, el error estaba en la cola de acciones (ActionQueue) de Hibernate. No quiero aburriros con los detalles; la cuestión es que, bajo ciertas condiciones muy pero que muy concretas, al lanzar una consulta, Hibernate fallaba con un ArrayIndexOutOfBoundsException. La solución era añadirle un parámetro particular (quitar el flush) a esa consulta y ya está. Pero no todo podía ser tan fácil: ese proyecto tenía unas librerías de arquitectura que eran las encargadas de lanzar las consultas, y esas librerías estaban a cargo de otra empresa que tenía un gurú de Hibernate como arquitecto. Y lo más importante, todos los jefes (que no sabían nada de Hibernate) creían que era un gurú y su opinión era canon. Resumiendo una historia de meses, el error no se corrigió porque no nos dejaba poner ese parámetro. En cambio, impuso una solución que leyó en StackOverflow, que era modificar el flush en toda la aplicación en lugar del de solo esa consulta. Si alguien entiende de Hibernate, ya se puede imaginar el impacto de ese cambio. Ni que decir tiene que su solución no funcionó. No funcionó porque el arquitecto no comprendía lo que sucedía; no entendía por qué fallaba Hibernate porque no entendía cómo funcionaba la cola de acciones. Sí, esa consulta en concreto ya no daba error, pero había otras consultas que hasta entonces no daban problemas y dejaron de dar el resultado esperado. Las siguientes correcciones no arreglaron nada, sino que hicieron que nos pusiéramos en modo «huida hacia adelante». Había correcciones sobre correcciones, y ya nada tenía sentido. No recuerdo el nombre del arquitecto, pero sí el apodo que le pusieron: «El Jinete del Apocalipsis».

Y aquí es donde quería llegar. Un gurú de Hibernate (y digo Hibernate como podría ser Java, Spring o lo que sea) es aquel que lo conoce todo sobre Hibernate. Conoce cómo funciona internamente, conoce sus clases principales; si tienen algún error, sabe crear un parche que lo solucione y, llegado el caso, sería capaz de volverlo a programar desde cero. ¿Sabes hacer todo eso? Entonces tienes mi respeto. Pero si no es así, siento decirte que no eres un gurú, no eres un ninja, y tus posibilidades de convertirte en Jedi y derrotar a Darth Vader tienden a cero.

Esta entrada fue publicada en Artículos. Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *