No es una broma, no podría soportar que esto ocurriera por cuarta vez, me está impactando mentalmente.
Esta línea es importante, porque muestra que sientes que es hora de cambiar. Muestra que reconoces esto como un patrón, y que te gustaría que el patrón se detuviera. Ese deseo es probablemente la parte más importante de la solución. Arreglar este tipo de situaciones a menudo implica cambiar la forma en que tú, tú mismo, piensas. Es imposible que alguien haga eso por ti, así que tu deseo de cambiar será lo único que haga que el cambio ocurra.
Para algunos antecedentes, he estado en situaciones similares de “demasiado bueno para codificar para mi trabajo” antes, aunque nunca en el grado que describes. Podría curar el cáncer con metaprogramación de plantillas en C++, pero muchos con los que trabajo apenas conocen los fundamentos del Diseño Orientado a Objetos. Escribí código que abusaba de SFINAE y empujaba contra la redacción exacta de las especificaciones de C++, cuando muchos proyectos en los que trabajaba todavía usaban versiones anticuadas y de bichos de gcc. Mi enfoque fue simplemente mostrarles lo asombrosas que son estas herramientas, y todos los problemas que podría resolver. Me encantaba explicar pequeños consejos de programación a la gente, y ellos lo disfrutaban en gran medida.
¿Le suena familiar?
“Sí, pero uno debe tener un buen nivel para entender [el código de Mik] porque los componentes están desacoplados de forma inteligente”
Considere esta afirmación desde una perspectiva basada en el riesgo. Tu jefe necesita mantener las cosas en marcha, sin importar qué. Si te vas a buscar una oportunidad de trabajo increíble, tu jefe aún tiene que asegurarse de que el código se mantenga. Lo que tu compañero de trabajo acaba de decir es que, si tienen que reemplazarte, ellos necesitan encontrar un codificador muy hábil, porque cualquiera que no sea tan bueno no podrá mantenerlo. Esto es un riesgo. ¿Qué pasa si no pueden encontrar un desarrollador lo suficientemente bueno, o no pueden permitirse pagarles lo suficiente?
Puede que hayas producido lo que llamarías “buen código”, pero la definición de “buen código” es muy dependiente del contexto. Lo que es “buen código” en Google, con sus formas de pensar vanguardistas, puede ser un código muy malo para alguien que trabaja en la FAA, que está predominantemente preocupado por la fiabilidad en lugar de mantenerse al día con la vanguardia. La definición de tu jefe de “buen código” incluye la capacidad de mantenerlo en todo tipo de situaciones, incluso sin ti. Si sus compañeros de trabajo no se sienten cómodos manteniendo su código, entonces usted es de repente una responsabilidad para la empresa, porque produce un producto que no pueden mantener si decide irse a otro lugar.
Desde esta perspectiva, se puede argumentar que usted los está forzando a aceptar su definición de “buen código”. Instintivamente, esto puede parecer algo bueno, pero está lleno de dificultades, como esta forma de pensar basada en el riesgo, en la que puede que no hayas pensado.
Tenemos una frase, “poner el carro delante del caballo”. Uno de los muchos significados asociados con ella es poner el contenido que más le interesa (poder usar sus técnicas avanzadas) por encima de las fuerzas que deberían estar tirando de él hacia adelante (la comprensión de estas técnicas por parte de su compañero de trabajo). Has escrito el código en este estilo avanzado, y luego has animado a los otros desarrolladores a “ponerse al día” con este estilo. Esto puede ser efectivo, pero si algo le sucede antes de que “se pongan al día”, la empresa se encuentra de repente en peligro porque nadie puede mantener el código.
¿Cómo puedo evitar esto en el futuro?
Arreglar esto puede ser algo terriblemente difícil porque implica abordar el problema de una manera diferente a la que normalmente se siente cómodo. En lugar de escribir primero el código en este estilo avanzado, y luego enseñar a tus compañeros de trabajo a pensar de esa manera, deberías darle la vuelta. Enseñe a sus compañeros de trabajo a gustar de ese estilo de codificación, y luego empiece a escribir código en ese estilo. Puede parecer al revés, pero es mucho más estable. Desde la perspectiva de un jefe, hay poco o ningún riesgo de que el equipo aprenda a codificar mejor. Una vez que codifican mejor, el estilo en el que quieren desarrollarse es de repente menos arriesgado.
Mientras tanto, tendrán que escribir código que, según sus estándares, es “menos bueno”, pero está bien. Tu código no es tu único producto aquí. Su otro producto está ayudando a enseñar a los otros desarrolladores, y el valor de eso puede fácilmente exceder el valor de escribir “código perfecto”.
Por supuesto, puede ser difícil decir cuando es seguro escribir código en el estilo que quieres escribir. Si fuera fácil de decir, ¡seguro que ya lo habrías descubierto! Una técnica poderosa que puedes usar es dejar que otros presionen por los estilos de codificación avanzados, en lugar de presionar por ti mismo. Una cosa es enseñar a alguien la diferencia entre herencia y composición. Una cosa completamente diferente es enseñarles lo suficientemente bien como para que aboguen por cambiar su base de código existente para ser más claro en su uso. El último caso realmente te hace saber que no sólo entienden el concepto, …pero que realmente lo acepten.
Un ideal para enseñar tales conceptos es no enseñar nada. Dejar que los estudiantes descubran algo, y entonces les señalas la dirección en la que el descubrimiento puede ir. Tal vez uno de ellos descubra algo claro sobre la herencia y puedas dirigirlos hacia el patrón de diseño de los Visitantes basado en lo que descubrieron. No les des simplemente un Visitante, sino que les des un sentido de dirección para que puedan salir y encontrar ellos mismos un Visitante.
Es un enfoque mucho más difícil, y ciertamente querrás encontrar un medio feliz entre eso y tu enfoque actual, pero puede ser muy gratificante. Más importante para su respuesta, puede proporcionar valor a la compañía sin el riesgo. Si usted está proporcionando valor a una empresa, y no poniendo la empresa en riesgo, usted virtualmente nunca será despedido. Y en los pocos casos en los que todavía puede ser despedido, la dirección le dará una razón para ello (como un descenso en la economía, o un cambio en la dirección de la empresa). Si lo haces muy bien, descubrirás que la gerencia, en cambio, comenzará a moldear tu camino, al igual que moldeas a tus compañeros de trabajo, y encontrarás una curiosa tendencia a haber aprendido justo la habilidad correcta justo cuando más la necesitan.