Quien no soy
No me considero un gran programador, mas bien creo que soy mediocre en este aspecto, ya que nunca me destaqué demasiado en este campo. Digamos que programo lo suficientemente bien como para hacer algo que funcione, y lo suficientemente mal como para ser no considerado un gurú en el tema.
Infancia
Recuerdo cuando tenía 15 años, que en la clase de matemáticas el profesor dictó unas clases sobre diagramación lógica. Fue mi primer encuentro con la programación, y por cierto desastroso. Tiempo mas tarde y jugando con mi amada CZ Spectrum volví al ruedo, esta vez con una meta mas ambiciosa en mente: piratear juegos, cambiándole los textos a mi antojo. Un pequeño scanner recorria el dump binario buscando cadenas y me daba la posibilidad de reemplazarlas, para luego grabar el juego modificado. Puedo decir que desperté la admiración de mis amistades, los cuales me consideraban un hacker. Esta era la programación chorizo styled, con el supremo goto que redireccionaba el flujo. Al año siguiente en la escuela, me introdujeron a la programación en Pascal, que era bastante extraña debido principalmente a que no existían los numeros de linea y que el goto estaba prohibido. Tenía la sensación que sin los números de linea, el programa se me iba a caer :P. El aprendizaje fue un tanto traumático pero interesante. Quizás el poder generar un .exe era motivo suficiente para aprenderlo. Aprender estructuras, declarar procedimientos, funciones, datos, tipos de datos, escribir a archivos, era algo nuevo y por mucho tiempo hizo que la programación me gustase. Mas no todo era color de rosas. Pascal tiene una sintaxis muy dura y exigente, con ";" como fin de linea, y los begin-end indicando bloques. Los parámetros a procedimientos y funciones en Pascal no pueden variar su tamaño en las definiciones, por lo que un programa se encorsetaba y no podía crecer dinámicamente. Pascal es un noble lenguaje, pero adolece de dinamismo.
Ya soy grande
Pasé a la universidad y allí me encontré con lenguajes varios, algunos ya conocidos y otros por conocer. Dí algunos pasos en DBase, que me volvió loco con los SELECT AREA, los índices, las claves y demas cuestiones. Ví COBOL con su puta columna 7 y su excesivamente pesadas declaraciones. Lo único que me gustó de COBOL y aún recuerdo es el comando PERFORM, con el que se podían hacer cosas muy locas. De todos modos, COBOL no es un lenguaje estructurado por lo que en conjunto con PERFORM, uno podía escribir "bodoques" de código al punto de no entender mañana que es lo que uno mismo escribió hoy.
Delphi vs Visual Basic
Pasaron los años y con la llegada de Windows, me encontré con Delphi, del cual me hice muy amigo. Este lenguaje proveía un IDE muy avanzado para desarrollar y abundante autocoding a la hora de declarar metodos en las clases. Uno podía desarrollar aplicaciones muy buenas, empaquetándolas en un solo .exe, a diferencia de Visual Basic que hacía prácticamente lo mismo pero requiriendo de un conjunto de librerias VBX, mas tarde OCX, para funcionar. En síntesis, era mas factible hacer funcionar una aplicación Delphi que una Visual Basic, pero por sus arquitecturas. Así y todo, Delphi no era la panacea, ya que heredaba tanto los beneficios como desventajas de Pascal, es decir, CERO dinamismo. El código era compìlado, el cual, si bien es de rápida ejecución, es de bajo rendimiento y alto coste de mantenimiento final debido a la carencia de extensibilidad del código. Visual Basic en cambio, a pesar de depender de sus librerías, prefirió ser interpretado, lo que le brindó a la larga la posibilidad de extender su código mas allá del diseño original del programador.
Paradox::GetClassContainerName::GetClassName::DondeMierdaEstoyParado.queseyo
Luego de mi enamoramiento con Delphi, tuve la oportunidad de aprender y odiar, u odiar y aprender, no recuerdo exactamente, a Borland Paradox y OPAL. Este es un lenguaje orientado a bases de datos con interface GUI y con un excesivo purismo en la gestión de objetos. Tuve muchos malos momentos con este egendro y con sus metodos para determinar en que objeto heredado me encontraba en ese momento. Algo de destacar es que los programas escritos con Paradox se acomodaban perfectamente a los diseños de DFD estandar, ya que no existía, o al menos nadie sabía como, el pasaje de variables y datos de un formulario a otro. Todo debía realizarse por archivo. Esto era algo trivial para aplicaciones sencillas, pero tambien terriblemente costoso en tiempos si la aplicacion recibia millares de requests al dia. Poco antes de desvincularme para siempre de ese lenguaje (fui despedido de esa empresa) logré realizar el pasaje de datos entre formularios sin usar disco. A raiz de esa experiencia me dí cuenta que el lenguaje no era tan horrible, sino que fué mal implementado en esa empresa. Paradox me plantó la semilla "self" en mi cabeza, la cual le tomaría casi 10 años germinar.
Bye informática
Pasaron los años, llegó el 2000 y en un viento de cambio, dejé de programar. Tuve una seria crisis existencial con la informática y la programación en sí, al punto de iniciar la carrera de psicología. La informatica había perdido el encanto. Todo se encajaba a ventanas grises y aplicaciones Windows. Eran días tristes. Llegué a vender mi PC porque ya no le encontraba sentido. Pasé varios años entre las teorías cognitivas y el arcaico psicoanalisis. La ausencia del arte en el desarrollo me había desanimado. La programación se reducia a encadenar sentencias y código para lograr programas sosos. Era lo mismo escribir un .java que un logo. No habia arte, no había encanto, no había nada.
Linux
El tiempo siguió pasando y un día me encontré con linux. Un Debian Sarge que llegó a un vetusta PC me dió la esperanza de que quizás no todo estaría perdido. Comencé a investigar y aprender algo nuevo, desafiante y distinto. Debian tampoco fue la respuesta, porque es muy puto cuando quiere. Un Gentoo instalado por mano propia le dió mas sentido a mi vida [informática].
PHP: ensalada nutritiva
A medida que me sumergía en el mundo del SL, me crucé con muchos lenguajes y engendros. Una vez ví una wishlist en Amazon de un developer, que estaba ansioso por comprarse un libro de Ruby. ¿Que es esto?, me pregunté, y no le presté mas atención. Continué mi busqueda y en un ansia insconsciente de emular a .Net, di con Mono, y este es realmente formidable, pero aun no recuerdo porqué lo abandoné. Me inicié con PHP y actualmente me da de comer. Escribir una ensalada de codigo mezclando SQL, HTML, JavaScript y PHP no es una experiencia agradable para nadie. PHP es usable, pero no lo amo, y sigue siendo mas de lo mismo. Es estructurado, pero la programación es sosa, sin mencionar la horrenda mezcla de tecnologías en un solo archivo. Mis ansias de buscar algo distinto para desarrollar aplicaciones, me llevó a encontrarme con Ruby on Rails. La primera vez que lo ví no le dí importancia.
Locademia Turbogears
Seguí investigando hasta que tuve la oportunidad de asistir a una "Academia Turbogears", en la que daban gratuitamente la introducción a un engendro llamado Turbogears, un burdo clon de Ruby on Rails, pero mas pedorro. Tuve que leer el manual de Python de Guido Van Rossum en 3 dias y luego Dive into Python, como para estar ducho. Lo positivo de esta experiencia, mas allá de TurboGarcha, es que tuve una aproximación gratuita a lo que es un Framework con ORM, MVC e implementaciones JS como MochiKit. ¿Que puedo decir de esto? Turbogears funciona, pero requiere de demasiado codigo para poner un simple formulario en pantalla. Es cierto que tiene mas automatizadas algunas tareas en relación a ROR, pero eso no le dá el crédito suficiente como para ser considerado exitoso. Por otra parte, las aplicaciones Turbogears se llevan muy pero muy mal con apache, por lo que necesitan correr sobre CherryPy, el cual no es un webserver preparado para recibir un trato duro. En síntesis, Turbogears y Python, mas de lo mismo. Python es un lenguaje poderoso y de hecho cada vez son más las aplicaciones que son reescritas en este lenguaje. Google contrató a Guido Van Rossum para que trabaje con ellos. Las GWT de google funcionan en Python. Python es groso y por lejos un lenguaje que se las trae, pero es más de lo mismo. En algunos casos, Python me recuerda a COBOL con su columna 7, ya que es requisito fundamental que el código esté correctamente indentado para funcionar, porque la indentación define la estructura de control. En Python existen cosas inmutables y que no pueden ser cambiadas. Estas cosas me llenaron las bolas y dije: Mas de lo mismo, lenguaje puto obsoleto. y finalmente llegó Ruby.
Placer obligatorio
Por cuestiones laborales me ví en la consabida obligación de aprender el lenguaje, y a diferencia de lo que se suele suponer, esta obligación no me resultó dolorosa, al contrario, me fué de provecho. Ruby me empezó a volar la cabeza con sus pequeñas cosas o detalles. Para Ruby todo es objeto, excepto las variables que son referencias a objetos y los bloques de código que pueden ser transformados en objetos. Ruby es dinámico y ninguna clase es cerrada, esto significa que yo hoy puedo extender cualquier clase del nucleo del lenguaje sin que el interprete se resienta. Puedo dedicarme a escribir un código eficiente y bello, no tengo restricciones con las indentaciones, puedo pasar parametros con parentesis o sin ellos, no tengo tipos de datos primitivos y estáticos a los cuales atarme, sino que todo es dinámico. Puedo escribir metodos que generen nuevos métodos sin mi intervención. Ruby on Rails es lo que es no por el desarrollo que tiene encima, sino por Ruby. Turbogears no puede ni nunca podrá llegar al nivel de frameworks como ROR o Merb debido a que su lenguaje base es restrictivo en algunos aspectos. En lo que va de la semana he estado abocado a hackear (si, usé bien el término) una vieja aplicación que escribí en Delphi hacia Ruby, y me sorprendía de la tonelada de código que me ahorraba.
I'm a God!
Con Ruby me siento un artista que trabaja en su obra maestra, y eso mismo es lo que experimentan otros rubistas. Ya no me siento un simple programador, ahora soy un creador. Ruby trajo felicidad a mi vida informática. Pasé por muchos lenguajes, pero con Ruby me voy a quedar por un largo, largo tiempo.
Que tonto el martillo!
Hola,
A menudo, al menos de donde yo vengo, se usa la frase '¡Qué tonto ha sido el martillo!' cuando alguien se golpea un dedo clavando un clavo, obviamente a modo de broma, ya que es culpa de la torpeza del "carpintero".
Me parece muy desacertado lo que dices, sobre todo en la parte de PHP, dices compararlo con Ruby, cuando en realidad lo comparas con Ruby On Rails, que es un framework. Es como decir que C es malo y C++ es mejor porque Qt es mejor C, lo cual no tiene ningun sentido.
"Escribir una ensalada de codigo mezclando SQL, HTML, JavaScript y PHP no es una experiencia agradable para nadie. (...) sin mencionar la horrenda mezcla de tecnologías en un solo archivo. "
Aquí es donde veo que no has sabido utilizar el martillo, puesto que PHP no se supone que sea una mezcla, es un lenguaje y por lo tanto una herramienta, si la aplicación esta pobremente diseñada este tipo de cosas pueden suceder. Si trabajas todo en un solo archivo solo por que se te ocurre, no es culpa de PHP, claramente no has hecho un diseño correcto de tu aplicación, lo mismo te puede suceder con Ruby (a secas, que no es lo mismo Ruby que RoR) si lo trabajaras directamente con MySQL y escribieras el HTML a mano. Que PHP pueda conectarse a base de datos y escupir HTML no significa que debe hacerse, y ¡mucho menos en un mismo archivo!, lo mismo se aplica para Ruby, si no utilizaras Rails.
Al parecer te sientes más cómodo trabajando con Rails, que ya implementa su diseño (MVC) en vez de dejarte hacerlo por ti solo, y estás viendo los beneficios de utilizar un buen diseño. Por cierto PHP tiene gran cantidad de frameworks similares a Rails, ¿los has probado?
No me malinterpretes, PHP tiene varios problemas como lenguaje, no obstante ninguna de las criticas que haces dan en el clavo, y dejan más en evidencia faltas en tu manera de analizar y diseñar aplicaciones que las faltas del lenguaje.
Espero que no te ofendas pero tu post es muy desacertado en ese punto, solo quería que lo vieras de otra perspectiva.
los caminos de la vida
Encontrar lo que uno necesita, lo que uno quiere, es un camino que nos lleva a veces por senderos inimaginados... Uno va por la vida topándoce con muchas cosas, buenas y malas, nuevas y viejas, en eso uno debe tener en claro lo que quiere, lo que busca, jamás perder el objetivo ni desistir, ser paciente y aventurero....
Valoro mucho tu historia, es una buena experiencia para crecer y aprender... Me alegra que hayas podido encontrar lo que necesitabas para completar una parte de vos... besos y abrazos
Gaturra