jueves, 25 de septiembre de 2008

HISTORIA O ANTECEDENTES

Conocer la historia del desarrollo de cualquier campo del saber humano es de gran importancia para aquellos que planeen desenvolverse en dicho campo, ya que tiene cuando menos dos beneficios tangibles: Conocer el estado promedio del arte y evitar cometer errores ya cometidos. Así es mas fácil tomar las decisiones correctas y sobrevivir sin esfuerzo a muchas modas que estridentemente proclaman la reinvención del hilo negro. Como dijo el filósofo español Gorge Santayana “El que no conoce la historia esta condenado a repetirla”.

Es comúnmente aceptado que la historia de la computación moderna comienza con Charles Babbage, en 1822, sin embargo las primeras computadoras mecánicas y eléctricas no contaban con un lenguaje de programación tal como lo conocemos ahora, la mayoría de ellas era construida para llevar a cabo una tarea especifica; por lo tanto la forma de programarla era particular a cada computadora. Fue en el año de 1945 cuando el matemático Jhon Von Neumann[1] fascinado por las posibilidades de ENIAC[2], elaboró un estudio que demostró que una computadora podía tener una estructura física muy simple y fija, y aun así ser capaz de ejecutar cualquier tipo de programa mediante un control correcto, sin la necesidad de modificar la computadora para esto.

A partir de esta innovación de Von Neunmann, que en conjunto se conoce como la técnica de programa almacenado es que se inicia la era de los lenguajes de programación.

LOS PRIMEROS LENGUAJES

Shortcode

En 1949,aparece el primer lenguaje que se usó en computadoras electrónicas: “Shortcode”, requería que el programador convirtiera (compilara) su programa a 0's y 1's de manera manual.
A-0
Fue hasta el año de 1951, que Grace Hopper[3] trabajando para Remington Rand, comienza a desarrollar el primer compilador, lo que trajo consigo una programación más rápida.

Fortran

Es en el año de 1957 cuando aparece el primero de los grandes lenguajes de programación de uso aún actualmente: FORTRAN, que proviene de FORmula TRANslating system.
Fue desarrollado por IBM para cómputo científico, el líder del proyecto fue John Backus, que después contribuiría en ALGOL.
El lenguaje original solo incluía FOR, DO y GOTO. También definió los tipos de datos básicos: TRUE, FALSE, integer, real, double presicion.
El lenguaje original era bueno manejando números, pero malo manejando entrada y salida, lo cual propicio la aparición de otros lenguajes orientados a negocios.

LISP

En el año de 1958, el profesor John McCarthy[4] del M.I.T. comenzó a desarrollar la teoría de un lenguaje de de procesamiento de listas. En 1959 aparece publicamente la primer implementación llamada LISP 1.5.
En 1960 McCarthy publica un histórico articulo[5] acerca de los fundamentos de LISP que hizo por la programación lo mismo que hizo Euclídes por la geometría, demostrar como con unos cuantos operadores y una notación para funciones es posible construir un lenguaje de programación completo[6].
Es importante hacer notar que McCarthy no solo marco un hito en la historia los lenguajes de programación sino que creo un modelo de programación que ha demostrado ser superior, tanto que podemos decir que en la actualidad existen dos grandes modelos de programación el de C y el de Lisp, y podemos notar que los lenguajes del modelo C tratan de parecerse cada vez mas a Lisp.

ALGOL

En el año de 1958 un comite crea la especificación del lenguaje ALGOL, la tenia la particularidad de no definir la manera de manejar entrada y salida, dejando esta parte libre a cada implementación.
Es en 1960 cuando aparece el lenguaje ALGOL 6.0 el primer lenguaje estructurado en bloques. Este lenguaje fue muy popular en el segundo lustro de los 60's.
Su principal contribución es ser la raiz del arbol que ha producido lenguajes tales como pascal, C, C++, y Java.

COBOL

En 1959, Conference on Data Systems and Languages (CODASYL) crea COBOL, un lenguaje para negocios; que fuera facil de aprender para gente que no tuviera formación en ciencias de la computación. Sus únicos tipos de datos fueron cadenas y números. Lo que le dio la característica de poder agruparlos en arreglos sencillos, de modo que los datos podian ser organizados y seguidos de una mejor manera. Las sentencias de COBOL se parecen mucho a las usadas por el idioma inglés, haciendo que fuera fácil de aprender. Todo esto con la finalidad de que los negocios promedio lo pudieran aprender y usar.
Otros de los primeros tiempos
Existieron otros lenguajes de programación en los primeros tiempos, sin embrago la tarea de describir las características de cada uno es demasiado ambiciosa para este pequeño trabajo asi que solo se mencionan brevemente:

1946 Plankalkul del aleman Conrad Zuse aplicado para jugar ajedrez.
1952 Autocode un compilador de Alick E. Glennie.
1960 APL de Kenneth Iverson.
1962 SNOBOL de la empresa sure-fire.

Para ver una lista mas completa de los lenguajes de programación existentes se sugiere visitar la página de Érick Lévénez: http://www.levenez.com/lang/ que mantiene un poster de la historia de los lenguajes de programación en una línea de tiempo.
Otra página recomendable es la de Bill Kinnersly: http://people.ku.edu/~nkinners/LangList/Extras/langlist.htm que mantiene una lista de los lenguajes de programación que han existido, y actualmente contiene aproximadamente 2,500 lenguajes de programación.

Desarrollo de los lenguajes de programación
Basados en los primeros lenguajes de programación han surgido muchos otros lenguajes que siempre tienen la intención de tomar lo mejor, desechar lo malo, y agregar alguna “novedad”, respecto a los existentes. Solo se hace referencia a los mas conocidos.
Basic
Inventado en 1964 por John George Kemeny y Thomas Eugene Kurtz en el Colegio Dartmounth.
Es un lenguaje muy limitado que fue diseñado para personas que no fueran del área de ciencias de la computación.
El nombre de BASIC, significa Beginners All-purpose Symbolic Instruction Code.
Los ocho principios de diseño de BASIC fueron:
Ser fácil de usar para los principiantes.
Ser un lenguaje de propósito general.
Permitir que los expertos añadieran características avanzadas, mientras que el lenguaje permanecía simple para los principiantes.
Ser interactivo.
Proveer mensajes de error claros y amigables.
Responder rápido a los programas pequeños.
No requerir un conocimiento del hardware de la computadora.

El lenguaje se baso en Fortran y Algol 6.0

Pascal

Diseñado por Niklaus Wirth[7], como una herramienta de enseñanza de la programación. Sus desarrolladores se concentraron en desarrollar buenas herramientas que contribuyeran a la enseñanza, tal como un buen debugger, y un buen editor. Además tuvieron como meta el tener soporte para la mayoría de los microprocesadores populares en esa época en las instituciones de enseñanza.
Fue diseñado de una manera muy ordenada, reflejando la experiencia de su diseñador, tomo las mejores características de los lenguajes de su tiempo, COBOL, ALGOL, y FORTRAN, al mismo tiempo que busco evitar sus deficiencias, y hacerlo lo mas claro posible. La combinación de sus características de entrada/salida, y sus solidas características matemáticas pronto lo convirtieron en un lenguaje muy exitoso. También implemento el tipo apuntador y agrego el CASE, e hizo uso de variables dinámicas. Sin embargo no implemento arreglos dinámicos ni agrupamiento de variables lo cual contribuyo a su perdida de popularidad frente a nuevos lenguajes.
Delphi es una versión moderna y orientada a objetos de Pascal.

Prolog

Diseñado en 1970 en la universidad de Aix-Marseille por los profesores Alain Colmerauer y Phillipe Roussel, su nombre proviene del frances Programation et Logique, es popular en los circulos de interes en Inteligencia Artificial.
Inicialmente era un lenguaje interpretado, hasta que a mediados de la decada de los 70's David Warren desarrollo un compilador, que convertia el programa en Prolog a un conjunto de instrucciones de una máquina abstracta denominada Warren Abstract Machine, o WAM.
Su sintaxis y semantica son considerados simples y claros, su paradigma de programación es el declarativo y un programa en Prolog se compone de cláusulas que constituyen reglas del tipo modus ponens, es decir, "Si es verdad el antecendente, entonces es verdad el consecuente". No obstante, la forma de escribir las cláusulas es al contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente.

“C”

Fue diseñado en 1971, por Dennis Ritchie[8] y Ken Thompson[9] mientras trabajaban para los Laboratorios Bell, y se baso en los lenguajes de programación B y BCPL.
Se basa en el paradigma imperativo y desde su creación estuvo pensado para programación de sistemas operativos, se creo para usarse en UNIX, y crecio de la mano del desarrollo de UNIX, lo que propicio la creación de características avanzadas tales como variables dinámicas, multitarea, manejo de interrupciones, forking y un poderoso manejo entrada/salida de bajo nivel. Debido a esto C es comunmente usado para programación de nivel de sistema en UNIX, Linux y Mac.
Se trata de un lenguaje no fuertemente tipeado de medio nivel pero con muchas características de bajo nivel. Dispone de las estructuras típicas de los lenguajes de alto nivel pero, a su vez, dispone de construcciones del lenguaje que permiten un control a muy bajo nivel. Destaca su gran riqueza de operadores y expresiones.

C++

A finales de los 70's y principio de los 80's un nuevo modelo de de programación fue desarrollado, la programación orientada a objetos, la idea básica es que los objetos son piezas de código autocontenidas y reusables. Bjarne Stroustroup[10], también de los Laboratorios Bell, desarrollo un nuevo lenguaje basado en C que aplica los conceptos de la programación orientada a objetos, inicialmente se llamo C con clases, para posteriormente tomar su nombre definitivo C++ cuando fue publicado en 1983.
Las principales características del C++ son abstracción, el soporte para programación orientada a objetos y el soporte de plantillas o programación genérica. Por lo cual , se puede decir que C++ es un lenguaje multi paradigma que abarca tres paradigmas de la programación: La programación estructurada, la programación genérica y la programación orientada a objetos.
Actualmente cuenta con un estándar ISO y es muy popular en la programación de aplicaciones.

Perl

Perl (Practical Extraction and Report Language), fue desarrollado por Larry Wall[11], inicialmente motivado para cubrir las carencias de sed y awk y las limitaciones del shell, su primer versión publica fue anunciada en el Newsgroup comp.sources.misc el 18 de diciembre de 1987.
Actualmente Perl es un lenguaje de propósito general, usado para amplia gama de tareas que incluyen administración de sistemas, desarrollo web, programación en red, desarrollo GUI, si lo deseas, puedes programar orientado a objetos y mucho mas.
Es uno de los lenguajes mas flexibles y poderosos, junto con Lisp, permite desarrollar prácticamente cualquier cosa con el, es poderoso, flexible y expresivo. Perl es libre y es divertido, permite ser creativo y no te ata a las restricciones impuestas por el diseñador del lenguaje, en Perl siempre hay mas de una manera de hacer las cosas.
Sin embargo, esta flexibilidad y poder no son apreciados por los programadores promedio que prefieren lenguajes mas simples y fáciles de aprender, por lo cual Perl es el blanco de muchas criticas nacidas de la ignorancia.
Perl es multiplataforma y desde hace muchos años a demostrado en el mundo real producir código completamente reusable sin necesitar programación orientada a objetos.

Python

Es un lenguaje interpretado e interactivo, creado por Guido Van Rossum[12] en 1991. Es completamente tipeado dinamicamente, usa manejo automático de memoria, por lo cual es similar a Lisp, Perl, Ruby, Scheme y Tcl.
Es desarrollado como proyecto de software libre, manejado por la Python Software Foundation. Tomo varias de sus características de Lisp.
Algunos lo consideran la "oposición leal" a Perl, lenguaje con el cual mantiene una rivalidad amistosa. Los usuarios de Python consideran a éste mucho más limpio y elegante para programar. Sin embargo esto es mas un punto de vista de sus usuarios que una realidad.
Su facilidad de aprendizaje, su orientación a programadores promedio, su limpieza de código,hacen que sea uno de los lenguajes mas exitosos al momento de escribir el presente trabajo.

Ruby

Es un lenguaje de programación interpretado, orientado a objetos, con una sintaxis inspirada por Perl y Ada, que también tomo ideas de Lisp, Python, Dylan y CLU.
Fue creado por Yukihiro Matsumoto[13], quien comenzó su desarrollo en 1993, y lo publico en 1995.
El nombre Ruby fue elegido para reflejar su herencia de Perl.
Entre sus características tenemos:

“Lenguaje de guiones interpretado:
Posibilidad de realizar directamente llamadas al sistema operativo
Potentes operaciones sobre cadenas de caracteres y expresiones regulares
Retroalimentación inmediata durante el proceso de desarrollo
Rápido y sencillo:
Son innecesarias las declaraciones de variables
Las variables son de tipo dinámico.
La sintaxis es simple y consistente
La gestión de la memoria es automática
Programación orientada a objetos:
Todo es un objeto
Clases, herencia, métodos, ...
Métodos singleton
Mixins por módulos
Iteradores y cierres
También:
Enteros de precisión múltiple

DESCRIPCION

Los métodos utilizados para describir los primeros lenguajes informáticos fueron, en gran medida, informales: explicaciones y descripciones en lengua natural. En el caso de LISP el esfuerzo formalizador fue mayor, aunque se utilizó una sintaxis extremadamente simple, con las listas como las únicas estructuras del lenguaje y empleadas tanto para representar los datos como los programas. Esta tendencia cambió radicalmente, no obstante, con el lenguaje ALGOL-60 (ALGOritmic Language) (Natur, 1960).

ALGOL-60 es, sin duda, el lenguaje que más influye en el desarrollo de los lenguajes informáticos tal y como los conocemos hoy en día. Como FORTRAN, ALGOL-60 fue concebido para ser usado en el cálculo científico y, aunque nunca llegó a alcanzar la difusión de FORTRAN o COBOL, tuvo una importancia crucial desde el punto de vista teórico por su influencia en el desarrollo de muchos lenguajes posteriores. Para definir ALGOL-60 John Backus y Peter Naur decidieron utilizar una notación equivalente a la utilizada por N. Chomsky para describir la estructura sintáctica de los lenguajes naturales (Chomsky, 1956): las gramáticas independientes del contexto. Esta notación se generalizaría después bajo la denominación de Backus-Naur-Form o BNF, y constituye el primer ejemplo claro de la utilización en informática de un metalenguaje o lenguaje utilizado para definir otros lenguajes.

BNF es un metalenguaje para definir sintaxis. No obstante, la sintaxis es únicamente uno de los aspectos de los lenguajes de programación. Otro aspecto esencial es su semántica: mientras que la sintaxis del lenguaje se refiere a la forma de sus sentencias, la semántica se refiere a su significado; mientras que el uso de gramáticas independientes del contexto se ha convertido, desde su uso en el diseño de ALGOL-60, en el mecanismo básico de descripción de la sintaxis, en lo referente a la semántica no existe un acuerdo universalmente aceptado. De esta forma, es posible encontrar múltiples enfoques de descripción semántica, cada uno centrado en un aspecto particular del problema (ver, por ejemplo, Manna, 1974; Story, 1981; Plotkin, 1981).

De especial relevancia práctica para la construcción de procesadores de lenguajes han sido las corrientes de descripción semántica basadas en traducción dirigida por la sintaxis (Aho, 1986). Este enfoque fue ya utilizado como base para la construcción del compilador de ALGOL-60, donde se hizo uso de los trabajos de Irons sobre traducción dirigida por sintaxis (Irons, 1961) para los que la traducción de una frase podía sintetizarse a partir de la traducción de las partes de la misma. Por su parte, los trabajos de Knuth (1968), que dieron lugar a las gramáticas de atributos, introdujeron mecanismos apropiados para el manejo de dependencias contextuales en el proceso mediante la inclusión de información no únicamente sintetizada sino también de información heredada. Las gramáticas de atributos sientan las bases de las técnicas de construcción de traductores y procesadores de lenguajes utilizadas hasta hoy.

CLASIFICACION

Los lenguajes de programación se determinan según el nivel de abstracción, Según la forma de ejecución y Según el paradigma de programación que poseen cada uno de ellos y esos pueden ser:

Según su nivel de abstracción

Lenguajes Maquina

Estan escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus intrucciones son cadenas binarias (0 y 1). Da la posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción posterior lo que supone una velocidad de ejecución superior, solo que con poca fiabilidad y dificuldad de verificar y poner a punto los programas.

Lenguajes de bajo nivel

Los lenguajes de bajo nivel son lenguajes de programación que se acercan al funcionamiento de una computadora. El lenguaje de más bajo nivel es, por excelencia, el código máquina. A éste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros de memoria de la computadora de forma directa.

Lenguajes de medio nivel

Hay lenguajes de programación que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel.

Lenguajes de alto nivel

Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rígida y sistemática.

Según la forma de ejecución

Lenguajes compilados

Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se requiere una corrida de compilación antes de procesar los datos de un problema.

Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con código binario).

Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el código

Lenguajes interpretados

Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente.
La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de producción.

Según el paradigma de programación

Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y desventajas. Dependiendo de la situación un paradigma resulta más apropiado que otro.
Atendiendo al paradigma de programación, se pueden clasificar los lenguajes en:
• El paradigma imperativo o por procedimientos es considerado el más común y está representado, por ejemplo, por el C o por BASIC.
• El paradigma funcional está representado por la familia de lenguajes LISP (en particular Scheme), ML o Haskell.
• El paradigma lógico, un ejemplo es PROLOG.
• El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk.
La representación orientada a objetos mejora la estructura de los datos y por lo tanto se ha aplicado a diferentes paradigmas como Redes de Petri, Imperativo Secuencial, Lógica de Predicados, Funcional, etc. No obstante, la manipulación no queda fundamentalmente afectada y por lo tanto el paradigma inicial tampoco a pesar de ser re-orientado a objetos.
Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma.
Actualmente el paradigma de programación más usado debido a múltiples ventajas respecto a sus anteriores, es la programación orientada a objetos.

Lenguaje de alto nivel

Los lenguajes de programación de alto nivel se caracterizan por expresar los algoritmos de una manera adecuada a la capacidad cognitiva humana, en lugar de a la capacidad ejecutora de las máquinas. En los primeros lenguajes de alto nivel la limitación era que se orientaban a un área específica y sus instrucciones requerían de una sintaxis predefinida. Se clasifican como lenguajes procedimentales. Otra limitación de los lenguajes de alto nivel es que se requiere de ciertos conocimientos de programación para realizar las secuencias de instrucciones lógicas. Los lenguajes de muy alto nivel se crearon para que el usuario común pudiese solucionar tal problema de procesamiento de datos de una manera más fácil y rápida.
La programación en un lenguaje de bajo nivel como el lenguaje de la máquina o el lenguaje simbólico tiene ciertas ventajas:
• Mayor adaptación al equipo.
• Posibilidad de obtener la máxima velocidad con mínimo uso de memoria.
Pero también tiene importantes inconvenientes:
• Imposibilidad de escribir código independiente de la máquina.
• Mayor dificultad en la programación y en la comprensión de los programas.
Por esta razón, a finales de los años 1950 surgió un nuevo tipo de lenguajes de programación que evitaba estos inconvenientes, a costa de ceder un poco en las ventajas. Estos lenguajes se llaman "de tercera generación" o "de alto nivel", en contraposición a los "de bajo nivel" o "de nivel próximo a la máquina".

Principales lenguajes de alto nivel

- Ada
- ALGOL
- Basic
- C#
- Clipper
- COBOL
- Fortran
- FoxPro o Visual Foxpro
- Java
- Lexico
- Logo
- PL/SQL
- RPG
- MATLAB
- SISTEMA BERNAL ITM
- Modula-2
- Lenguajes funcionales
- Haskell
- Lisp

Lenguajes imperativos

- BASIC
- C
- C++
- Java
- C#
- Perl
- unerg

Lenguajes Funcionales

Puros:

- Haskell
- Miranda

Híbridos:

- Lisp
- Scheme
- Ocaml
- Standard ML
- ML
- Scala

Lenguajes Lógicos

- Prolog

Lenguajes orientados a objetos

- ActionScript
- Ada
- C++
- C#
- VB.NET
- Visual FoxPro
- Clarion
- Delphi
- Harbour
- Eiffel
- Java
- JavaScript
- Lexico (en castellano)
- Objective-C
- Ocaml
- Oz
- Perl (soporta herencia múltiple)
- PHP (en su versión 5)
- Python
- Ruby
- Smalltalk
- Magik (SmallWorld)

Programación imperativa

La programación imperativa, en contraposición a la programación declarativa es un paradigma de programación que describe la programación en términos del estado del programa y sentencias que cambian dicho estado. Los programas imperativos son un conjunto de instrucciones que le indican al computador cómo realizar una tarea.
La implementación de hardware de la mayoría de computadores es imperativa; prácticamente todo el hardware de los computadores está diseñado para ejecutar código de máquina, que es nativo al computador, escrito en una forma imperativa. Esto se debe a que el hardware de los computadores implementa el paradigma de las Máquinas de Turing. Desde esta perspectiva de bajo nivel, el estilo del programa está definido por los contenidos de la memoria, y las sentencias son instrucciones en el lenguaje de máquina nativo del computador (por ejemplo el lenguaje ensamblador).
Los lenguajes imperativos de alto nivel usan variables y sentencias más complejas, pero aún siguen el mismo paradigma. Las recetas y las listas de revisión de procesos, a pesar de no ser programas de computadora, son también conceptos familiares similares en estilo a la programación imperativa; cada paso es una instrucción, y el mundo físico guarda el estado (Zoom).
Los primeros lenguajes imperativos fueron los lenguajes de máquina de los computadores originales. En estos lenguajes, las instrucciones fueron muy simples, lo cual hizo la implementación de hardware fácil, pero obstruyendo la creación de programas complejos. Fortran, cuyo desarrollo fue iniciado en 1954 por John Backus en IBM, fue el primer gran lenguaje de programación en superar los obstáculos presentados por el código de máquina en la creación de programas complejos.

Lenguaje de programación Ada

Ada es un lenguaje de programación estructurado y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.
Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous.
Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros.

VENTAJAS Y DESVENTAJAS

Ventajas

A pesar de lo anterior existen algunas ventajas en el uso de la programación declarativa. Entre las ventajas se destaca que la solución de un problema se puede realizar con un nivel de abstracción considerablemente alto, sin entrar en detalles de implementación irrelevantes, lo que hace a las soluciones más fácil de entender por las personas. La resolución de problemas complejos es resuelta por el intérprete a partir de la declaración de las condiciones dadas.
La programación declarativa es muy usada en la resolución de problemas relacionados con inteligencia artificial, bases de datos, configuración, y comunicación entre procesos; sin embargo, ningún leguaje declarativo se aproxima en popularidad a los lenguajes imperativos.

Desventajas

La principal desventaja de la programación declarativa es que no puede resolver cualquier problema dado, sino que está restringida al subconjunto de problemas para los que el intérprete o compilador fue diseñado.
Otra desventaja de la programación declarativa está relacionada con la eficiencia. Dado que es necesaria una fase de interpretación extra, en la cual se deben evaluar todas las consecuencias de todas las declaraciones realizadas, el proceso es relativamente más lento que en la programación imperativa, en que los cambios de estado del sistema están dados por instrucciones particulares y no por un conjunto de condiciones arbitrariamente grande.

BIBLIOGRAFIA

Los documentos empleados para la realización de este trabajo han sido obtenidos de:
WWW.ELRICONDELVAGO.ES
WWW.GEOCITIES.COM
WWW.LYCOS.ES
WWW.LAWEBDELPROGRAMADOR.ES
WWW.GOOGLE.COM
WWW.PROGRAMANDO.COM
WWW.TERRA.ES
WWW.YA.COM
INFORMATICA BASICA
CURSO DE PROGRAMACIÓN COBOL
http://html.rincondelvago.com/lenguajes-de-programacion_historia-y-evolucion.html
// http://www.erick.cibercalli.com/showpost?postid=17

Jhon Luis Von Neumman. (2005, Oct 7). [En línea]. Disponible: http://ei.cs.vt.edu/~history/VonNeumann.html
ENIAC Museum Online. (2005, Oct 7). [En línea]. Disponible: http://www.seas.upenn.edu/~museum/
Revista Byte, Grace Hopper, (2005, Oct 8), [En línea]. Disponible: http://www.byte.com/art/9509/img/505050a1.htm
McCarthy, John, Página personal, (2005, Oct 8), [En línea]. Disponible: http://www-formal.stanford.edu/jmc/index.html
McCarthy, John, “Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I”, (2005, Oct 8), [En línea]. Disponible: http://www-formal.stanford.edu/jmc/recursive/recursive.html
Graham, Paul, “The roots of Lisp”, (2002, En 18), [En línea]. Disponible: http://www.paulgraham.com/lib/paulgraham/jmc.ps
Wikipedia, La enciclopedia libre, (2005, Oct 8), [En línea]. Disponible: http://es.wikipedia.org/wiki/Niklaus_Wirth
Wikipedia, La enciclopedia libre, (2005, Oct 8), [En línea]. Disponible: http://es.wikipedia.org/wiki/Dennis_M._Ritchie
Wikipedia, The Free Encyclopedia, (2005, Oct 8), [En línea]. Disponible:

CONCLUSIONES

La historia de los lenguajes de programación es materia obligada y fascinante para cualquier interesado en la programación. Permite tener un mejor panorama de que es y que no es cada lenguaje y así elegir de una mejor manera a los que le interesen profundizar en los fundamentos de cada uno para encontrar el adecuado a su necesidad con bases solidas, sin dejarse llevar por modas o mercadotecnia.
Referencias