jueves, 4 de diciembre de 2008

¿Con cuál lenguaje empezar?

Una buena pregunta que se hacen los novatos es la de ¿con cuál lenguaje me conviene aprender a programar? y es que hay de tantas variedades que a veces cuesta trabajo saber por donde comenzar, bien puede ser por los más populares, los más usados, los más nuevos, etc.

Personalmente recomendaría C# o Ruby, y aunque las opiniones están divididas creo que estos dos lenguajes son una buena manera de comenzar pues se trata de lenguajes modernos, ampliamente soportados, C# esla carta fuerte de .NET y Ruby que se apunta como el futuro de la disciplina y el favorito de los alpha geeks de hoy en día.

Y es a través de stackoverflow que me entero de esta paginita muy divertida donde aprendes instrucciones básicas de Ruby, y la verdad es que es muy sencillo y cualquiera con deseos de aprender puede empezar a hacerlo.

Mientras tanto yo sigo experimentando con Ruby on Rails cuando puedo, y no me quejo, es un lenguaje muy interesante y en unos años sé que crecerá exponencialmente.

Saludos!!

lunes, 1 de diciembre de 2008

La metáfora en la vida

No deja de sorprenderme el poder de la palabra. Como un amante de la literatura, un dummy de la escritura y un profesional del software día a día me doy cuenta que las palabras dicen e impactan en mayor medida de lo que la gente cree.

Específicamente los silogismos y las metáforas son recursos que siempre me han intrigado, pero es la metáfora la que se lleva un papel crucial en el día a día.

Y es que la metáfora ha servido para los más viscerales propósitos como es el ganarse el amor de una mujer, así cómo lo hacía Neruda...

Ah vastedad de pinos, rumor de olas quebrándose, lento juego de luces,

campana solitaria, crepúsculo cayendo en tus ojos, muñeca, caracola

terrestre, en ti la tierra canta

Así como para explicar hechos que por su naturaleza, son difíciles de explicar a gente con conocimientos técnicos insuficientes y es que cómo podría la NASA presentar informes detallados de sus actividades al vicepresidente de EUA o el CERN al gobierno Suizo sin recurrir en algún punto a la metáfora. La necesidad de este recurso alguna vez lo evidenció Einstein, de aquello se cuenta la siguiente anécdota...

Un periodista le preguntó a Einstein”¿Me puede Ud. explicar la Ley de la Relatividad?” y Einstein le contestó “¿Me puede Ud. explicar cómo se fríe un huevo?”.
El periodista lo miró extrañado y le contesta “Pues, sí, sí que puedo”, a lo cual Einstein replicó
“Bueno, pues hágalo, pero imaginando que yo no se lo que es un huevo, ni una sartén, ni el aceite, ni el fuego”.

Y es que cosas como estas suceden, y en el mundo del software sucede muy a menudo, quizá es la disciplina de aplicación comercial donde existen más conceptos que es necesario explicar de manera metafórica, sólo detrás de las complicadísimas suposiciones de la física cuántica, basta ver esto, esto y esto.

Y es que gran parte del código que se escribe está montado en complejas arquitecturas de software, empleando patrones de diseño de software, recurriendo a frameworks bien articulados siendo que en esencia todas estas distinciones parten del punto básico de una metáfora, el decir esto es un factory, o esto otro es MVC. De hecho toda la programación orientada objetos está cimentada en una metáfora, la de tratar de abstraer la realidad y construir clases y objetos que son una representación de la realidad.

En el excelente libro de Steve McConnell, Code Complete, el autor nos hace tratar de darnos cuenta de lo importante que es la metáfora en la construcción del software y valga decir que la propia expresión de "construir" software o "arquitectura" de software son en sí mismas una metáfora extraída del campo real de la construcción.

Software development is a younger field than most other sciences. It’s not yet
mature enough to have a set of standard metaphors. Consequently, it has a
profusion of complementary and conflicting metaphors. Some are better than others. Some are worse. How well you understand the metaphors determines 
how well you understand software development.

De esta manera, las metáforas vienen a hacernos la vida más sencilla, cumplen un papel importante, nos permiten entender a todos y no sólo a los científicos la realidad de nuestro universo.

McConnell también escribe.

Today it’s difficult to imagine anyone’s thinking that the sun moves around the
earth. Similarly, it’s difficult to imagine anyone’s thinking that all data could be viewed as a sequential stream of cards. In both cases, once the old theory has been discarded, it seems incredible that anyone ever believed it at all. More fantastically, people who believed the old theory thought the new theory was just
as ridiculous then as you think the old theory is now.

Escribo esto porque creo que muchos desarrolladores de software pierden la visión de lo que hacen debido a no emplear una manera metafórica de explicar su trabajo o bien que están empleando la metáfora equivocada. Una metáfora adecuada puede incluso ayudar a la propia persona que genera la idea para encontrarle nuevos alcances.

Not be a code monkey!!

¿No son la herencia y el polimorfismo ejemplos evidentes de las metáforas en el mundo de la programación? Así que arquitectos, docentes y demás: no usen ejemplos tan complejos mejor expliquenlo con peras y manzanas.

Saludos