Mis pasatiempos no lo parecen
Se supone que un pasatiempo debe alejarte del trabajo. El mío se parece a trabajar gratis: escribir código open source. Esta es la historia de dmx-fun, una biblioteca de programación funcional para Java que empecé hace un año, y de por qué construirla es descanso y no obligación.
Un pasatiempo, se supone, sirve para alejarte de las actividades diarias del trabajo. Distraerte, descansar la cabeza, quizás aprender una habilidad que no tenga nada que ver con lo que haces de nueve a seis. Tocar un instrumento, correr, cocinar, armar un mueble. La idea es cambiar de aire.
Y sin embargo, mi pasatiempo favorito se parece sospechosamente a trabajar gratis: escribir código open source.
Cómo llegué aquí
Casi toda mi carrera profesional la he hecho en Java. La JVM ha sido mi casa durante años: el lenguaje, sus herramientas, su ecosistema, su forma de pensar. Uno se acostumbra tanto a un entorno que deja de verlo, como el pez que no nota el agua.
Hasta que trabajé, por primera vez, en otro lenguaje fuera de la JVM. En mi caso, Python. No voy a entrar en la eterna guerra de lenguajes: Python tiene virtudes enormes y por algo es lo que es. Pero la experiencia tuvo un efecto que no esperaba: me hizo extrañar Java. Extrañar su sistema de tipos, su forma de expresar intenciones, la sensación de que el compilador trabaja contigo y no solo mira. Salir de casa sirvió, sobre todo, para entender qué era lo que valoraba de casa.
A eso se sumó una inquietud que traía cargando desde hacía tiempo: siempre quise implementar mi propia biblioteca con construcciones de programación funcional. No usar una, sino construirla. Entender por dentro cómo se arma un tipo funcional, qué decisiones hay detrás, qué se gana y qué se paga.
Así que hace un año empecé a desarrollar dmx-fun.
Qué es dmx-fun
dmx-fun es una biblioteca que tiene un objetivo concreto: usar el sistema de tipos de Java y sus construcciones modernas para elaborar, encima de ellas, tipos funcionales. No pelearse con el lenguaje ni pretender que Java es otra cosa, sino apoyarse en lo que Java ya hace bien y llevarlo hacia el paradigma funcional.
Cuando arranqué me propuse atender cuatro temas principales. Un año después, buena parte de ellos ya son realidad.
1. Usar el Java más moderno
Decidí desde el principio que la biblioteca solo funcionaría con Java 25 y superior. Es una decisión deliberada y, para muchos, incómoda: recorta la base de usuarios potencial de golpe. Pero la programación funcional en Java se beneficia enormemente de las características recientes del lenguaje, y no tenía ningún interés en arrastrar compatibilidad con versiones viejas a costa de un diseño peor. Prefiero una biblioteca limpia para quien está en el presente que una llena de concesiones para quien se quedó atrás.
2. Documentación en serio
Muchas de las bibliotecas funcionales que existen tienen una documentación básica, a veces apenas el Javadoc y un par de ejemplos. Entiendo por qué: documentar es lento, poco glamoroso y nunca se siente terminado. Pero también es lo que separa una biblioteca que la gente usa de una que la gente admira de lejos. Contar con buena documentación fue, desde el inicio, un objetivo de primera categoría y no un pendiente para después.
3. Educar en el paradigma funcional
Este punto es, quizás, el más importante de todos. No basta con dar tipos y funciones: hay que explicar por qué la programación funcional importa. Por eso la biblioteca se apoya en un blog con artículos sobre temas diversos del paradigma funcional. La meta no es solo que alguien use dmx-fun, sino que entienda qué gana al pensar de esta forma. Una herramienta que no se comprende se abandona; una idea que se comprende se queda.
4. Construir un ecosistema
Una biblioteca y unos cuantos tipos no cambian la forma en que la gente programa. Para lograr adopción de verdad hay que integrar esos tipos con las bibliotecas y frameworks que se usan en el día a día, ahí donde la gente ya trabaja. Este es el tema más ambicioso y el que considero esencial: sin ecosistema, la mejor biblioteca del mundo se queda en un experimento elegante que nadie lleva a producción.
Un pasatiempo que no lo parece
Vuelvo a la pregunta del principio: si un pasatiempo debe alejarte del trabajo, ¿qué hago dedicándole mi tiempo libre a algo que se parece tanto a trabajar?
La respuesta, para mí, es que el descanso no está en dejar de programar, sino en programar sin las restricciones del trabajo. En dmx-fun no hay fechas de entrega impuestas, no hay que negociar el alcance con nadie, no hay que ceder en el diseño por presión de un calendario. Puedo perseguir la versión correcta y no la que cabe en el sprint. Puedo detenerme una tarde entera a entender bien un tipo antes de escribirlo. Ese lujo —el de hacer las cosas como creo que deben hacerse— es exactamente lo que el trabajo diario no siempre permite, y es justo ahí donde está el descanso.
Además, este pasatiempo cumple lo que se le pide a cualquier otro: me hace aprender. Construir tipos funcionales desde cero me ha enseñado más sobre el sistema de tipos de Java, sobre diseño de APIs y sobre el paradigma funcional que muchos años de usar bibliotecas ajenas. La distracción y el aprendizaje están ahí; solo que vienen disfrazados de trabajo.
Un año después, dmx-fun es prueba de que a veces el mejor pasatiempo es el que no lo parece.
Si te da curiosidad, el proyecto es open source y está en github.com/domix/dmx-fun. Pruébala, rompe cosas, abre un issue, mándame tus ideas: la mejor forma de que un ecosistema crezca es que más gente se sume a construirlo.