¿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.


 


 

Octavio Hernandez

Desarrollador y consultor en tecnologías .NET. Microsoft C# MVP entre 2004 y 2010.

5 comentarios en “¿Se avecina una revolución, o solo me lo parece?

  1. Hola Octavio,
    A pesar de mi corta experiencia con LINQ (3 semanas), estoy de acuerdo en lo que comentas…yo mismo he experimentado como la curva de aprendizaje para alguien que conoce T-SQL y la POO es reducida, y como comentaba en el post estoy realmente impresionado por la potencia y posibilidades de LINQ To SQL en cuanto a definir queries no ya contra tablas de una BD, sino contra auténticas entidades de negocio que mapean toda o parte de una tabla de la BD, que además te permite definir relaciones entre entidades (esto no lo comenté en el post porque ya era demasiado largo) para “navegar” (como he leído en alguno de los excelentes artículos del equipo de LINQ) entre entidades. El programador se olvida de las sentencias SQL porque LINQ To SQL lo hace todo, aún así siempre tenemos la opción de ejecutar sentencias T-SQL y SP’s, lo que en mi opinión es otra gran ventaja de LINQ puesto que no te ata al modelo de entidades que te definas, sino que te permite utilizar el esquema relacional subyacente de manera similar a lo que teníamos antes. También me parecen interesantes las herramientas SQLMetal (aunque creo que todavía tendrán que darle alguna vuela, porque se satura en cuanto se le fuerza un poquillo) y el LINQ To SQL OR Designer, ya que ambos hacen el trabajo de generar todo el modelo de entidades en base a una descripción fiel del esquema relacional. No me extiendo más, sólo afirmar lo que ya dices, parece que LINQ va a ser una de las bases de una nueva “revolución” y de más siglas que veremos en los próximos meses: BLINQ, PLINQ, LINQ To XSD, LINQ To Datasets (esto ya viene con la Preview de Mayo),…a ver si preparo un post contando cosas interesantes de esto.
    Un saludo
    JC

  2. No soy ningún desarrollador inteligente (más quisiera), y menos aún un gurú (odio la palabra al igual que la de experto porque soy de los que piensan que no existe ni lo uno ni lo otro, sólo gente a la que se le da muy bien diferentes tecnologías o materias [igual escribo un post sobre esto]), pero ya que pides colaboración, te daré mi opinión y mi punto de vista al respecto de lo comentas.

    Antes de todo introduciré un poco mi experiencia con LINQ. Empecé con LINQ a primeros del año pasado con la primerísima Beta que me cayó entre manos. El quebradero de cabeza fue muy grande debido a la cantidad de problemas y errores que generaba, y tras hacer algunas cuantas pruebas, usarlo, gustarme mucho y demás, terminé desinstalándolo, porque estaba en juego mi salud a base de desquizamiento por trastear con una Beta. Sin embargo, como te dije la semana pasada cenando, quiero instalarme la versión más reciente y trastear nuevamente con el “bicho”. Todo este rollo lo comento, porque quiero ante todo comentar, que mi experiencia con LINQ es reducida en comparación con la de la mucha gente, por lo que mis opiniones pueden ser erróneas.

    Según como yo lo veo, los problemas de una aplicación n-Tier típica y no típica, es que las sentencias SQL están supeditadas al modelo de base de datos (todos sabemos que a la hora de utilizar parámetros por ejemplo, usamos @, %, ?, &, etc según el modelo de base de datos, T-SQL con sentencias no ANSI SQL propias de cada motor gestor de bases de datos, y así muchas cosas más,…). Esto conlleva a que tenemos como muy bien has identificado, dos partes dentro de la programación con bases de datos. Por un lado, la propia programación orientada a objetos (hoy), otientada a eventos (ayer), y procedural (más allá), y por otro lado el propio SQL.

    Evidentemente, en todo este recorrido de la evolución de la programación, los cambios han sido muy grandes, sin embargo, y dentro de la POO (hoy), el desarrollo de aplicaciones que usan bases de datos tiene dos partes bien definidas, la que corresponde con la propia POO y la que corresponde con la base de datos. Si esos dos “mundos” logramos acercarlos más (todo lo que podamos), eso redundará en la mejora en el mantenimiento, productividad e implantación de una solución informática, sin casi importarnos incluso, el modelo y el motor de base de datos (Oracle, MySql, FoxPro, SQL Server, etc).
    Si pudiéramos acercar las bases de datos al paradigma de la POO que es comúnmente usada y aceptada como la más acertada en el mundo de la programación, estaríamos creando un paradigma totalmente nuevo (mañana) que parte de la fusión entre la POO y el acercamiento de las bases de datos hacia ese “mundo”. Sería como la POO v2.0 para entendernos (esto me recuerda a la fiebre de versionar como la del Web 2.0 jejejeje).
    De hecho, los ORM que hoy mucha gente trata de usar, buscan algo parecido, y Microsoft simplemente le da una vuelta de tuerca más (¡pero vaya vuelta de tuerca!).
    También las bases de datos están cambiando hacia ese encuentro, no hay nada más que mirar a SQL Server 2005 y la incorporación del CLR dentro, las increíbles posibilidades que ahora tenemos para trabajar con ensamblados, tipos de datos personalizados, TRY CATCH, etc.

    Personalmente coincido con tu punto de vista. Se que eres un apasionado amante de LINQ, pero creo que no estás cegado por esa pasión. Pienso como tú, en que estamos ante un cambio revolucionario, pero el día a día mostrará a los desarrolladores si la apuesta de Microsoft tiene éxito o no. Yo simplemente veo al igual que tú, un cambio, como lo puede ser con tecnología como CardSpace o WPF, por poner dos de los pilares nuevos de Microsoft que creo que tienen un futuro prometedor.

  3. Yo voy a ser un poco más excueto en mis comentarios, vengo de dar una charla de Workflow y no tengo muchas ganas 🙂

    De acuerdo en casi todo excepto en la palabra ‘revolución’. En tecnología la palabra revolución se me hace muy grande ya que partes de las tecnologías revolucionarias siempre han sido re-ideas de algo que ya existía, algo lógico por otra parte. En cuanto al tema de la impedancia y que el usuario se tenga que escribir SQL… ¿ Habéis conocido C++ ODMG ?.. si no deciros que esta tecnología ya intentaba hace años resolver ese problema….

    Saludos
    Unai Zorrilla Castro

  4. Hola, Unai!

    Bueno, aquello era algo diferente, creado alrededor del concepto de las “bases de datos orientadas a objetos”, que nunca llegaron a despegar. La idea de los ORM ha tenido más éxito, aunque pienso que hasta la aparición de LINQ tampoco habían alcanzado su “prime time”.

    Pero aparte de eso, para los programadores aquello eran soluciones basadas en librerías de propósito específico. LINQ, al menos en lo que a consultas respecta, es una solución basada en los lenguajes y de propósito general, dada su aplicabilidad a prácticamente cualquier fuente de datos.

    Cierto que tal vez “revolución” sea un poco exagerado (parece que el subconsciente “tira” hacia los términos con los que más te han machacado en tu vida :-), pero creo que sin lugar a dudas se trata de un gran paso de avance hacia el futuro.

  5. Yo comparto en mucho lo que dices sobre Linq en general. Las posibilidades que da son verdaderamente sorprendentes. Pero en el caso específico de “Linq to Sql” me suena a historia cíclica ya que con similar propósito y salvando las distancias empezó Dbase! hace décadas. 😉

    Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *