Reinventando la rueda
Visita este artículo en http://www.estadobeta.com/2007/06/20/reinventando-la-rueda/
Por Ismael en Desarrollo, Patrones de diseño, artículosAcabo de leer un post en el blog de Juque (el post tiene ya unos días, todo lo que se pierde uno por cerrar NetNewsWire por un rato!) donde Juan Pablo anuncia su intención de construir su propio CMS. En los comentarios se habla, con cierta luz negativa, de “reinventar la rueda”, refiriendose a que ya hay toneladas de CMS estables y es recomendable usar uno de esos (Wordpress, TextPattern, etc).
Mi sitio personal, ismaelcelis.com, ha usado distintas versiones de mi propio CMS desde su creación en 2004. Hace un tiempo, comentando en un foro ideas para contruir una nueva versión, me sorprendió la reacción de varios desarrolladores criticando mi intención de “reinventar la rueda” en lugar de colaborar con paquetes ya existentes.
No puedo estar más en desacuerdo!

Así se veía el panel de control del primer ismaelcelis.com. Nada bonito, pero funcionaba.
No hay mejor forma de aprender que haciendo todo tu mismo. De acuerdo, no es lo más eficiente y, si estas haciendo algo para un cliente, andate con la opción más práctica (si me preguntan, diría por supuesto Ruby on Rails. Si no se puede, cualquier cosa que implemente bien MVC, en el lenguaje que sea).
Cuando hice la primera versión de mi sitio mi intención era básicamente forzarme a aprender más de Orientación a Objetos (con las limitaciones que PHP tiene en esa area, por supuesto). Entonces no sabía nada de Patrones de Diseño, pero la experiencia me permitió entender mejor las relaciones posibles entre clases y objetos y, como es natural, llegar a la definición de mis propios patrones para separar lógica, acceso a datos y presentación. Los Patrones de Diseño, después de todo, no son más que la sistematización del sentido común en base a la experiencia. Si hubiera decidido usar una herramienta “llegar y usar” o un framework ya hecho, seguramente hoy sabría igual de poco que el 2004, o mi conocimiento estaría amarrado a esa herramienta específica. Hay que tener cuidado con eso: se puede ser un excelente usuario de un framework y, al mismo tiempo, no saber nada de programación. No es un panorama atractivo para mi.

Panel de administración actual de ismaelcelis.com. Muy mejorable aún, pero a años luz del primero!
Cuando por fin me topé con MVC y los Patrones de Diseño, la experiencia de haber construído mi propio CMS me permitió entrar con mejor pie a este mundo nuevo, que puede considerarse una segunda fase en mi carrera. No sólo eso: para la segunda versión de mi sitio (que siempre ha sido mi caja de arena personal) me decidí a hacer mi propio framework MVC, desde 0. Durante meses, luego de la pega, me dediqué metódicamente a hacer, primero, un sistema de controladores modulares (por si preguntan: los patrones Front Controller y Page Controller), luego, un ORM o modelo, una clase que representa e interactúa con los datos almacenados en una base de datos u otra fuente, también conocido como ActiveRecord. Terminado eso, implementé una sencilla clase “Template” donde el Controlador delegaba la generación de plantillas HTML usando simples require PHP y una convención de nombres. Cierto: el resultado es menos que perfecto, y por cierto incompleto, pero esa nueva experiencia me permitió, tiempo después, saltar a Ruby on Rails sin demasiados traumas y, más importante, acceder a nueva documentación y discusiones que antes sólo podía tratar de entender. Más aún, las aplicaciones que estamos desarrollando en Aardvark son de un nivel que hace tan sólo unos años apenas podía soñar.
Todavía queda mucho por aprender, eso es lo más motivante de todo!.

Una de las aplicaciones que hemos desarrollado en Aardvark. ¿Se ve mejor? Funciona mejor también.
Así que: reinventar la rueda es bueno y recomendable. Lo voy a decir de nuevo. Reinventar la rueda es bueno y muy recomendable. No hay mejor forma de verdaderamente entender software ajeno que contruyendo tu propia versión y enfrentando los mismo problemas que los otros tuvieron que enfrentar. A veces este dogma Open Source de “no reinventes la rueda” se pisa la cola al olvidar que, para ser un dearrollador de primera clase con aportes reales al movimiento, tienes que emprender tu propio camino de aprendizaje. Yo estoy todavía a mitad de camino, pero la única explicación para mi tránsito de Egresado de Artes a Desarrollador Web es que he decidido, cada vez, enfrentar el desarrollo de software como un desafío de aprendizaje contínuo en lugar de pararme sobre los hombros de quienes ya hicieron el trabajo.
- Servicios:
- Comentarios RSS
- Menear!
- Del.icio.us

6/20/2007 at 9:57 pm
Como tu sabes (eso creo) trabajo en Blue Company en el desarrollo de Bligoo, y uff que hay pega por hacer.
Cuando me hablaron de Bligoo pensé justamente que estaban reinventando la rueda, pero en la práctica me he topado con reuniónes muy cabezonas en donde realmente estamos inventando una nueva experiencia para el usuario.
Por eso estoy de acuerdo contigo, y lo que dices se aplica en todo.
Saludos
6/21/2007 at 1:52 am
Estoy absolutamente de acuerdo contigo en que el proceso de programar un CMS propio es una de las experiencias que más te puede hacer aprender en el mundo de la programación web. En ese sentido nos pasó algo parecido a tí: empezar a programar un gestor de contenidos analizando, utilizando patrones, etc.. nos permitió evolucionar mucho a nivel de programación.
Pero también estoy totalmente convencido es que a nivel comercial / empresarial el desarrollo de un CMS puede suponer la ruina de una empresa de desarrollo web pequeña o mediana. Requiere una inversión en I+D desorbitada y ya sabemos todos lo dificil que es hacer rentable un proyecto de desarrollo web.
Y creo que es evidente la imposibilidad para una pequeña empresa de llegar al nivel de Typo3, Drupal o Wordpress principalmente porque éstos (al menos los dos primeros) cuentan con la colaboración de cientos o miles de programadores al basarse en la filosofía Open Source en el desarrollo de su núcleo y todos se benefician de los plugins o extensiones que hacen los miembros de su comunidad.
6/21/2007 at 8:47 am
Muy de acuerdo contigo. Nada mejor que escribir lo tuyo :), a tu gusto y de acuerdo a tus necesidades.
Yo estoy en pleno desarrollo de un CMS, después de varias versiones de uno que ya tengo y uso actualmente, lo cual me vino muy bien para aprender y pensarlo de forma mucho más madura.
Aparte, los CMS existentes están pensandos como plataforma de propósito general, lo cual hace a veces que no sirva para nada o para que sirva, tenés que implementarle varios plugins que terminan por volver la aplicación insegura y pesada.
El modelo de pluggins es muy cómodo, pero demasiado pesado al menos en los lenguajes de scripting, caso PHP. WordPress implementa plugins para todo, incluso para cosas que perfectamente podrían ser nativas (algunos filtros por ej,). Cada instancia de Wordpress consume alrededor de 5 Mb de RAM. Lo que me parece exorbitante.
Un CMS que he programado con funciones más o mnenos similares, está en el orden de los 700Kb.
Pudiera ponerme a mejorar Wordpress (o cualquier otro CMS), pero lo que tardaría tratando de “entender” como funciona y como está implementando, sería prácticamente el mismo tiempo que me tomaría implementar uno desde 0.
No descarto el uso de estos CMS, incluso lo uso para ciertos proyectos. Pero pienso migrar todo en cuanto termine mi nuevo CMS.
6/21/2007 at 10:17 am
Estoy de acuerdo, pero hay que acordarse que en programacion no hay ninguna o hay muy pocas leyes que se cumplen en un 100%.
En general son consejos que debemos razonar y saber cuando utilizarlos, entender el concepto y porque es asi.
La rueda se ha reinventado durante toda la historia en especial desde la llegada del automovil. Pasando por aquella prehistorica rueda de piedra, la de los carros de madera, hasta los neumaticos avanzados de hoy en dia.
Sin embargo, el concepto de la rueda se sigue manteniendo que es lo que hay que entender.
6/21/2007 at 10:28 am
Amén.
En este negocio he aprendido una cosa hace mucho: Si te quedas con lo poco que sabes tarde o temprano sucumbes, te reemplazan, expiras. La principal razón de comenzar desde 0 otra vez es aprender, refrescar mi conocimiento… en este sentido tu razonamiento no me puede representar mejor.
6/22/2007 at 7:16 pm
Si. Francamente, si no pudiera lograr ese entusiasmo constante de aprender cosas nuevas, o el orgullo de hacer coas que funcionan por mi mismo, no estaría en este rubro. Me ha costado, pero con el tiempo he logrado aprender a decirle NO a proyectos que no me ofrecen esos ingredientes.
6/22/2007 at 10:13 pm
Estoy de acuerdo en algunos puntos contigo Ismael.
Como un ejercicio de aprendizaje y reforzamiento de conocimiento siempre es bueno tratar de implementar por nuestra propia cuenta algun proyecto como lo que tu hiciste con tu propio CMS. Me imagino que ha sido una tarea compleja por que hiciste tambien tu framework MVC que ahora te permite comprender mejor los Patrones de Diseño y su importancia lo cual tambien te permitio saltar luego a Ruby on Rails sin muchos traumas.
Pero creo que dejando a un lado el aspecto didactico es mejor utilizar un framework que este documentado, tenga el soporte de la comunidad y una base aceptable de usuarios. Lo cual nos permitiria dejar a un lado el desarrollo y mantenimiento del framework y concentrarnos en la tarea que tenemos que resolver en ese momento.
Y solo quiero aclarar que no estoy diciendo que no “Reinventemos la Rueda” si no que utilicemos los materiales ya disponibles, en este caso un framework, que nos permitan hacer nuestra rueda mejor aprovechando la experiencia de otros y agregando todo aquello que haga falta para que nuestra “Rueda Reinventada” gire más rapido y mejor.
6/23/2007 at 1:42 am
De acuerdo. Por esas razones trabajo con Rails
6/28/2007 at 8:29 am
Ismael, concuerdo 1000% con lo que dices. Yo voy algo más atrás que tú en este largo camino de desarrollador, pero he seguido más o menos los mismos pasos… también hice mi propio cms hace unos años atras, también hoy estoy haciendo aplicaciones que hace un tiempo ni me hubiera imaginado… y tampoco estuidié programación sino que Pedagogía en Castellano…
Saludos
6/28/2007 at 9:53 pm
Y que hace la ultima aplicación?
6/28/2007 at 11:23 pm
Es un administrador de catálogos online, multisitios, orientado a lo que nos pedían muchos clientes: mucho más sencillo que osCommerce pero más flexible que Shopify.
Estamos trabajando en el sitio del proyecto.
7/2/2007 at 6:18 pm
Conozco poco de programacion,tienes razon cuando dices.”No hay mejor forma de aprender que haciendo todo tu mismo”. Gracias por el mensaje.
Ismael
7/10/2007 at 11:34 am
Yo agregaría a lo de Ismael Santos, que no solo “no ha mejor forma de aprender que haciéndolo tu mismo” que para MI es la ÚNICA FORMA.
7/12/2007 at 10:55 am
También 100% de acuerdo con Ismael.
Yo también llevo dos años haciendo mi propio cms, y considero que más que reinventar la rueda estoy descubriendo los problemas a los que otros antes se enfretaron para darles una nueva solución sólo si la que adoptaron antes no me convence o no la entiendo.
La ventaja principal que le veo a comenzar un CMS desde 0 es que sabes como funciona cada trozo de código línea a línea, y que puedes modificarlo más a tu gusto.
Pocas experiencias son tan gratificantes como sentirte “El Padre de la Criatura”.
Además, para ser claro, todos los CMS que conozco son MUY complicados para mi, no quiero ni pensarlo como será para el cliente.
Olvidamos que la informática, CMS, XHTML, CSS, Active Record son cosas que a nosotros nos encanta, pero a nuestro clienten ni le interesan lo más mínimo, solo quieren que funcionen bien, rápido y que sea bonito.
Por eso hice el mío dejando solo las opciones más habituales que me piden los clientes.
Es un gusto saber que con borrar una carpeta y un enlace le quito el foro, o que con poner varios enlaces le hago una tienda virtual o catálogo de productos, o la galería de imágenes en FLASH.
Además, si que se hace continuamente reutilización de código:
PEAR; ADODB, clases para hacer URL amigables, freerte (editor wysiwyg), template power y un larguísimo etc de código reutilizado.
1/18/2008 at 8:12 am
100% de acuerdo con lo que decis… en este momento estoy programando un pequeño CMS, con todas mis limitaciones en lo que a programacion se refiere, pero aprendiendo sobre la marcha un monton de cosas…
5/14/2008 at 4:47 pm
[…] Las gemas existentes para interactuar con la API de Flickr son o demasiado complejas, antiguas y abandonadas, o las dos. Y ademaás siempre es un buen ejercicio reinventar la rueda. […]
5/6/2009 at 12:57 pm
Muy de acuerdo, Hay que “Reinventar la Rueda” algunas veces en la vida, por que si no el proceso de aprendizaje es incompleto, además a veces sale una muy buena rueda. Ya exostía Yahoo, Altavista, ¿para que queríamos un Google?, de seguro alguien les dijo ¿para que vas a reinventar la rueda?
Yo desarrollé también un pequeño CMS, a costo personal, pero ya lo estoy rentabilizando, ya que es una base para desarrollo de módulos ad-hoc, claro hay varios muy buenos y los voy a usar también cuando amerite, ahora estoy viendo desarrollo de módulos en joomla que lo encuentro bueno, pero mi visión de joomla sería muy diferente y mi grado de madures también si no hubiese invertido varios meses en mi propio CMS.