{ Simplifica }
Un artículo de Rafa G. Blanes
Llevo muchos años estudiando (e implementando) todo lo relacionado con las prácticas de código limpio y de «refactorings», para lo que he escrito muchos artículos así como «El Libro Práctico del Programador Ágil» e impartido varias formaciones.
He descubierto que cuando un programador lleva varios años haciendo algo a «su modo», con sus vicios y virtudes, es muy difícil cambiar su forma de trabajar. Esto es totalmente humano: nos aferramos a lo conocido (aunque intuyamos que ahí afuera hay formas mucho mejores). Te vas a dar cuenta de ello si todos tus proyectos los haces más o menos de la misma forma.
Ignoro si es precisamente por haber roto la barrera de los cuarenta años, pero con el tiempo te vas dando cuenta de que se disfruta más de la vida (de tu hogar, de tu familia y amigos) evitando la complejidad y, quizá, instalando en el día a día cierta rutina productiva y creativa.
Esto es, por alguna razón misteriosa, solemos caer en ese error de creer que algo cuanto más complicado, mejor, cuanto más, aún mejor, sin pararnos a pensar en ello ni vislumbrar la posibilidad de que ese algo, sea lo que sea, se puede hacer de un modo más sencillo y con el mismo resultado.
Recuerdo con cariño a un antiguo compañero de trabajo de una etapa laboral anterior; era muy bueno técnicamente, lo que hacía funcionaba, y lo desarrollaba rápido, pero tenía el problema de que solo lo entendía él. Cualquiera que tuviese que asumir algunos de sus proyectos o librerías, tenía un problema serio.
También me he encontrado, a mi pesar, ciertas actitudes de profesionales que intentan hacer las cosas exageradamente complejas adrede (como si así su valor fuese mayor) y hasta clientes que, al percibir la complejidad de un producto, asocian extrañamente que también su valor es mayor.
Mi opinión es que más que añadir complejidad, hay que quitarla y buscar lo simple. Y aún mejor si es extremadamente simple: en tu trabajo, en la forma de abordar proyectos, y también hacer simple el resto de cosas de nuestra vida, las relaciones familiares, nuestro hogar, nuestros hobbies, etc.
Simple no quiere decir fácil, más bien lo contrario. Buscar la sencillez suele ser algo complejo, por extraño que parezca, al menos al principio.
En los últimos años he leído mucho acerca del minimalismo, «downshifting» y conceptos parecidos, para lo que recomiendo un título que me gustó especialmente: «El Arte de Vivir con Sencillez», de un monje zen japonés de nombre Shunmyo Masuno.
¿Y qué tendrá que ver esa filosofía de vivir de forma sencilla con el desarrollo de software?
Pues todo, porque en definitiva, volcamos en nuestro trabajo nuestro modo de pensar y de actuar. La mente dispersa de una persona poco disciplinada, que divaga, desconcentrada, cuyo escritorio de trabajo es un almacén de recuerdos desordenado y cuyo hogar muestra la misma falta de orden (y limpieza), necesariamente va a impregnar su trabajo creativo con su mismo modo de vida.
Sí, Charles Bukowski, por poner un ejemplo, era un gran escritor, pero también un alcohólico amargado y seguramente un cerdo como persona, pero dejemos a los genios como la excepción que confirma la regla.
De unos años hasta ahora, soy un apasionado de la sencillez y de lo simple, y con el tiempo he descubierto que en el desarrollo de software esto trae muchas más ventajas de lo que pueda parecer al principio.
Hacer un proyecto software sencillo no es trivial, es más, pienso que, al contrario de lo que parece, es algo bastante complicado para lo que hace falta mucha experiencia.
Pero también hace falta buscar la sencillez dedicándole tiempo y parte de las iteraciones de desarrollo.
«Esto ya funciona», me digo a menudo, pero «¿hay algún modo de simplificarlo aún más?»
En la realización de productos que lidero para la empresa que es mi principal cliente, siempre organizo «sprints» para mejorar esto y lo otro antes de avanzar con más funcionalidad y, como consecuencia, la velocidad posterior es mayor (cómo me cuesta trasladar esta idea a los responsables de equipos…).
No es un capricho, es más bien una necesidad, sobre todo en productos y proyectos que sabes que te van a acompañar mucho tiempo o que en algún momento tienes que delegar en otros. Cuanto más sencillo, más barato y fácil será su evolución y con más facilidad otros compañeros asumirán ese trabajo. Hazles un favor y déjales las cosas limpias y ordenadas, te lo agradecerán.
Si necesitas comenzar a delegar para crecer profesionalmente y asumir otro tipo de responsabilidades, todo irá mejor si aquello que delegas puede ser digerido fácilmente por otros. Es decir, esa búsqueda de la sencillez en lo posible, te permite más libertad.
Busco siempre soluciones sencillas, lo más sencillo que se pueda poner en práctica, sin sacrificar, claro está, las buenas prácticas y el buen diseño, hasta el punto en el que si veo un trozo de código con cierta complejidad, no me quedo tranquilo hasta que lo «limpio» y encuentro un modo de simplificarlo, algo que quizá casi nunca te lleva más de un minuto.
Curiosamente, al hacer ese trabajo, descubres que esa forma de afrontar la programación genera diseños más robustos, capaces de abordar muchísimo mejor los cambios en el futuro.
Piénsalo, ¿para qué complicarnos la vida cuando podemos vivir de un modo más simple e igualmente gratificante, o incluso más? ¿Por qué implementar algo de forma rebuscada cuando lo podemos hacer con una sencillez envidiable?
De vez en cuando, me gusta realizar el siguiente ejercicio: navego un poco por GitHub a la caza de proyectos que me llamen la atención. Entro en ellos y, sin saber exactamente qué hacen ni cómo, busco puntos de mejora evidentes (para hacerlos más sencillos), reconociendo rápidamente los «bad smells» (o «malos olores») y tratando de imaginar un modo de hacerlo un poco mejor, refactorizando esto o aquello, cambiando esto otro para que esté más limpio y legible.
En ocasiones, me encuentro con auténticas joyas en este sentido, proyectos admirables de desarrolladores con un código envidiable y muy trabajado. Por extraño que pueda parecer, te puedes preguntar… ¿cómo serán el escritorio y la casa de esta persona? ¿Habrá coherencia entre este magnífico trabajo y su modo de vida? Apuesto a que sí.
Añade sencillez a tu trabajo, a tu organización y metodologías, a tu código, a tu forma de expresarte y de comunicar tus ideas y tus presentaciones, al contenido de tus correos y multiplicarás los resultados de todo tipo.
Solo sobrevive lo simple, lo artificialmente complejo suele terminar abandonado.
«Como haces algo, así lo haces todo»
PD: Este es un capítulo (completo) de «El Arte del Emprendedor Digital».
PD2: También publicado en Medium.