Thursday, May 26, 2011

Lenguajes de programación y obsolescencia


Cuando uno entra al mundo de la computación, tarde o temprano a algunos se nos despierta la curiosidad de saber cómo es que se hacen estos programas que funcionan en nuestras máquinas. Y así, de pronto, ya estamos leyendo manuales de diversos lenguajes de programación, empezamos a ver y a imprimir el código fuente de otros para ver cómo hacen los demás las cosas, y en todo este proceso vamos aprendiendo y nos vamos convirtiendo, bien que mal, en programadores.

En mi caso, aprendí a programar primero en Applesoft Basic, una versión del lenguaje BASIC tradicional, diseñado para la Apple ][. De ahí hice algunos pininos en ensamblador del 6502 y más adelante, ya en la facultad de ciencias, incluso tomé un curso de máquinas digitales con laboratorio, con el estimable físico Javier Sierra, en donde programé en el ensamblador del microprocesador 6809, amén de cursos de programación de sistemas, bases de datos, estructuras de datos, cursos varios de programación, etc.

En este largo camino por el tiempo aprendí Turbo Pascal y encontré a grandes amigos, como Víctor Delgado, apasionado de este producto de Borland, con quienes compartimos código, ideas y compiladores por muchos años. Luego llegó Delphi, que vino a ser el equivalente a Turbo Pascal para Windows y nos enfrascamos en aprender cómo programar bajo la interfaz gráfica. Pude ver Delphi 1.0 en 1994, en la 5a Conferencia Anual de Borland para Desarrolladores y quedé francamente sorprendido por las posibilidades del sistema. Usé la versión 2, 3, 4, 5, 6, 7 y las rebautizadas como Delphi 2008 y 2009 (se puso de moda poner el año de creación como número de versión. Así vimos Windows 95, 98, Windows Millenium, etc). Para mí, la versión 7 fue la más estable, la mejor, comparada quizás solamente con la versión 5. Las versiones 4 y 6 por alguna razón nunca me terminaron de gustar y siempre me parecieron inestables.

Pero he aquí que hemos llegado al 2011 y el año pasado, si la memoria no me falla, Codegear, una empresa subsidiaria de Borland, vendió sus herramientas de desarrollo y programación a la empresa Embarcadero, quien es ahora la compañía que distribuye y sigue soportando el desarrollo de las nuevas versiones de Delphi. Desafortunadamente, veo con cierta tristeza que mi lenguaje de programación favorito ya no tiene el volumen de personas que se ocupan de él. Digamos que el interés por Delphi, con estos cambios de empresas una y otra vez, ha desilusionado a muchos y es claro que cada vez parece haber menos apoyo. Y es una lástima, porque Delphi ha demostrado ser una gran herramienta, basada en el original Pascal de Niklaus Wirth y supercargado con toda la programación orientada a objetos.

Un síntoma de que algo anda mal con Delphi es que las editoriales norteamericanas que se dedican a publicar libros de programación, hacen años que no sacan un nuevo libro sobre Delphi. Y eso suena parecido a lo que pasó con una de las mejores revistas de computación que hubo en el mercado, la revista Byte, que de ser un volumen de cientos y cientos de páginas, de pronto empezó a adelgazar espantosamente y terminó muriendo de inanición. Esto está pasándole a Delphi, me parece.

Me pasó algo parecido en Prolog, aunque aquí la historia es en realidad diferente. En los años ochenta salió Turbo Prolog, y considerando la potencia de las herramientas "turbo" de Borland, me hice de este compilador. Me fui a hacer una maestría a la Universidad de Essex para aprender a usar Prolog entre otras cosas y a mi regreso escribí mi primera aplicación completa en turbo Prolog, un corrector ortográfico híbrido (usa reglas ortográficas, diccionarios, bigramas, etc.), al que llamé Lapsus. Pero he aquí que Borland regresó a los creadores de Turbo Prolog su herramienta y la empresa danesa desarrolladora, sacó más adelante una versión para windows llamada Visual Prolog. De nuevo, aunque el lenguaje sigue siendo el mismo, el soporte a Prolog es discreto y quizás en muchos sentidos no es el mejor lenguaje de programación por muchas razones, aunque sus puntos fuertes son inimitables en cualquier otro lenguaje.


El punto es que uno toma decisiones en el pasado, por ejemplo, la que yo tomé, de programar en Turbo Pascal, aunque pude haber elegido otra plataforma de desarrollo, quizás C, quizás Java, quizás ¿Visual Basic? y creo que por muchos años disfruté de una de las herramientas mejor escritas en este mundillo de la programación. Pero creo que me estoy quedando obsoleto.

Y sí, aprendí un poquito de Java, de PHP, de C++, pero no los he usado ni con la frecuencia que debería y tampoco creo tener las últimas versiones de estos compiladores/intérpretes.

Así pues, si hay alguna moraleja en esta historia sería la de tomar el estudio de diversos lenguajes de programación al mismo tiempo, por ejemplo Java y C. De hecho, su sintaxis es parecida y eso haría la curva de aprendizaje mucho más rápida, amén de que con la experiencia de lenguajes anteriores, muchos conceptos se entienden mucho más rápido. No obstante esto, es claro que los lenguajes de programación parecen tener un ciclo como las personas: nacen, crecen y mueren (no se reproducen)...

En cualquiera de los casos, pienso que a pesar de todo, esto da oportunidad  a aprender nuevas herramientas, nuevos paradigmas y seguir aprendiendo, cosa que finalmente siempre me ha parecido uno de los más extraordinarios goces en el ser humano: el del descubrir cómo funcionan las cosas y cómo hacerlas mejor, así como entender conceptos que quizás hemos pasado por alto por mucho tiempo. Quizás entonces, no todo está perdido.

13 comments:

Chochos said...

Creo que el problema no es tanto con el lenguaje como concepto, sino con la plataforma completa. Delphi no es un lenguaje nada más, es toda la plataforma: compilador, IDE, lenguaje, componentes, etc. Y pues cuando todo depende de un proveedor, si truenan pues adiós producto. Estaría bueno que liberaran Delphi (en el sentido de que lo publiquen como software libre), para que los que quieren usarlo puedan seguir usándolo.

No sé si has revisado algo de los lenguajes que están saliendo últimamente. Algunos lenguajes a los que vale la pena que les eches un ojo cuando puedas:

Groovy, que corre sobre la JVM pero no es tan verborreico como Java y te permite hacer algunas cosas que Java no puede, y de manera muy sencilla (scripting, closures, etc).
Clojure es otro lenguaje para la JVM pero está basado en Lisp (se supone que si sabes Lisp, puedes programar en Clojure luego luego).
Scala, otro para la JVM que últimamente está teniendo algo de auge. Es algo similar a Erlang, en cuanto a que está pensado para aplicaciones con alto nivel de concurrencia/paralelismo.

Estos lenguajes que corren sobre la JVM están cobrando mucha popularidad porque tienen la gran ventaja de que se pueden utilizar todas las clases que vienen de cajón en Java, o sea que ya tienes facilidades para manejar archivos, sockets, criptografía, y varias estructuras de datos; además, en muchos casos puedes utilizar todo el ecosistema de bibliotecas y frameworks existentes para Java.

Esto ha salido a raíz de que a mucha gente no le gusta el lenguaje de programación Java pero es innegable que la plataforma Java es muy buena (la combinación de la JVM, la portabilidad, más todo ese código ya existente que permite hacer aplicaciones complejas con relativamente poco esfuerzo).

Y por si te interesa, aquí te dejo una comparación de algunas implementaciones de Prolog en la JVM. Estos proyectos son buenos por una simple razón: Es una opción más para que puedas seguir programando en tu lenguaje favorito. Y al ser software libre/open source (tanto la implementación del lenguaje y su compilador, como la plataforma sobre la que corre) no estás atado a un solo proveedor.

Oudeis said...

¿Te has olvidado de la Trude? :D

Lo de la obsolescencia es inevitable. Todos nuestros programas se perderán como lágrimas en la lluvia.

Morsa said...

¿La maestra Trude? No, no la he olvidado.

saludos
Manuel

Ernesto said...

Yo pienso que quien sabe programar en cualquier lenguaje orientado a objetos debe poder migrar a cualquier otro sin mucho problema.

Ya ves lo que dicen: "El que es perico donde quiera es verde".

Uno de los problemas más grandes a los que me he enfrentado cuando he incursionado a ObjectiveC que es un superset de C++ y de ANSI C, es que ciertos términos que se usan en ambos lenguajes tienen significados diferentes, pero casi nadie habla de ello.

Por ejemplo cuando dicen "clases" se refieren a un objeto sin inicializar o una definición de un objeto. Y cuando dicen objeto, a veces se refieren a una instancia de una clase. O a lo que es la clase en si.

La cosa se complica cuando se tienen clases que regresan una clase o un objeto. Como en ruby, donde existen estas distinciones, pero luego te dicen que todo es un objeto en ruby, incluso las clases de un objeto.

Esto para mi ha sido lo más complicado, además de acostumbrarme a las sintaxis similar pero diferente.

Ahora, una cosa más importantes que el lenguaje en si que se elija, son las APIs que puedes acceder desde un lenguaje, por ejemplo para manipular gráficas o video.


También está que no todos los lenguajes se prestan para lo mismo. Usar C para una aplicación WEb, creo que casi nadie lo usa.

Saludos.

Juan Llaca said...

Asi es estimado Manuel, la entropía lo consume todo. El primer lenguaje con el que programé fué (se vale reír) RPG de aquellas IBM 3/10 para posterior s/34 y s/36 luego una versión para el AS/400 Todos orientados al procesamiento de datos. Por aquellos años aprendí el BASIC de IBM en mainframes. Nada mas cierto lo que apuntas; cuando aprendes uno, los demás como que te hacen lógica. COBOL, PASCAL... llegué a desarrolar aplicaciones completas de facturación sobre CLIPPER y su mejor versión a saber; summer 87 que podía hacerse como POO, heredero de aquel ancestral dBase en cualquiera de las versiones. Hoy por hoy le pego al vBasic y pues me resuleve... pero todo esto les ha de sonar a pláticas con el dinosaurio. Nunca profundicé en códigos mas cercanos a los fierros como C o C+, etc.

Oudeis; tu comentario me recordó aquel (para mi gusto magnífico) filme: Blade Runner

Saludos

Carlos said...

Hola Manuel, que gusto saludarte.
Aunque es triste estoy completamente de acuerdo contigo el poderoso Pascal está débil, aunque en el mundo libre existen versiones de Free Pascal y Lazarus que aún tienen mucha comunidad activa y mantienen vivo al lenguaje.

Pero viendo el panorama difícil para Delphi y Pascal probé e hice mis pininos en otros lenguajes, pero no me sentía cómodo, siempre buscaba la comparación con Pascal o algo no me latía, hasta que me topé con C#, encontré en este cierto aire familiar a Delphi, bueno esto debido a que su creador: Anders Hejlsberg lo es también del mismo Delphi y Turbo pascal, así que C# lo veo (o lo siento) como Delphi con sabor a C++ y Java…

En fin, yo me he sentido muy cómodo con C#, este me permite trabajar para Windows, Aplicaciones Web ,Smartphones , etc. También tiene su contraparte para Linux: el proyecto Mono, el cual es liderado por Miguel de Icaza, así que si me permites sugerirte un lenguaje familiar , pues deberías considerar a C#.

Hasta la próxima
Carlos Magaña

HellJanemba said...

Increible lo que escribe aguante morsa

Armando de la Torre said...

Al igual que tu , durante mucho tiempo he utilizado Delphi , mas por pasatiempo que por otra cosa. El 99% de la programación que hago en el trabajo es con ABAP/4 ( algo asi como cobol 4gl).

Durante varios años he coqueteado con migrar a java o a c#. Al final me decidí por c# ¿porqué? Por dos razones. La primera tiene que ver con el manejo de los eventos en java : ver el código de un "anonymous-inner-class" me pone la piel chinita. La otra razón tiene que ver con los componentes. Me ha resultado mas fácil encontrar componentes de buena calidad para c#(la mayoría comerciales) que para java.
De cualquier forma , el problema de aprender un lenguaje no se reduce a la sintaxis, sino que también hay que dedicarle una cantidad de tiempo enorme a aprender a usar las clases, métodos y controles.

Coincido con Carlos: c# tiene un cierto sabor a Delphi, como si a Anders le hubieran dicho : Haz un Delphi mejorado , pero con sintaxis de c++. Lo malo es que a diferencia de Delphi , C# no viene con el código.

Morsa said...

Armando,

delphi no viene con código fuente (me refiero al IDE y al compilador). Hasta donde sém Delphi (y C# Builder) tienen montones de bibliotecas con código fuente, tradición en lo que fue Borland. No sé exactamente a qué te refieres con eso de que C# no tiene los fuentes y delphi sí.

saludos

Armando de la Torre said...

Asi es Manuel,
Me refiero exactamente a eso C# no viene con el fuente de las librerias de .Net . Puedes navegar y el sistema te lleva a una clase que solo tiene la declaración de la propiedad o método en cuestión.

Morsa said...

Armando,

¿y como para qué quieres el código fuente de las librerías .net?

Unknown said...

Yo me sentiría frustrado si todo mi trabajo desaparece, como me ha pasado en los últimos 5 o 6 años, por culpa de estos cambios ya no de que un lenguaje desaparezca, apenas con que cambie mucho un lenguaje y no lo actualices, lo cual es ridículo, pues quien debe abstraer y adaptar el codigo antiguo es el que genera el cambio nuevo, y no hacer obsoleto todo lo que no pueda o no quiera ser actualizado. Uno que pinta le muestra a su nieto la pintura 100 años después, nosotros ni en 10 años podemos mostrar lo que hacemos, mis hijos me preguntan de donde salió lo que les dió de comer, ¿que haces papá? y me siento frustrado de ver que ¿no hago nada que quede y perdure?...

CODIGO OBSOLETO - ¿Alguien está midiendo la repercusión de la osbolescencia del código de programación? - Debería preocupar más que el calentamiento global, saber que millones de horas de trabajo de seres humanos y trabajos fundamentales para el ser humano, serán descartados, y todo ese esfuerzo desaparecerá, no hablamos de un cataclismo, ni del sol destruyendo sistemas informáticos, ni del ser humano y bombas atómicas. Hablamos de la obsolescencia del código. Capas de abstracción que respeten el código que existe, debería ser la regla, pero no veo que esté pasando.

Abstraer es la respuesta, deberían abstraer sobre el código si quieren hacer cambios, y respetar lo que hay, pero como no va a pasar, recomiendo arduamente que dejen de trabajar de empleados y emprendan y luego inviertan el dinero en inmuebles, o se dediquen a otra cosa...

Morsa said...

Yo no sería tan pesimista. Yo creo que de alguna manera sí, es feo que mucho del código del pasado haya quedado inservible en términos de usabilidad, es decir, que ante las herramientas modernas, las nuevas tecnologías de software, mucho código sea obsoleto, pero he pensado que ni modo, que a darle vuelta a la hoja y sacar provehco de lo anteriormente aprendido. Finalmente hablamos de máquinas de Turing y si aprendimos a programarlas en un lenguaje, podemos abstraer en cualquier otro aunque acepto que la curva de aprendizaje puede no ser tan fácil.