¿Se avecina una revolución, o solo me lo parece?

“Finally the tables are starting to turn


I’m talkin’ about a revolution…”


 


Tracy Chapman


 


Hace unos días, en respuesta a un post sobre la disponibilidad de LINQ to SQL, mi admirado amigo Rodrigo Corral me escribía:



“A más de uno se nos ponen los pelos como escarpias cada vez que oímos SQL y LINQ en la misma frase … ya me gustaría leer tu opinión sobre el tema”


Aunque normalmente evito generar polémicas, y sobre todo las que conducen a “diálogos entre sordos”, como decía Gorbachev, he pensado en plasmar en este artículo mis ideas al respecto, en busca de las opiniones de algunos de los muchos desarrolladores inteligentes que escriben aquí o visitan estas páginas regularmente.


Ante todo, quiero dejar claro lo siguiente:


·         Nada más lejos de mis intenciones que atacar a nadie ni de menospreciar su trabajo.


·         No me considero ningún “gurú” ni nada por el estilo; mis opiniones pueden ser totalmente erradas. Sí soy alguien que tiene la suerte de llevar 20+ años programando y enseñando a programar con espíritu crítico, y de haber vivido casi desde cero el desarrollo de los lenguajes y sistemas de programación.


Luego quiero expresar convicciones personales adquiridas de la experiencia y de las que será difícil moverme:


·         Con sus posibles defectos, la POO es, de los paradigmas de programación hoy en uso, el que mejor permite modelar el universo en que vivimos y que mejor se adecua a las necesidades de los desarrolladores de aplicaciones. No sé si será el paradigma definitivo (“ultimate”, dirían en inglés), pero en el panorama no se vislumbra ningún otro capaz de sustituirlo a corto o mediano plazo. Sí hay que reconocer que los lenguajes .NET están también “importando” conceptos de otros “mundos” como la programación funcional, que vienen a enriquecer el modelo OO sin variar su esencia.


·         La manera en que desarrollamos hoy, por ejemplo, las aplicaciones que acceden a bases de datos corporativas lleva implícito un desajuste de impedancia provocado por la necesidad de tener que, desde lenguajes OO, usar SQL para expresar las sentencias de recuperación y almacenamiento persistente de los datos. SQL es un lenguaje diferente, basado en otro paradigma de programación, que tiene su curva de aprendizaje, y cuyas sentencias finalmente embebemos dentro de nuestras aplicaciones en forma de cadenas de caracteres que se saltan “a la torera” el control del compilador.


Bueno, después del “prólogo”, aquí va entonces mi predicción:


·         Dentro de unos pocos años, los desarrolladores de aplicaciones no escribirán ni una sola sentencia SQL en sus aplicaciones.


No sé si mi predilección por los trabajos de Hejlsberg (a quien sigo desde los tiempos de Turbo Pascal 1.0, circa 1984) me nuble la vista, pero pienso que LINQ está entre lo más relevante que ha generado el desarrollo de los lenguajes de programación en muchos años. Creo que la posibilidad de ejecutar consultas integradas en el lenguaje de manera uniforme contra los más diversos almacenes de datos, empezando por las colecciones de datos en memoria y terminando por los documentos XML y las bases de datos SQL (más todo lo demás que se tercie) es algo que hará mucho más productivos a los programadores, más claros y mantenibles a nuestros programas y que reducirá sensiblemente la curva de aprendizaje de los principiantes.


 


Pero con la aparición de LINQ no solo dejará de ser necesario escribir sentencias SELECT. Como puede leerse en el excelente post de Juan Carlos González, LINQ To SQL añadirá a las posibilidades generales de consulta un ORM ligero (“lightweight Object-Relational Mapper”) capaz de gestionar la identidad de los objetos de negocio y de suministrar operaciones de actualización que se traducirán, tras las bambalinas y de manera transparente al programador, en las sentencias SQL correspondientes.


 


Como yo lo veo, con la llegada de Orcas podremos empezar a crear aplicaciones verdaderamente 100% orientadas a objetos, a trabajar a un nivel cualitativamente más alto. Por supuesto, aún queda mucho trabajo por delante, sobre todo en lo relativo a la creación de un cuerpo teórico asociado a la arquitectura de las aplicaciones basadas en LINQ; pero (creo) ya se puede vislumbrar lo que vendrá.


 


Si has leído hasta aquí este “panfleto incendiario”, solo me resta darte las gracias. Tu opinión será bienvenida.


 


 

Sobre la ‘@’, el ‘&’ y otros "escapes"

En un reciente artículo,


    http://geeks.ms/blogs/rfog/archive/2007/02/19/el-uso-on-de-la-algarroba-dentro-de-un-programa-escrito-en-c.aspx,


mi buen amigo RFOG escribía sobre la posibilidad de utilizar en C# el carácter ‘@’ como prefijo delante de una palabra reservada, para indicar que ésta debe ser tratada como un identificador “normal”. Augusto Ruiz comentaba, correctamente, que la utilidad del uso de la ‘@’ delante de las palabras reservadas radica en que permite referirse desde C# a una clase, propiedad, método, etc. creada en otro lenguaje con un nombre que coincide con el de una palabra reservada de C#. Asimismo, indicaba que en Visual Basic para lograr ese efecto se encierra la palabra reservada entre corchetes.


Me imagino que todo lenguaje .NET que se precie debe tener algún mecanismo similar, dado el énfasis que hace la plataforma en que sea posible utilizar el código escrito en otros lenguajes. Por ejemplo, en Delphi/Object Pascal .NET el papel de la ‘@’ lo juega el ‘&’.


Un ejemplo de situación en la que la existencia de estos caracteres de “escape” es, cuando menos, sumamente útil, es la que sufrí tiempo atrás y me vino a la mente cuando leí el post de Rafa. Como todo el mundo conoce, la propiedad mediante la cual se representa al destinatario del mensaje de correo en las clases System.Web.Mail.MailMessage y System.Net.Mail.MailMessage se llama “To“. Con C# y VB no hay ningún problema, pero… ¡to es una palabra reservada de Pascal! (recuerde el típico bucle for i := 1 to 10 do Console.WriteLine(i);). Pascal además no distingue mayúsculas de minúsculas, así que cada vez que en Delphi .NET se quiere especificar el destinatario de un correo electrónico, no queda más narices que escribir:


    miMensaje.&To := ‘sleepless@seattle.com’;


 

La próxima CTP de Orcas será en marzo

Según Dinesh Kulkarni, Program Manager de Visual C#, podemos esperar la próxima CTP de Orcas para el próximo marzo:


    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1180478&SiteID=1


Dinesh confirma que en esta CTP ya estará incluida toda la funcionalidad relacionada con LINQ To SQL (tecnología anteriormente conocida como DLINQ), que permitirá utilizar las consultas integradas en el lenguaje contra bases de datos relacionales, sobre lo que no hemos visto nada nuevo desde hace algún tiempo…