lunes, febrero 20, 2006

Fetichismo del IDE

¿Quiere más detalles sobre las causas del terremoto en Borland? Por si no me he expresado con la suficiente claridad, repito: es la propia Borland la principal culpable. Varias ideas nocivas se introdujeron, por desgracia, en el depósito de memas (unidades de información con capacidad de replicación) compartidas. Una de estas memas asesinas es la siguiente:

"Borland debe su éxito a los Entornos Integrados de Desarrollo."

Tropecé con esta curiosa idea por primera vez durante el accidentado período de prueba de Delphi 8, y el portavoz fue el mismísimo Danny Thorpe, el jefe de equipo que acaba de abandonar Borland por Google. Desarrollemos la frase, tal como ocurrió en aquel foro:

  • Borland no debe su éxito al compilador de Delphi. Ni siquiera al diseño del lenguaje.

Bien: tenga presente que se trataba de la época en la que, presuntamente, Borland ganaba una pasta con JBuilder. En JBuilder, Borland no ponía el diseño del lenguaje: JBuilder es Java, un lenguaje celosamente controlado por Sun. No soy un experto en Java: no puedo asegurar que, al igual que Borland hizo luego con C# Builder, JBuilder utilice un compilador ajeno... aunque es muy probable. En todo caso, al igual que ocurre ahora con los lenguaje para .NET, la complejidad de un compilador para la JVM es mínima comparada con la de un compilador de la vieja escuela, para C++ o Delphi. Para un ejecutivo Borlandiano en aquella época era muy tentador concluir que no importa ni el compilador ni el lenguaje en sí: ¡JBuilder era la demostración fehaciente!

Esto es un error de mucho cuidado. JBuilder, para empezar, es un producto con mucha trampa. Sospecho que gran parte del dinero que se ganaba con JBuilder provenía de los acuerdos con Oracle y el JDeveloper... es decir, de un mercado cautivo: si comprabas el Oracle, pagabas automáticamente por el entorno de programación en Java, aunque luego no lo sacases de la caja y usaras Delphi para las aplicaciones en el lado cliente.

Hay una forma directa de desmontar esta teoría: apunte en un papel los motivos por los que eligió, en algún momento, invertir su tiempo en Delphi. Esta es mi lista:

  1. Compilador: mi primer contacto con Borland se remonta a mi época de universitario. En aquella época, había poco para elegir en el apartado de compiladores para PCs. Conocí UCSD Pascal, Turbo Pascal y C; más adelante llegarían C++ y Modula II, y casi al final, Eiffel. El compilador de C que comencé a utilizar era de Microsoft. La diferencia en velocidad de compilación era enorme... y lo peor de aquel compilador de C era que tropezabas con "Internal Error" en cuanto complicabas un poco la sintaxis de tus expresiones. Es cierto que estaba aquel asunto del "compilador integrado con el editor": fue una idea ganadora en su momento, cuyo crédito pertenece a Borland. Pero seamos objetivos: esto no sirve de apoyo a la tesis de Borland ("lo nuestro son los IDEs") porque aquel "compilador integrado" tenía muy poco que ver con los actuales IDEs. En cualquier caso, Microsoft copió la idea al poco tiempo, en su línea de compiladores Quick.
  2. Compilación y enlace: Turbo Pascal partía con desventaja como lenguaje. Mientras Turbo Pascal sólo permitía generar aplicaciones monolíticas, cualquier versión de C permitía compilación por separado, y generaba ficheros obj que podían combinarse con un enlazador. Es cierto que el formato obj de Intel era (y es) una tragedia ambulante, y el proceso de compilación y enlace era lento y penoso. Eso dio un respiro a Borland en cuanto pudo generar unidades compilables por separado: el formato tpu que ideó simplificaba y aceleraba el enlace, y evitaba los problemas relacionados con el uso de cabeceras compilables en C y luego en C++.
  3. El lenguaje: un estudiante suele aceptar las herramientas que le recomiendan sus profesores, de manera que lo que pueda decir sobre mis preferencias como estudiante no tiene demasiada importancia. Pero incluso en aquella época, era opinión general que Turbo Pascal, como lenguaje, debía mejorar mucho para ponerse a la par de C++, que empezaba a destacar por entonces. El caso es que, una vez graduado, comencé a usar C++ con mayor frecuencia, preferiblemente con el compilador y entorno de Borland. ¿Era el entorno lo importante? No: era el lenguaje. Necesitaba un lenguaje potente para mis primeros proyectos profesionales. Y si había un buen entorno de desarrollo, mejor que mejor, pero no era lo decisivo.

De hecho, cuando apareció Delphi, me sorprendió programando casi en exclusiva con C++ (y con una variante limitada de C para un sistema CAD llamado Microstation). Para Windows usaba Borland C++. Ya había probado el Visual Basic... pero la pobreza del lenguaje era disuasoria. Lo que me atrajo de Delphi fue el lenguaje: aunque no era tan potente como C++ (y juro que al trabajar por entonces en algoritmos geométricos lo lamenté mucho), la funcionalidad mejoraba muchísimo lo que ofrecía Pascal... y sobre todo: tratándose de un producto de Borland, todos esperábamos mejoras constantes en esta dirección.

Esto es muy importante. Recuerdo que todos aplaudíamos la valentía de Borland al mejorar constantemente la funcionalidad de sus lenguajes. De C++ ya se había apoderado un comité de estandarización, y lo llevaba por la calle del dolor: C++ crecía desmesuradamente, sin tino, y sin embargo, no daba todas las respuestas necesarias para programar en los nuevos entornos gráficos de Windows 3.11 y luego Windows 95. Borland no tenía esos problemas: si hacía falta un nuevo tipo de método para manejar mensajes, se añadía a Pascal, y punto. Borland C++, en cambio, tenía que respetar las reglas del estándar, y obligaba a usar macros indescifrables para interceptar los mensajes del sistema operativo.

Observe que acabo de mencionar una de las principales razones del éxito de Borland:

Borland controlaba por completo su propio lenguaje, Pascal/Delphi, y lo adaptaba continuamente para mejorar el soporte para su principal sistema operativo.

Esta historia de amor y odio entre Borland y Windows comenzó con los ya mencionados "métodos de mensajes", pero no se detuvo ahí. El siguiente hito se produjo en Delphi 3, cuando Borland añadió los tipos de interfaz al lenguaje y creo DAX, la biblioteca de soporte para desarrollar en COM/ActiveX. El resultado: si usted necesitaba crear un servidor de automatización OLE, era mejor usar Delphi que recurrir al compilador de la propia Microsoft. ¿El entorno? ¡Qué más da! La magia estaba en el lenguaje... y en su infraestructura de soporte: la biblioteca de clases asociada.

¿Cuán fácil o difícil lo tiene Borland ahora, con .NET, para continuar esta tradición? Hay que reconocer que es complicado:

  1. Borland sigue teniendo el control del lenguaje. No obstante, es poco lo que puede hacer para diferenciarlo del resto de los lenguajes .NET. Seamos sinceros: la sana costumbre de sorprendernos con cambios interesantes en el lenguaje de una versión a la siguiente ha pasado a Microsoft... probablemente con Anders Hejlsberg, el originador de la misma.
  2. Igual de difícil es la posibilidad de mejorar la llamada infraestructura del lenguaje. En la época de Windows, la alternativa a la VCL y el DAX era el horrible API nativo de Windows y un engendro llamado ATL en cuyo dominio los ángeles no osan entrar. Ahora, sin embargo, la alternativa a la inestable y limitada VCL.NET es la (por lo general) elegante biblioteca de clases de la plataforma.

Hay una trampa en lo que acabo de escribir: he asumido que el futuro de Delphi debe pasar necesariamente por la plataforma .NET... y no tiene por qué ser así. Personalmente, me gusta la plataforma y, de no mediar necesidad en forma de contratos de empresa, prácticamente todos los planes de mi empresa a corto y mediano plazo pasan ya por .NET (esto merece una explicación, pero no ahora). Pero sigue existiendo el desarrollo nativo para el propio Windows, y está, por supuesto, Linux. Otra cosa sería determinar el tamaño de estos mercados, y si son suficientes para mantener vivo un producto comercial de la envergadura de Delphi.

Hay otra trampa más sutil: lo que he dicho antes es que ya no es posible seguir usando sin más la misma estrategia que hizo grande a Delphi en el pasado. Pero una aseveración así se parece mucho a: "es imposible volar con un aparato más pesado que el aire". Puede aparecer un genio y cambiar la historia. Pero mientras no surja un Elegido con ideas frescas que resuciten el espíritu del Delphi de los 90s, los remedios tradicionales no podrán hacer mucho por este enfermo crónico. Y los bandazos y meteduras de pata de la nave nodriza no son buenos para la salud de nadie.

9 Comments:

Anonymous Anónimo said...

"Ahora, sin embargo, la alternativa a la inestable y limitada VCL.NET es la (por lo general) elegante biblioteca de clases de la plataforma".

Marteens ahí te has pasado, personalmente creo que la diferencia entre VCL (Delphi 7) y NET 1.0 es abismal (a favor de Delphi por supuesto). Tú mismo lo has reconocido en tu web (una vez que Microsoft ha sacado NET 2.0).

lunes, febrero 20, 2006 9:18:00 p. m.  
Blogger Ian Marteens said...

Mira el sufijo en la frase: "VCL.NET". Es verdad que Windows Forms 1.1 no es para tirar cohetes. Y que el último Delphi al que le doy el aprobado es Delphi 7... y los retoques que haya sufrido en su versión nativa desde entonces (que son mínimos). Pero otra cosa muy diferente es la VCL.NET. De entrada, porque ya la propia VCL venía arrastrando bugs inexplicables (sobre todo, es sangrante lo de las ActionBands). A esto súmale los problemas propios de una migración de este tipo.

Añade el hecho innegable de que la VCL clásica se había quedado visualmente fuera de moda probablemente desde Delphi 3. A lo mejor habría que hacer una encuesta para ver quién utiliza todavía la TDBGrid en aplicaciones "serias". Por cierto, la última vez que miré el código fuente de la TDBGrid (cuando D7) todavía incluía unos cuantos bugs muy curiosos. ¿Has visto que sucede si tienes dos combos en dos columnas distintas, muestras el primero de ellos y luego haces doble click en la segunda columna? A lo mejor alguien se ha molestado en arreglarlo, quién sabe... Tengo una pequeña aplicación (evidentemente, no muy "seria") que utiliza la TDBGrid para gestionar el área de descargas de cursos de IntSight. Cada vez que la activo es como regresar al siglo pasado... porque cuando por costumbre intento usar la rueda de desplazamiento de mi ratón, la TDBGrid me mira y se parte el pecho de risa.

De todos modos, sobre .NET, ten presente que ni siquiera esta versión de Windows Forms es la "definitiva". WPF (antes Avalon) está a la vuelta de la esquina. Ese es otro de los problema que va a encontrar Delphi a corto plazo: Avalon necesita un form designer nuevo. Microsoft está todavía trabajando en Cider. Si finalmente Cider fuese reutilizable, no sería mucho problema, pero si no lo es, la inversión en desarrollo para crear un diseñador propio sería enorme. No es una tontería crear un form designer para Avalon y XAML. Ahora que lo pienso, es muy probable que esto haya influido en la decisión de Borland.

lunes, febrero 20, 2006 9:47:00 p. m.  
Anonymous Anónimo said...

Estimado Ian:

Tus criticas a Delphi son cada vez menos dolorosas que al principio cuando salio D8..y algo de razon tenias...me hubiera gustado y nos gustaria a muchos Delphi Desarrolladores nos des soluciones para hcer mejor el trabajo diario en Delphi.. si pensaste que te seguiriamos con tu cambio al M$VStudio te equivocaste..es hora que vuelvas a Utilizar el D2006 y renascas como ave Fenix

Un Abrazo

Martincv

miércoles, febrero 22, 2006 6:59:00 p. m.  
Blogger José Rodríguez Tang said...

De verdad pienso que hay que leer sin apasionamientos lo que quiere decir ian.

Creo que Borland no tiene en sus planes inmediatos un roadmap preciso para sus IDE's.

Lamentandolo mucho creo que el equipo se desintegro o en lo mejor de los casos, se esta desintegrando.

Nosotros estamos evaluando seriamente la plataforma .NET y la Java.

Ojala Delphi y Jbuilder consigan un buen comprador que los haga grande.

Lo cierto es que recomiendo que todos analicemos sin apasionamientos y con mucha objetividad el fututo de Delphi y que vamos hacer.

jueves, febrero 23, 2006 1:19:00 a. m.  
Anonymous Anónimo said...

La verdad q yo veo q Ian tiene razon en muchas cosas, y el futuro de delphi esta inquietante, pero si hay algo q yo he encontrado bueno en el ultimo delphi (bds2006) a sido usar c# builder con eco, (utilizo todas las bondades q presenta c#) es verdad q aun estoy en .net 1.1 pero tambien es verdad q para el tipo de aplicaciones de bases de datos es suficiente en mi caso, yo desearia francamente usar algo como ECO desde visual studio pero buscas y buscas y nada semejante, vendra muy buenas cosas (LinQ) pero nada a corto plazo y todo esto me lleva a pensar q quizas suceda lo mismo q sucedio con Midas, q salio desde delphi 3 y encontrar algo q lo superara fue cdo aparecio ado.net, pero paso tiempo, hoy veo algo asi, cada vez q me adentro mas en ECO me doy cuenta de lo novedoso y productivo q es, y esa combinacion, ECO3, C# Builder y ASP.Net me parece buenisima (digo asp.net pq realmente winform es en realidad algo lento, no se pq pero me da la impresion q hay mas recursos dedicados en el framework de .net a la parte de asp.net q al mismo winform), me gustaria saber para cdo pudieramos tener algo como ECO en visual studio, IDE de el cual es innegable q es bastante estable.

viernes, febrero 24, 2006 2:29:00 a. m.  
Anonymous Anónimo said...

Daniel

viernes, febrero 24, 2006 2:38:00 a. m.  
Blogger Ian Marteens said...

Es cierto que ECO puede ser un atractivo para usar Delphi sobre .NET. Personalmente, no es una idea que me atraiga mucho... pero puedo estar equivocado. Tengo pánico a los "persistence frameworks" (y creo que no soy el único). También es cierto que un "persistence framework" sobre .NET es mucho más atractivo que sobre la máquina Java o sobre la plataforma nativa: la reflexión es mucho más completa en .NET que en la JVM y es muy importante para todo lo que tiene que ver con data binding, serialización, etc.

Mirad un hecho curioso: a pesar de que existen bb.dd. orientadas a objetos desde hace mucho (no los apaños que introdujo Oracle 8), no acaban de cuajar, al menos comercialmente. ¿Por qué? Sospecho que se debe a que el énfasis de las bases de datos relaciones en el valor antes que en la identidad es clave para la programación distribuida... al menos, para el modelo físico multicapas. Hay una entrevista a Anders Hejlsberg en www.artima.com donde dice algo en esa dirección. Tengo que buscar el enlace: cuando lo encuentre lo pongo como anotación en la bitácora, y cuento mi opinión personal. Advierto que tengo mis dudas...

viernes, febrero 24, 2006 4:08:00 a. m.  
Anonymous Anónimo said...

La verdad no puedo opinar mucho de .net porque realmente no he realizado pruebas reales. Lo que creo es que por lo menos, de este lado del ecuador (Argentina) a las grandes empresas se les hace difícil migrar sus proyectos de win32 a .net, principalmente porque sus clientes no quieren invertir en nuevo hardware y software para soportar esta tecnología. Con respecto a Visual Studio vs. Delphi.net me quedo definitivamente con Delphi 7 (Sacando unos errores de DataSnap que solucionaron en D2006). Realmente no me siento muy a gusto con ninguno de los 2 IDE's de .net, ó quizás necesite un monitor de 40 pulgadas para ver todo el IDE :))), además odio el estilo Visual Basic de los editores de formularios (me gusta más el de D7).
Pero bueno... está en la naturaleza del hombre adaptarse al medio en el que se encuentra... espero adaptarme rápidamente al entorno .net.

Felicitaciones Ian por Freya, la verdad que creo que me va a facilitar mi transición a .net


PAREN LAS PAPELERAS!!!

viernes, febrero 24, 2006 9:59:00 p. m.  
Anonymous Anónimo said...

Delphi es un lenguaje que para aplicaciones windows es la mejor opcion aun en el mercado pero e estado evaluando la plataforma .net y lo mas sobresaliente de esa plataforma es el asp net por el cual me saco el sombre el resto es un simple lenguaje como los demas soy programador php y asp pero cuando vi el asp net que es lo unico bueno del framework despues sigo utilizando delphi para alicaciones y no creo que delphi pase a la historia es cierto que tiene bug misterios pero es un lenguaje muy poderoso y de difucion masiva no morira muy facil atte Mat =) y muera java

viernes, marzo 10, 2006 7:09:00 p. m.  

Publicar un comentario

<< Home