Una MacbookPro, café de starbucks y ruby on rails. Esto es la «onda» en 2011 para desarrollo web. En 2003 cuando un (entonces) desconocido David Heinemeier Hansson escribía un framework de desarrollo web que cambiaría radicalmente la web, Estados Unidos buscaba armas de destrucción masiva en IRAQ, y el programador con «experiencia» era feliz con Perl y sus CGIs y aquellos aventureros y mas mocosos aprendían como (no se debe) hacer lo mismo en PHP.
Salvo la tragedia en Iraq eran tiempos buenos. Pero entonces llegó uno de esos términos nerds que se volvieron «mainstream»: web 2.0, y entonces era momento de volverese cool, ¿Cómo podíamos lograrlo con la pobre oferta de herramientas para ese tiempo?
Comienzo aclarando que jamás he utilizado Ruby on Rails para desarrollar, es más, ni siquiera he visto código por curiosidad, no se si es falta de interés, falta de tiempo o las dos cosas. De cualquier modo como desarrolladores deberíamos de tratar de entender las herramientas que tenemos a la mano, las dominemos o no.
Chaos B.R. (Chaos Before RoR)
Allá pues en ese año 2003 donde poco sabía yo de programación el desarrollo «web» no era algo común, o no algo como lo que se ve ahora. Aunque existían millones de sitios ya (incluídos los de pornografía) el término «Aplicación web» no estaba en el repertorio de toda la horda de programadores ni coexistía en miles de blogs de diseñadores, es más, pocos blogs existían en ese tiempo. Lo más que podíamos llamar aplicación web sería acaso los sitios que ofrecían servicios en línea como bancos y grandes empresas, creo que, si mi mente no falla, fuera de estos mercados era poca la oferta de estas aplicaciones web.
Si se deseaba desarrollar algo «online» había básicamente 3 categorías, o mejor dicho yo lo pondría en tres categorías:
- Sitios informativos
- Sitios «dinámicos»
- Aplicaciones grandes (e-business, b2b, etc)
Realmente fuera de estas tres categorías no había mucho que ofrecer o mas bien no lo suficiente maduro, para el primer caso la selección de herramienta a utilizar era sencilla: Html, diseñado con tablas por supuesto y una herramienta como Dreamweaver que no solo facilitaba la tarea sino además generaba suficiente código como para justificar cobrar el triple ya que dicho código generado parecía haber llevado ese tiempo de desarrollo. Para El segundo caso era común utilizar Perl por medio de CGI para generar «resultados dinámicos» en pantalla, quienes trataban de usar algo mas moderno preferían PHP por su facilidad. Finalmente para el tercer caso mayormente se optaba por algún monstruo como Java, ASP.Net y su creciente pero inmaduro framework o peor aun ColdFusion y alguna otra cosa que se le pudiera «pegar».
Estos fueron los años de caos, donde las tecnologías web 2.0 apenas emergían y por lo tanto oportunidades para nuevas tecnologías de desarrollo no convencionales o al menos mas «arriesgadas» que la oferta que ya existía.
It’s 2005, bitch
Después de este año algo curioso pasó: «La web» comenzó a ofertar mas servicios de lo habitual, servicios que ya no solo eran aburridas transferencias bancarias y carritos de compra, nacía Twitter que por cierto a nadie le importaba, MySpace parecía la nacionalidad oficial de aquellos que gustaban de aventarse el pelo «pa enfrente» (o sea el 80% de los adolescentes/pubertos de la época) y en general cada vez nacían mas pequeños startups tratando de aprovechar esta fiebre de servicios en la web, servicios «desenfadados» y «cool» que no necesariamente estaban relacionados a actividades de negocios o empresariales, «amusement if you will» dirían mis vecinos los weros, entonces dentro de toda esta fiebre de servicios divertidos faltaba algo, algo para completar la fórmula: un ambiente de desarrollo divertido e informal, justo como estos mismos servicios.
Mira mamá, no estoy usando Ruby on Rails
Para cuando Ruby on Rails dejaba la estación «desconocido» para llegar a su destino siguiente «éxito» por el andén marcado como «cool» yo era un incipiente aprendíz de programador. De hecho mi primer intento de aprender a programar recuerdo fué cuando compré un libro de python por allá en el 2004 después de una noche de borrachera de un gulev o un consol, donde por cierto conocí a Marco Islas que sí aprendió a programar en python, en la cual como muchos otros me emocioné por las discusiones técnicas que tuvimos y el afán de crear un proyecto de algo para aprender, proyecto que por supuesto no concreté por que soy mexicano y por lo tanto bien hocicón. Aunque cuando era mas peque y chateaba en latinchat, llevaba clases de TurboPascal en la secu, realmente no tenía «experiencia real» en desarrollo de software.
Mi primer empleo como desarrollador fué por allá del 2006. La empresa para la que trabajaba me requería que aprendiera el recién lanzado C# 2.0 el cual ya tenía tiempo estudiando precisamente por que sabía que había mas oferta local de empleo que aprendiendo python. Pensar en aprender ruby on rails ni siquiera pasaba por mi mente ya que además de ser una tecnología relativamente «nueva» para entonces necesitaba pagar «las cuentas» así que mi mejor apuesta en ese momento era o C# o Java. Decidí aprender C# porque me pareció atractivo el proyecto mono en ese entonces.
Aunque aprendí rápidamente a moverme en .Net y C# nunca me llamó la atención aprender ASP.Net. Hasta el día de hoy podría decir que de hecho sigue pareciendome poco atractivo. Traté de tomar experiencia en cosas que en el momento me eran útiles como C#, SQL y otras cosas más aburridas que tiene uno que hacer en su empleo de 9 a 5 aunque, cuando llegaba a mi casa, cansado y con pocas ganas de aprender más, me sentía un poco triste al ver que no era cool, y no era cool porque parecía que la nueva onda era aprender estas cosas del desarrollo web, de metodologías ágiles, de lenguajes ligeros y en general de nuevas formas de ver y hacer las cosas, y yo, desarrollando software empresarial y para gobierno (que por cierto tiene mucho mérito, aplausos) me estaba quedando atrasado.
Web apps, la nube, go green, hipsters
¿Cómo llegamos de utilizar linux, java, tomar soda y comer pizza en noches de desvelo a tener una flamante macbook, preocuparnos por el ambiente, tomar café orgánico y desarrollar en ruby on rails? Aun trato de decifrarlo y quizá sea tema para otro post. Lo que si sé es que pasaron dos cosas: El tiempo de desarrollo se acortó por que las herramientas eran mas ágiles y el programador fué más feliz.
Sumar estas toneladas de felicidad con los tiempos cortos de desarrollo permitió que quienes hacían aplicaciones web no solo ofrecieran prototipos de productos en menor tiempo y con un costo mas accesible sino que la cultura de los startups o emprendedores comenzó a acercarse a esta nueva generación de desarrolladores que no solo tenían ideas frescas para nuevos productos sino que podían de algún modo asegurar un retorno de inversión con menos riesgo. Creo que esto empujó mucho la madurez de dichas herramientas y una parte importante de esta evolución fué precisamente ruby on rails.
Debe haber una manera obvia de hacer las cosas
Este es el motto de Python. De hecho cuando me saltó el interés de tratar de aprender este lenguaje fué precisamente por esta razón. Utilizar perl me parecía no solo difícil sino contraproducente con mi situación: falta de tiempo. El motto de perl es precisamente «there is more than one way to do it» (hay mas de una forma de hacerlo) y el de python era todo lo contrario, «There should be one obvious way to do it» (Debe haber una forma obvia de hacerlo) que acerca mas al programador a la idea de DRY (Don’t Repeat Yourself), Convention Over Configuration, etc.
Aunque python es diferente en algunos aspectos específicos a ruby, es similar en general. Son lenguajes de scripting, ágiles y que se pueden aprender fácilmente y además son «divertidos». Para mi python era el mejor lenguaje, o al menos el mejor lenguaje de scripting porque tenía características que no tenía perl (era fácil de usar), java (era ligero y fácil de aprender), o php (ordenado y con convenciones y estándares) y estaba decidido a aprender a hacer algo más útil que imprimir un «Hola mundo» en la terminal.
Aunque para mí, y para google, y muchas otras empresas grandes, python era el mejor lenguaje de scripting había algo que hacía falta: un entorno que llevara la filosofía del lenguaje al mismo y que permitiera desarrollar aplicaciones web rápidamente. Desgraciadamente para mi el lenguaje que hizo esto fue ruby y no python.
El que pega primero pega dos veces
Tal como lo dice el título del post, el que pega primero pega dos veces, dice por ahí un refrán. Y quien haya inventado este dicho tiene toda la razón. Ruby no es el mejor lenguaje, o al menos me parece que no es la única oferta. Como lo dije, python para mi es un lenguaje fácil de aprender y poderoso pero que en su momento no tuvo las herramientas necesarias para ser utilizado como plataforma de desarrollo web ágil.
Ruby con Ruby on Rails cumplió eso. La analogía que hago es la del iPhone y en general del ecosistema de desarrollo de Apple. A nadie le gusta Objective-C, y quien diga lo contrario es un mentiroso, o al menos el 90% de los desarrolladores que lo utilicen, ¿Por qué? Porque es más facil desarrollar algo en cualquier otro lenguaje Mainstream como C# o Java o mejor aun, Python o Ruby, para cualquier tipo de aplicación: Manejo de memoria automática (adios a los benditos punteros), thread safety, APIs extensamente documentadas, y en general comunidades mas activas de desarrollo, ¿Por qué entonces se decide alguien a aprender este «viejo» y difícil lenguaje habiendo tantos otros? Fácil, porque existe un ecosistema creado por Apple con su iTunes store, su hardware como iPhone y iPad y un mercado de ventas excelente donde vale la pena aprender dicha herramienta que por cierto no sirve mas que para dichos dispositivos y aunque ya existen otras ofertas como Android que permite desarrollo sobre Java por ejemplo, Apple sigue teniendo la sarten por el mango, y el mango también, diría Alberto Cortéz.
Es la misma razón por la que Apple elevó el uso de Objective-C y cocoa que la que hizo que Ruby sea un lenguaje tan utilizado. Si tan solo alguien más hubiera decidido crear una plataforma como Ruby on Rails en cualquier otro lenguaje entonces muy seguramente dicho lenguaje hubiera tenido un crecimiento de uso exponencial.
Por esta razón creo que decir que «Ruby on rails» es el mejor entorno de desarrollo de aplicaciones web que existe hoy por hoy es algo injusto. Si bien existen lenguajes donde personalmente creo que sigue siendo díficil y aburrido desarrollar para web como Java o ASP.Net creo que la oferta ha mejorado en otros lenguajes con otras tecnologías, tenemos un Django en python que es igual de bueno y mantiene la filosofía de RoR, un CakePHP y un CodeIgniter en PHP, un ASP.Net MVC en el lado obscuro de las cosas, etc.
Los mayores beneficiados por RoR no solo son sus usuarios sino los demás programadores que también utilizamos otras herramientas. Yo, por ejemplo, con todo el esceptisismo que caracteriza a cualquier programador, me negaba a utilizar PHP, porque me parecía un lenguaje feo. Tener «islas de código» mezcladas en un archivo para crear la conexion a la base de datos, generar cálculos y posteriormente presentar dicha información, todo en ese mismo archivo me parecía algo vergonzoso, característica de PHP que viene arrastrando como fama por muchos años.
Cuando conocí a mi amigo y socio Alan me dijo «Yo uso CodeIgniter en PHP», comencé a usarlo por pura comodidad ya que nuestros primeros proyectos iban a ser hospedados en servidores LAMP más económicos que los requeridos para «montar» aplicaciones en python o ruby y finalmente cedí cuando me di cuenta que a pesar de que me parece que python por ejemplo tiene mejor sintáxis, también se pueden hacer cosas ordenadas en PHP utilizando algo como CakePHP o CodeIgniter y muy seguramente es el mismo caso de Perl y otros lenguajes.
Esta tendencia de «organizarse» mejor definitivamente es honor de Ruby on Rails. Y aunque prefiero no juzgar ninguna de estas plataformas les diría que aprendan alguna. Todas tienen ventajas y desventajas, claramente, y cada proyecto sigue objetivos diferentes pero al final lo que beneficia es algo común: desarrollo organizado, ágil y divertido. Y aunque RoR fue el padre de esta tendencia creo que ya hay ofertas en otros lados igual de buenas, justo como probablemente sea igual de buena la oferta de aprender a desarrollar para Andoid y no solo para Apple aunque esta última haya «pegado primero».
Muy interesante post. No hay duda de cómo han cambiado las cosas.
Un saludo.
#Blogger #OpenSource #Latino: Únete a PLANETA #CLABSOL – http://goo.gl/mL7g5 #Linux #LATAM #planet
(No te hallo en Twitter, por éso lo pongo aquí :S)