domingo, 10 de febrero de 2013

Reflexiones de un desarrollador web

Hay una canción de Jorge Drexler que dice: "Cada uno da lo que recibe y luego recibe lo que da, nada es más simple". Sin embargo, cuando uno está en el mundo del software libre, se suele recibir mucho más de lo que se da.

Eso es lo que me ha pasado con un proyecto que inicié hace ya más de 10 años y con el que he ido adquiriendo algunas deudas pendientes. Una de ellas es el presente artículo.

OpenClinic es el proyecto con el que desembarqué en el proceloso mundo web y en el cautivador desarrollo de software libre. Me sirvió para acabar mis estudios universitarios como PFC y me abrió las puertas para conseguir mi primer trabajo a jornada completa.

Desarrollo web

OpenClinic fue siempre un campo de juegos (entiéndase juego por aprendizaje) y pruebas para mí. Y por eso equivoqué el propósito de la aplicación. En lugar de atraer o buscar profesionales del espectro médico para evolucionar el proyecto, me concentré en los aspectos técnicos de programación para conseguir una especie de framework propio que me sirviera para hacer otras aplicaciones.

El año 2003, cuando ya tenía una versión bastante estable del programa, era una época ideal para haber explotado la idea. Era su momento, pero no supe ver cómo sacarle partido. Actualmente ya es demasiado tarde. Hay otros proyectos como Gnu Health, OpenEMR u OpenClinic GA (sí, ¡me han plagiado el nombre ;)!, era inevitable) que ya han cubierto el espectro con buenos productos.

Pero algo que conserva OpenClinic es su sencillez y sus escasas pretensiones. Supongo que por eso, a lo largo de todo este tiempo, la gente lo ha seguido descargando y, de vez en cuando, alguien me escribía acerca del estado del proyecto. Pero últimamente estaba recibiendo demasiadas quejas sobre problemas en la instalación. Esa ha sido la principal razón por la que 8 años después, he liberado una nueva versión.

La historia de OpenClinic ha ido muy de la mano de la historia de PHP. Cuando tuve la idea del proyecto (en la que ayudó mucho a modelarla Emilio Cazcarra) y de encaminarlo hacia la web, no tenía ni la menor idea de qué tecnologías usar. Descubrí Perl y empecé a estudiarlo cuando, casi por casualidad, me encontré con PHP. En el año 2002 era uno de los proyectos de moda y me convenció desde el principio como lenguaje para el backend. Aunque la primera versión de PHP4 se publicó en el año 2000, era la versión 3 la que por entonces predominaba tanto en aplicaciones como servidores de hosting.

Cuando tuve que decidirme por una de ellas, opté por la más nueva: PHP4. Ya que tenía que aprender un nuevo lenguaje de programación, lo más sensato era estudiar la última versión. Para cuando estuviera en condiciones de terminar la aplicación, al ritmo que se desarrollaba PHP, habría una versión muy estable del intérprete. Y no me equivoqué.

Pero hacia mediados de 2004, liberé OpenClinic 0.7 (eternamente beta) y ahí terminé su evolución. Como he dicho antes, no supe encaminar la adquisición de nuevas características al programa y por eso me concentré en aspectos más técnicos a partir de entonces. Tal vez por eso, aunque seguía con el desarrollo no veía razones de peso para publicar nuevas versiones (no aportaban nada nuevo en cuanto a funcionalidad para los usuarios).

En aquel mismo año, 2004, nació PHP5. Al contrario que con el cambio de PHP3 a PHP4, que fue rápidamente adoptado por los proyectos más importantes que usaban PHP y por los servidores de hosting, el cambio a PHP5 fue traumático y tortuoso para todos. A nivel personal, no lo empecé a usar hasta que me interesé por Zend Framework hacia el año 2007 (¡nada menos que 3 años después de la primera versión de PHP5!).

Pasados los años, OpenClinic adolecía de dos graves problemas:

  • No estar basado en PHP5 (que es la versión actual, desde hace muchos años, del lenguaje).
  • Y el más grave: no estar programado en un framework de desarrollo.

Adaptar el código a PHP5 (en cuanto a sintaxis, no en metodología) no ha sido muy costoso. El problema radicaba en que no era muy sencillo alojar en un mismo sitio web aplicaciones con PHP4 y PHP5.

Este último fue un grave error de concepto. Quería convertir OpenClinic en un framework. En aquella época (la del PHP Far West), cuando el lenguaje recibía constantes críticas por no ser demasiado estricto en sus formas, cada aplicación de cierta envergadura estaba hecha en un framework propio para intentar poner algo de orden en el caos. No es extraño que también cayera en ese error (intentar reinventar la rueda) pero no me di cuenta a tiempo y es algo que ha perjudicado al proyecto. Tanto que ha firmado su certificado de defunción. Si hubiera estado basado en un framework, entre otros aspectos positivos, habría sido más fácil que otras personas hubieran contribuido añadiendo funcionalidades.

Software libre

Pero no todo ha sido tan negativo. De hecho, el proyecto, como he empezado diciendo, me ha dado mucho más de lo que le he dado. Y me lo ha podido dar porque es software libre y porque está basado en tecnologías libres:

  • PHP como lenguaje de backend,
  • HTML como lenguaje de marcado,
  • CSS para la capa de diseño,
  • JavaScript para la capa de interacción,
  • MySQL como servidor de base de datos (aunque ha ido cambiando su status a lo largo del tiempo...),
  • gettext para las traducciones,
  • y Docbook para la documentación.

Para aprender todas estas tecnologías sólo he tenido que invertir tiempo. Los recursos están disponibles de forma libre (y gratuitos muchos de ellos). Y los beneficios obtenidos siguen siendo constantes y consistentes. Además, ha habido algunas personas que han podido contribuir, generando traducciones y temas CSS para la aplicación.

Y pese a los problemas mencionados, las críticas han sido bastante satisfactorias. La aplicación ha tenido unas 20.000 descargas y de vez en cuando me encontraba algún dominio en Internet con el programa funcionando. También me han escrito personas que lo han estado usando en ONGs en países en vías de desarrollo. Todo lo cual contribuye en una recompensa personal inmensa. Al fin y al cabo, uno desarrolla software para que las personas lo usen.

Conclusiones

A día de hoy no haría las cosas como las hice, pero eso lo puedo decir ahora porque las he hecho de esta manera. Uno aprende o sucumbe, no hay término medio.

Si algún vez vuelvo a rehacer la aplicación (no sería la primera vez...):

  • lo haría con un framework de desarrollo,
  • lo haría en un repositorio público de código desde el principio,
  • independizando totalmente el motor de base de datos del código de la aplicación,
  • pediría abiertamente ayuda a la gente para que colaborara, incluso dejando la dirección del proyecto a otros que se involucraran más.

Mientras tanto, sigo dedicando mis esfuerzos a otros proyectos de software libre. Uno de ellos es migasfree y, aunque tiene muchas cosas que mejorar, ya he empezado a poner en práctica mis conclusiones.

Actualización: 2013-02-23

Traducción del presente artículo al inglés, publicado amablemente por Rich Bowen.