¿El lenguaje de programación más antiguo?

Después de repasar la eficiencia, popularidad y expresividad de los lenguajes de programación, desempolvamos los libros de historia (informática) para responder a la pregunta “¿cuál es el lenguaje de programación de alto nivel más antiguo?”. Vaaale, esta vez es fácil dar una respuesta directa: Fortran.  Pero para profundizar un poco más, vamos a repasar cuatro “viejas glorias” del mundo de la programación. El repaso empieza con Fortran (Formula Translating System), que fue diseñado por IBM en 1957 a partir de una propuesta de John W Backus (si, ése Backus) en 1953. Hoy en día sigue usándose para simulaciones y aplicaciones científicas y de ingeniería. Y es que, a pesar de los años, sigue siendo un candidato a tener en cuenta para aplicaciones de cálculo numérico de alto rendimiento. Sólo un año más tarde, en 1958, Lisp (List Processing) fue creado por el recientemente fallecido John McCarthy. Hablar de Lisp es hablar de inteligencia artificial, de GNU Emacs, … y también de paréntesis. ¡Muchos paréntesis! Hay informátic@s que siguen teniendo pesadillas por esta particular elección de la sintaxis. Este lenguaje también destaca por ser la fuente que inspira a lenguajes como Scheme o Clojure, que son dialectos de Lisp. También en 1958, un comité de investigadores europeos y americanos diseñaron la primera versión del lenguaje ALGOL (Algorithmic Language), llamado en ese momento IAL (International Algorithmic Language). Aunque las diferentes versiones de ALGOL no han triunfado en la industria, han influido mucho en cómo se enseñan y se definen los lenguajes de programación, siendo un referente en la sintaxis de lenguajes posteriores como C o Pascal (he aquí el origen de...

La política de la implantación y la implantación de la política

Jeffrey Pinto escribió hace más de diez años el que es aún el mejor texto de referencia sobre “el lado humano” de la implantación de sistemas de información (1). El libro cubre todo el ciclo de la gestión de proyectos según la ortodoxia más rancia (no en vano está editado por el Project Management Institute), pero lo hace desde “el otro” punto de vista, o sea, cómo las personas y los grupos de personas (la organización) diseñan, eligen e implantan sistemas y qué hace que, desde este punto de vista, unos proyectos tengan más éxito que otros. El capítulo central del manual, “The Politics of Implementation”, es el punto de apoyo sobre el que pivota la tesis. Acabáramos: resulta que implantar sistemas de información es una cuestión política, o sea, tiene que ver con el poder;  resulta que los consultores, implantadores y vendedores tienen que aceptar con sencillez, honestidad y neutralidad que en los proyectos hay política; y resulta que hay enfoques, técnicas y herramientas para reconocer y actuar sobre la política en beneficio del cliente y del proyecto. El libro que quiero comentar va en realidad de esto. Se trata de la historia de la implantación de los módulos asistenciales (el “sectorial” de hospitales) de SAP y su integración con otros sistemas corporativos y departamentales en los hospitales del Institut Català de la Salut (2). Conozco el proyecto, a muchos de los autores y stakeholders (clientes y colegas de otras épocas). Les doy mi enhorabuena y también recomiendo el libro. El texto tiene todas las virtudes y defectos de lo que llamo libros AMG (ad maiorem gloriam), o...

¿El lenguaje de programación más expresivo?

Continuamos nuestro repaso al mundo de los lenguajes de programación. Si antes nos fijamos en la eficiencia y la popularidad de estos lenguajes, ahora nos centraremos en cuál es el lenguaje de programación más expresivo. Entendemos por expresividad de un lenguaje de programación la capacidad de expresar soluciones a problemas complejos de forma elegante, simple y concisa (ver otras definiciones alternativas). Un lenguaje expresivo puede incrementar la productividad de un programador y mejorar la calidad del código, haciéndolo más comprensible, fácil de mantener y con menos defectos. Por ejemplo, consideremos cómo se codificaría la eliminación de valores duplicados en una lista usando diferentes lenguajes de programación. Algunos lenguajes incluyen el concepto de lista y una primitiva para eliminar duplicados (ejemplo en Haskell) mientras que en otros es necesario escribir el código desde cero (ejemplo en C). La historia de los lenguajes de programación es la crónica del incremento progresivo de su expresividad y nivel de abstracción. En ensamblador, los programas tienen que usar únicamente las instrucciones que proporciona el procesador. Lenguajes como Fortran ocultan los detalles del procesador, ofreciendo primitivas de control de flujo (bucles, condicionales, …), declaración de variables y vectores, etc. Más adelante, la programación orientada a objetos intenta facilitar la modularidad y el reaprovechamiento de código. Finalmente, los paradigmas basados en programación declarativa (como la programación funcional) intentan afrontar el problema desde otra perspectiva: describir cuál es la solución en lugar de la secuencia de pasos para calcularla, delegando las decisiones sobre el “cómo” al motor de ejecución. Además del nivel de abstracción, hay otras dos tendencias que incrementan la expresividad de los lenguajes de programación: la...

Nuevos Grados en Ingeniería Informática: Los itinerarios

Como ya comentaba en una entrada anterior, los nuevos grados en Ingeniería Informática – GII – (grados EEES o Bolonia) siguen las fichas escritas por la CODDI y aprobadas en el Boletín Oficial del Estado (del 4 de Agosto del 2009). Estas fichas definen las competencias que debe tener cualquier graduad@ en Ingeniería Informática para que en el supuesto que un día l@s Ingenier@s Informátic@s tengan atribuciones profesionales, el título dé acceso a éstas. Entre las características de estas fichas, hay una que quería comentar hoy: la aparición de itinerarios. En las fichas se definen 60 créditos (ECTS – European Credit Transfer and Accumulation System) de formación básica (común a las titulaciones de la rama: ingenierías y arquitectura), 60 créditos comunes al ámbito de la informática (las obligatorias comunes, independientemente de la universidad o el itinerario que se escoja) y cinco conjuntos de 48 créditos de tecnologías específicas optativas (definiendo los cinco itinerarios). A parte, se define un proyecto de fin de grado de 12 créditos. Así, tod@ titulad@ deberá superar las básicas, las comunes, el proyecto y un itinerario completo (a parte de otras optativas, hasta sumar 240 créditos). El itinerario permitirá profundizar en uno de los perfiles definidos por la ACM y el IEEE para la informática: Ingeniería de computadores: se centra en la teoría, los principios y las prácticas relacionadas con redes, seguridad, sistemas operativos, sistemas distribuidos y arquitectura de computadores. Ingeniería del software: gira en torno de los procesos de desarrollo de software y trata los aspectos de ingeniería que se refieren a eficiencia, fiabilidad, mantenimiento, etc. Computación: profundiza en las bases teóricas de la...

Informática a los 16

Una joven estadounidense de 16 años,  Natalie Nash, ha ganado el concurso Intel Science and Engineering Fair. En el número de octubre del Communications of the ACM nos explican su proyecto, impresionante no solo por la parte ingenieril que lo sostiene, sino también por el impacto del mismo. Natalie ha diseñado una interfaz software para ayudar a personas con ciertas discapacidades a comunicarse de manera más rápida que con los interfaces que existían hasta el momento. Estas personas utilizan dispositivos AAC (Augmentative and Alternative Communication) que generan voz a partir de ciertas entradas del usuario. Normalmente son personas con parálisis cerebral y simplemente tienen un botón el cual accionan cuando se enciende el grupo de letras en el que está la que quieren decir. Así, podemos imaginar el funcionamiento como si primero se iluminase nuestro teclado línea a línea y nosotros pulsásemos cuando se encendiese la linea donde está la letra escogida (eliminando el resto de líneas), luego se iluminaría dicha linea del teclado por partes, para seguir eliminando, etc. (aquí, fácilmente viene a la cabeza el utilizar nuestros conocimientos en teoría de la información, ¿no?) Para hacernos una idea, para escribir una frase pueden pasarse unos cinco minutos. Lo primero que hizo Natalie fue analizar el tipo de teclado que era mejor (más rápido) para procesar las 20000 palabras más utilizadas del inglés americano. Curiosamente, el AAC era mejor que el QWERTY y que uno estilo teléfono móvil o Sinclair ZX Spectrum de 48K. En este punto, Natalie se dio cuenta de que la disposición de las teclas en el teclado AAC estaba relacionada con su frecuencia de...