28
1

Historia de la programacion

Embed Size (px)

DESCRIPTION

UNIVERSIDAD VALLE DE GRIJALVATUXTLA GUTIERREZ CHIAPAS MEXICO. 2011

Citation preview

1

Universidad Valle de Grijalva.

Materia:

Programación Básica.

Catedrático:

M.R.T. MC Fernando Román Rodríguez.

Tema:

Historia, Evolución y

Futuro de la

Programación.

(Investigación).

Alumno:

Iván Meza Cruz.

Semestre:

Segundo.

Carrera:

Ingeniería en Redes Computacionales.

Comentario del Catedrático:

11 de Junio del 2011.Tuxtla Gutiérrez, Chiapas; México.

Índice.

2

Portada. 1Presentación. 2Índice, 3Introducción. 4Contenido.Historia de la Programación. 5Evolución del lenguaje de programación. 6

Primera Generación. 8 Segunda Generación. 8 Tercera Generación. 10 Cuarta Generación. 10 Quinta Generación. 11 Los Tipos más importantes del lenguaje de programación. 12

o Lenguaje Imperativo. 12o Lenguajes Funcionales. 12o Lenguaje Lógicos. 12o Lenguaje Orientas a Objetos. 13o Lenguaje Concurrentes, Paralelos y Distribuidos 14

Futuro de la Programación. 14 El Éxito. 16 El Fracaso. 16 Algunas Perspectivas futuras. 17 Actualmente Google ha lanzado GO. 18

Conclusión. 19Bibliografía. 20

Introducción.

3

La computadora fue inventada para facilitar el trabajo intelectual. Si el hombre tiene algún problema, el diseñador define el algoritmo que resuelve el problema, el programador lo codifica en un lenguaje de programación, el cual la computadora es capaz de "entender", luego la computadora ejecuta el algoritmo expresado como programa en el lenguaje de programación en cuestión, y entrega al hombre la respuesta. Los lenguajes de programación son el medio de comunicación entre el hombre y la máquina, por lo tanto son una forma de representación del conocimiento.

Historia de la programación.

4

Los primeros lenguajes de programación surgieron de la idea de Charles Babagge, la cual se le ocurrió a este hombre a mediados del siglo XIX. Era un profesor matemático de la universidad de Cambridge e inventor ingles, que la principio del siglo XIX predijo muchas de las teorías en que se basan los actuales ordenadores.

Consistía en lo que él denominaba la maquina analítica, pero que por motivos técnicos no pudo construirse hasta mediados del siglo XX. Con él colaboro Ada Lovedby, la cual es considerada como la primera programadora de la historia, pues realizo programas para aquélla supuesta maquina de Babagge, en tarjetas perforadas. Como la maquina no llego nunca a construirse, los programas de Ada, lógicamente, tampoco llegaron a ejecutarse, pero si suponen un punto de partida de la programación, sobre todo si observamos que en cuanto se empezó a programar, los programadores utilizaron las técnicas diseñadas por Charles Babagge, y Ada, que consistían entre otras, en la programación mediante tarjetas perforadas. A pesar de ello, Ada ha permanecido como la primera programadora de la historia. Se dice por tanto que estos dos genios de antaño, se adelantaron un siglo a su época, lo cual describe la inteligencia de la que se hallaban dotados.

En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de diferencias, un dispositivo mecánico para efectuar sumas repetidas. Pero Babagge se dedico al proyecto de la máquina analítica, abandonando la máquina de diferencias, que se pudiera programar con tarjetas perforadas, gracias a la creación de Charles Jacquard (francés). Este hombre era un fabricante de tejidos y había creado un telar que podía reproducir automáticamente patrones de tejidos, leyendo la información codificada en patrones de agujeros perforados en tarjetas de papel rígido.

Entonces Babagge intento crear la máquina que se pudiera programar con tarjetas perforadas para efectuar cualquier cálculo con una precisión de 20 dígitos. Pero la tecnología de la época no bastaba para hacer realidad sus ideas. Si bien las ideas de Babagge no llegaron a materializarse de forma definitiva, su contribución es decisiva, ya que los ordenadores actuales responden a un esquema análogo al de la máquina analítica. En su diseño, la máquina constaba de cinco unidades básicas:

1) Unidad de entrada, para introducir datos e instrucciones; 2) Memoria, donde se almacenaban datos y resultados intermedios; 3) Unidad de control, para regular la secuencia de ejecución de las operaciones; 4) Unidad Aritmético−Lógica, que efectúa las operaciones; 5) Unidad de salida, encargada de comunicar al exterior los resultados.

Charles Babbage, conocido como el "padre de la informática" no pudo completar en aquella época la construcción del computador que había soñado, dado que faltaba algo fundamental: la electrónica. El camino señalado de Babbage, no fue nunca abandonado y siguiéndolo, se construyeron los primeros computadores. Cuando surgió el primer ordenador, el famoso ENIAC (Electronic Numerical Integrator And -calculator), su programación se basaba en componentes físicos, o sea, que se programaba, cambiando directamente el Hardware de la maquina, exactamente lo que sé hacia era cambiar cables de sitio para conseguir así la programación de la maquina. La entrada y salida de datos se realizaba mediante tarjetas perforadas.

Evolución del lenguaje de programación.

5

Primeras maquinas →Primeros lenguajes de programación, orientas por las maquinas:o Algebraic Interpreter: MIT.o A-2: Univac.

Se Advierten los primeros grandes requerimientos:o Independencia de las maquinas, Alto Nivel.

Los Pioneros:

Fortran (1953): Estructuras de control. LISP (1958): Manejo automático de la memoria, Inteligencia Artificial, Recursión. ALGOL (1960): BNF, Estructura de bloques. ALGOL-68: Computación paralela, tipos, coerción. Simula (1960-1967): Lenguaje con propósito especifico (simulación de proceso),

clases de objetos. Cobol (1968-1974-1985): Lenguaje con propósito específico (Procesamiento de

grandes cantidades de datos). Otros: Apl, Snobol.

La Evolución: PL I (1960): Reemplazar Fortran y Cobol, bloques, recursión, excepciones,

facilidad de depuración. Prematuro para la época. Pascal (1971); Disciplina, enseñanza, refinamiento paso a paso, programación

estructurada. C (1972): Competidor de Pascal, Cobol y Fortran. Se impone cuando el

procesamiento grafico y en red se hace indispensable. Prolog (1972): El poder de la deducción al servicio de la programación. IA,

capacidad de paralelizacion, la apuesta japonesa. BASIC (1978): Fácil de aprender, rápido de compilar, fácil de depurar. Scheme, ML,CAML,Haskell(1980´s): Lenguajes funcionales, compilación eficiente.

La Orientación de Objeto: Smalltalk (1971): tres evoluciones 72,76 (Xerox), 80 (Apple,DEC,Tecktronix). ADA (1973): Muy alto nivel combinado programación concurrente y en tiempo real;

paquetes y mecanismos de excepciones. C++ (1984) : Evolución de C, con soporte a mecanismos orientados a objetos. OCAML (1990´s): Evolución de CAMLL,OO. JAVA (1990´s): Maquina virtual OO, concurrencia,internet,portabilidad.

Otros: Oz,Mozart (1990´s): Restricciones, concurrencia, multiparadigma. Junus,Cordial (1990´s): Programación visual. Visual XX (1990´s): Interfaces visuales para programación textual.

6

En esta tabla se muestra más claro le evolución de la programación.

7

Primera Generación.

En esta generación había un gran desconocimiento de las capacidades de las computadoras, puesto que se realizó un estudio en esta época que determinó que con veinte computadoras se saturaría el mercado de los Estados Unidos en el campo de procesamiento de datos.Esta generación abarco la década de los cincuenta. Y se conoce como la primera generación. Estas máquinas tenían las siguientes características:

Estas máquinas estaban construidas por medio de tubos de vacío. Eran programadas en lenguaje de máquina. 1En esta generación las máquinas son grandes y costosas (de un costo aproximado de

ciento de miles de dólares). En 1951 aparece la UNIVAC (NIVersAl Computer), fue la primera computadora comercial, que disponía de mil palabras de memoria central y podían leer cintas magnéticas, se utilizó para procesar el censo de 1950 en los Estados Unidos.

En las dos primeras generaciones, las unidades de entrada utilizaban tarjetas perforadas, retomadas por Herman Hollerith (1860 − 1929), quien además fundó una compañía que con el paso del tiempo se conocería como IBM (International Bussines Machines).Después se desarrolló por IBM la IBM 701 de la cual se entregaron 18 unidades entre 1953 y 1957.

Posteriormente, la compañía Remington Rand fabricó el modelo 1103, que competía con la 701 en el campo científico, por lo que la IBM desarrollo la 702, la cual presentó problemas en memoria, debido a esto no duró en el mercado.La computadora más exitosa de la primera generación fue la IBM 650, de la cual se produjeron varios cientos. Esta computadora que usaba un esquema de memoria secundaria llamado tambor magnético, que es el antecesor de los discos actuales.Otros modelos de computadora que se pueden situar en los inicios de la segunda generación son: la UNIVAC 80 y 90, las IBM 704 y 709, Burroughs 220 y UNIVAC 1105.

Segunda Generación.

Cerca de la década de 1960, las computadoras seguían evolucionando, se reducía su tamaño y crecía su capacidad de procesamiento. También en esta época se empezó a definir la forma de comunicarse con las computadoras, que recibía el nombre de programación de sistemas.Las características de la segunda generación son las siguientes:

Están construidas con circuitos de transistores. Se programan en nuevos lenguajes llamados lenguajes de alto nivel.

En esta generación las computadoras se reducen de tamaño y son de menor costo. Aparecen muchas compañías y las computadoras eran bastante avanzadas para su época como la serie 5000 de Burroughs y la ATLAS de la Universidad de Manchester.Algunas de estas computadoras se programaban con cintas perforadas y otras más por medio de cableado en un tablero. Los programas eran hechos a la medida por un equipo de expertos: analistas, diseñadores, programadores y operadores que se manejaban como una orquesta para resolver los problemas y cálculos solicitados por la administración. El usuario final de la información no tenía contacto directo con las computadoras.

8

Esta situación en un principio se produjo en las primeras computadoras personales, pues se requería saberlas "programar" (alimentarle instrucciones) para obtener resultados; por lo tanto su uso estaba limitado a aquellos audaces pioneros que gustaran de pasar un buen número de horas escribiendo instrucciones, "corriendo" el programa resultante y verificando y corrigiendo los errores o bugs que aparecieran.

Además, para no perder el "programa" resultante había que "guardarlo"

(almacenarlo) en una grabadora de astte, pues en esa época no había discos flexibles y mucho menos discos duros para las PC; este procedimiento podía tomar de 10 a 45 minutos, según el programa. El panorama se modificó totalmente con la aparición de las computadoras personales con mejore circuitos, más memoria, unidades de disco flexible y sobre todo con la aparición de programas de aplicación general en donde el usuario compra el programa y se pone a trabajar. Aparecen los programas procesadores de palabras como el célebre Word Star, la impresionante hoja de cálculo (spreadsheet) Visicalc y otros más que de la noche a la mañana cambian la imagen de la PC. El software empieza a tratar de alcanzar el paso del hardware. Pero aquí aparece un nuevo elemento: el usuario.

El usuario de las computadoras va cambiando y evolucionando con el tiempo. De estar totalmente desconectado a ellas en las máquinas grandes pasa la PC a ser pieza clave en el diseño tanto del hardware como del software. Aparece el concepto de human interface que es la relación entre el usuario y su computadora. Se habla entonces de hardware ergonómico (adaptado a las dimensiones humanas para reducir el cansancio), diseños de pantallas antirreflejos y teclados que descansen la muñeca. Con respecto al software se inicia una verdadera carrera para encontrar la manera en que el usuario pase menos tiempo capacitándose y entrenándose y más tiempo produciendo. Se ponen al alcance programas con menús (listas de opciones) que orientan en todo momento al usuario (con el consiguiente aburrimiento de los usuarios expertos); otros programas ofrecen toda una artillería de teclas de control y teclas de funciones (atajos) para efectuar toda suerte de efectos en el trabajo (con la consiguiente desorientación de los usuarios novatos). Se ofrecen un sinnúmero de cursos prometiendo que en pocas semanas hacen de cualquier persona un experto en los programas comerciales.

Pero el problema "constante" es que ninguna solución para el uso de los programas es "constante". Cada nuevo programa requiere aprender nuevos controles, nuevos trucos, nuevos menús. Se empieza a sentir que la relación usuario−PC no está acorde con los desarrollos del equipo y de la potencia de los programas. Hace falta una relación amistosa entre el usuario y la PC.

Las computadoras de esta generación fueron: la Philco 212 (esta compañía se retiró del mercado en 1964) y la UNIVAC M460, la Control Data Corporation modelo 1604, seguida por la serie 3000, la IBM mejoró la 709 y sacó al mercado la 7090, la National Cash Register empezó a producir máquinas para proceso de datos de tipo comercial, introdujo el modelo NCR 315. La Radio Corporation of América introdujo el modelo 501, que manejaba el lenguaje COBOL, para procesos administrativos y comerciales. Después salió al mercado la RCA 601.

9

Tercera generación.

Con los progresos de la electrónica y los avances de comunicación con las computadoras en la década de los 1960, surge la tercera generación de las computadoras. Se inaugura con la IBM 360 en abril de 1964.3Las características de esta generación fueron las siguientes:

Su fabricación electrónica está basada en circuitos integrados. Su manejo es por medio de los lenguajes de control de los sistemas operativos.

La IBM produce la serie 360 con los modelos 20, 22, 30, 40, 50, 65, 67, 75, 85, 90, 195 que utilizaban técnicas especiales del procesador, unidades de cinta de nueve canales, paquetes de discos magnéticos y otras características que ahora son estándares (no todos los modelos usaban estas técnicas, sino que estaba dividido por aplicaciones).

El sistema operativo de la serie 360, se llamó OS que contaba con varias configuraciones, incluía un conjunto de técnicas de manejo de memoria y del procesador que pronto se convirtieron en estándares. 2 En 1964 CDC introdujo la serie 6000 con la computadora 6600 que se consideró durante algunos años como la más rápida.En la década de 1970, la IBM produce la serie 370 (modelos 115, 125, 135, 145, 158, 168). UNIVAC compite son los modelos 1108 y 1110, máquinas en gran escala; mientras que CDC produce su serie 7000 con el modelo 7600. Estas computadoras se caracterizan por ser muy potentes y veloces.

A finales de esta década la IBM de su serie 370 produce los modelos 3031, 3033, 4341. Burroughs con su serie 6000 produce los modelos 6500 y 6700 de avanzado diseño, que se reemplazaron por su serie 7000. Honey − Well participa con su computadora DPS con varios modelos. A mediados de la década de 1970, aparecen en el mercado las computadoras de tamaño mediano, o minicomputadoras que no son tan costosas como las grandes (llamadas también como mainframes que significa también, gran sistema), pero disponen de gran capacidad de procesamiento.

Algunas minicomputadoras fueron las siguientes: la PDP − 8 y la PDP − 11 de Digital Equipment Corporation, la VAX (Virtual Address eXtended) de la misma compañía, los modelos NOVA y ECLIPSE de Data General, la serie 3000 y 9000 de Hewlett − Packard con varios modelos el 36 y el 34, la Wang y Honey − Well −Bull, Siemens de origen alemán, la ICL fabricada en Inglaterra. En la Unión Soviética se utilizó la US (Sistema Unificado, Ryad) que ha pasado por varias generaciones.

Cuarta Generación.

Aquí aparecen los microprocesadores que es un gran adelanto de la microelectrónica, son circuitos integrados de alta densidad y con una velocidad impresionante. Las microcomputadoras con base en estos circuitos son extremadamente pequeñas y baratas, por lo que su uso se extiende al mercado industrial. Aquí nacen las computadoras personales que han adquirido proporciones enormes y que han influido en la sociedad en general sobre la llamada "revolución informática".

En 1976 Steve Wozniak y Steve Jobs inventan la primera microcomputadora de uso masivo y más tarde forman la compañía conocida como la Apple que fue la segunda compañía más grande del mundo, antecedida tan solo por IBM; y esta por su parte es aún de las cinco compañías más grandes del mundo.

10

En 1981 se vendieron 800 00 computadoras personales, al siguiente subió a 1 400 000. Entre 1984 y 1987 se vendieron alrededor de 60 millones de computadoras personales, por lo que no queda duda que su impacto y penetración han sido enormes.Con el surgimiento de las computadoras personales, el software y los sistemas que con ellas de manejan han tenido un considerable avance, porque han hecho más interactiva la comunicación con el usuario. Surgen otras aplicaciones como los procesadores de palabra, las hojas electrónicas de cálculo, paquetes gráficos, etc.

También las industrias del Software de las computadoras personales crecen con gran rapidez, Gary Kildall y William Gates se dedicaron durante años a la creación de sistemas operativos y métodos para lograr una utilización sencilla de las microcomputadoras (son los creadores de CP/M y de los productos de Microsoft). No todo son microcomputadoras, por supuesto, las minicomputadoras y los grandes sistemas continúan en desarrollo. De hecho las máquinas pequeñas rebasaban por mucho la capacidad de los grandes sistemas de 10 o 15 años antes, que requerían de instalaciones costosas y especiales, pero sería equivocado suponer que las grandes computadoras han desaparecido; por el contrario, su presencia era ya ineludible en prácticamente todas las esferas de control gubernamental, militar y de la gran industria. Las enormes computadoras de las series CDC, CRAY, Hitachi o IBM por ejemplo, eran capaces de atender a varios cientos de millones de operaciones por segundo.

Quinta Generación.

En vista de la acelerada marcha de la microelectrónica, la sociedad industrial se ha dado a la tarea de poner también a esa altura el desarrollo del software y los sistemas con que se manejan las computadoras. Surge la competencia internacional por el dominio del mercado de la computación, en la que se perfilan dos líderes que, sin embargo, no han podido alcanzar el nivel que se desea: la capacidad de comunicarse con la computadora en un lenguaje más cotidiano y no a través de códigos o lenguajes de control especializados.

Japón lanzó en 1983 el llamado "programa de la quinta generación de computadoras", con los objetivos explícitos de producir máquinas con innovaciones reales en los criterios mencionados. Y en los Estados Unidos ya está en actividad un programa en desarrollo que persigue objetivos semejantes, que pueden resumirse de la siguiente manera:

Procesamiento en paralelo mediante arquitecturas y diseños especiales y circuitos de gran velocidad.

Manejo de lenguaje natural y sistemas de inteligencia artificial.

El futuro previsible de la computación es muy interesante, y se puede esperar que esta ciencia siga siendo objeto de atención prioritaria de gobiernos y de la sociedad en conjunto.

11

Los tipos más importantes de lenguajes de programación son:

Lenguajes Imperativos.

Su origen es la propia arquitectura de von Neumann, que consta de una secuencia de celdas (memoria) en las cuales se pueden guardar datos e instrucciones, y de un procesador capaz de ejecutar de manera secuencial una serie de operaciones (ó comandos) principalmente aritméticas y booleanas. En general, un lenguaje imperativo ofrece al programador conceptos que se traducen de forma natural al modelo de la máquina.Ejemplos: FORTRAN, Algol, Pascal, C, Modula-2, Ada.

El programador tiene que traducir la solución abstracta del problema a términos muy primitivos, cercanos a la máquina, por lo que los programas son más "comprensibles" para la máquina que para el hombre. Esto es una desventaja para nosotros que hace que sea sumamente complicado construir código en lenguaje imperativo. Lo bueno de este lenguaje es que es tan cercano al lenguaje de la máquina que la eficiencia en la ejecución es altísima.

Lenguajes Funcionales.

Los matemáticos resuelven problemas usando el concepto de función, que convierte datos en resultados. Sabiendo cómo evaluar una función, usando la computadora, podríamos resolver automáticamente muchos problemas. Este fue el pensamiento que llevó a la creación de los lenguajes de programación funcionales. Además se aprovechó la posibilidad que tienen las funciones para manipular datos simbólicos, y no solamente numéricos, y la propiedad de las funciones que les permite componer, creando de esta manera, la oportunidad para resolver problemas complejos a partir de las soluciones a otros más sencillos. También se incluyó la posibilidad de definir funciones recursivamente.

Un lenguaje funcional ofrece conceptos que son muy entendibles y relativamente fáciles de manejar. El lenguaje funcional más antiguo y popular es LISP, diseñado por McCarthy en la segunda mitad de los años 50. Se usa principalmente en Inteligencia Artificial. En los 80 se añadió a los lenguajes funcionales la tipificación y algunos conceptos modernos de modularización y polimorfismo, un ejemplo es el lenguaje ML.

Programar en un lenguaje funcional significa construir funciones a partir de las ya existentes. Por lo tanto es importante conocer y comprender bien las funciones que conforman la base del lenguaje, así como las que ya fueron definidas previamente. De esta manera se pueden ir construyendo aplicaciones cada vez más complejas. La desventaja es que está alejado del modelo de la máquina de von Neumann y, por lo tanto, la eficiencia de ejecución de los intérpretes de lenguajes funcionales es peor que la ejecución de los programas imperativos precompilados.

Lenguajes Lógicos.Otra forma de razonar para resolver problemas en matemáticas se fundamenta en la

lógica de primer orden. El conocimiento básico de las matemáticas se puede representar en la lógica en forma de axiomas, a los cuales se añaden reglas formales para deducir cosas verdaderas (teoremas). Gracias al trabajo de algunos matemáticos, de finales de siglo pasado y principios de éste, se encontró la manera de automatizar computacionalmente el razonamiento lógico -particularmente para un subconjunto

12

significativo de la lógica de primer orden- que permitió que la lógica matemática diera origen a otro tipo de lenguajes de programación, conocidos como lenguajes lógicos. También se conoce a estos lenguajes, y a los funcionales, como lenguajes declarativos, porque para solucionar un problema el programador solo tiene que describirlo con axiomas y reglas de deducción en el caso de la programación lógica y con funciones en el caso de la programación funcional.

En los lenguajes lógicos se utiliza el formalismo de la lógica para representar el conocimiento sobre un problema y para hacer preguntas que se vuelven teoremas si se demuestra que se pueden deducir a partir del conocimiento dado en forma de axiomas y de las reglas de deducción estipuladas. Así se encuentran soluciones a problemas formulados como preguntas. Con base en la información expresada dentro de la lógica de primer orden, se formulan las preguntas sobre el dominio del problema y el intérprete del lenguaje lógico trata de encontrar la respuesta automáticamente. El conocimiento sobre el problema se expresa en forma de predicados (axiomas) que establecen relaciones sobre los símbolos que representan los datos del dominio del problema.

El PROLOG surgió a principio de los 70 y es el primer lenguaje lógico. Las aplicaciones en la Inteligencia Artificial lo mantienen vivo y útil. En el caso de la programación lógica, el trabajo del programador es la buena descripción del problema en forma de hechos y reglas. A partir de ésta se pueden encontrar muchas soluciones dependiendo de cómo se formulen las preguntas (metas), que tienen sentido para el problema. Si el programa está bien definido, el sistema encuentra automáticamente las respuestas a las preguntas formuladas. En este caso ya no es necesario definir el algoritmo de solución, como en la programación imperativa, lo fundamental aquí es expresar bien el conocimiento sobre el problema.

En programación lógica, al igual que en programación funcional, el programa, en este caso los hechos y las reglas, están muy alejados del modelo von Neumann que posee la máquina en la que tienen que ser interpretados; por lo que la eficiencia de la ejecución es inferior a la de un programa equivalente en lenguaje imperativo. Sin embargo, para cierto tipo de problemas, la formulación del programa mismo puede ser mucho más sencilla y natural.

Lenguajes Orientados a Objetos.

A mediados de los años 60 se empezó a usar las computadoras para la simulación de problemas del mundo real. Pero el mundo real está lleno de objetos, en la mayoría de los casos complejos, los cuales difícilmente se traducen a los tipos de datos primitivos de los lenguajes imperativos. Así surgió el concepto de objeto y sus colecciones (clases de objetos), que permitieron introducir abstracciones de datos a los lenguajes de programación. La posibilidad de reutilización del código y sus indispensables modificaciones, se reflejaron en la idea de las jerarquías de herencia de clases.

También surgió el concepto de polimorfismo introducido vía procedimientos virtuales. Todos estos conceptos (que hoy identificamos como conceptos del modelo de objetos) fueron presentados en el lenguaje Simula 67, desde el año 1967, aunque este lenguaje estaba enfocado a aplicaciones de simulación discreta.

13

Fue en los años 80 cuando surgieron lenguajes de programación con conceptos de objetos encabezada por Smalltalk, C++, Eiffel, Modula-3, Ada 95 y terminando con Java.

El modelo de objetos, y los lenguajes que lo usan, parecen facilitar la construcción de sistemas o programas en forma modular. Los objetos ayudan a expresar programas en términos de abstracciones del mundo real, lo que aumenta su comprensión. La clase ofrece cierto tipo de modularización que facilita las modificaciones al sistema.

La reutilización de clases previamente probadas en distintos sistemas también es otro punto a favor. Sin embargo, el modelo de objetos, a la hora de ser interpretado en la arquitectura von Neumann conlleva un excesivo manejo dinámico de memoria debido a la constante creación de objetos, así como a una carga de código fuerte causada por la constante invocación de métodos. Por lo tanto los programas en lenguajes orientados a objetos son ineficientes, en tiempo y memoria, contra los programas equivalentes en lenguajes imperativos, aunque les ganan en la comprensión de código.

Lenguajes Concurrentes, Paralelos y Distribuidos.

El origen de los conceptos para el manejo de concurrencia, paralelismo y distribución está en el deseo de aprovechar al máximo la arquitectura von Neumann y sus modalidades reflejadas en conexiones paralelas y distribuidas.

Esto fue un tema importante sobre todo cuando las computadoras eran caras y escasas; el sistema operativo tenía que ofrecer la ejecución concurrente y segura de programas de varios usuarios, que desde distintos terminales utilizaban un solo procesador, y así surgió la necesidad de introducir algunos conceptos de programación concurrente para programar los sistemas operativos.

Cuando los procesadores cambiaron de tamaño y de precio, se abrió la posibilidad de contar con varios procesadores en una máquina y ofrecer el procesamiento en paralelo (procesar varios programas al mismo tiempo). Esto dio el impulso a la creación de lenguajes que permitían expresar el paralelismo.

Finalmente, llegaron las redes de computadoras, que también ofrecen la posibilidad de ejecución en paralelo, pero con procesadores distantes, lo cual conocemos como la programación distribuida.

Históricamente encontramos soluciones conceptuales y mecanismos (semáforos, regiones críticas, monitores, envío de mensajes, llamadas a procedimientos remotos (RPC)) que se incluyeron después en lenguajes de programación como Concurrent Pascal o Modula (Basados en monitores), Ada ó SR (Basada en RendezVous (Tipo de RPC)), ALGOL 68(Semáforos), OCCAM (Envío de mensajes), Java...

El futuro de la programación.

La historia nos ha dado algunas lecciones respecto a la evolución y el uso de los lenguajes informáticos. Comentamos algunas lecciones sobre la dicotomía entre lenguajes generalistas y lenguajes específicos para un dominio de aplicación, su nivel de abstracción, la estandarización de los lenguajes y el precio de los errores. No hay un lenguaje que sea mejor que los demás en todos los aspectos.

14

Si algo nos enseña la historia de los lenguajes de programación es que nunca hay un lenguaje que nos satisface completamente. Bien se busca un lenguaje más abstracto, bien más portable, bien más adecuado a cierto dominio, etc. De hecho, igual que existen algunos antagonismos en la informática, como la eficiencia en espacio y tiempo en la algoritmia, parece haber un antagonismo entre lenguaje generalista y lenguaje para un dominio. Esta simple dicotomía debería hacernos desistir de emprender ninguna cruzada a favor de ningún lenguaje y limitarlas a cada uso concreto.

Por ejemplo en los años sesenta se inició un debate entre los partidarios de -FORTRAN y de lenguajes tipo Algol .Los partidarios de Algol, mayoritariamente académicos procedentes de matemáticas, han denostado FORTRAN, preferido por físicos e ingenieros. El resultado de este enfrentamiento es que, hasta FORTRAN 90, FORTRAN no ha incorporado muchos de los elementos de la programación estructurada. Al revés es aún peor: los lenguajes tipo Algol no contienen algunos de los elementos que justifican el éxito de FORTRAN. Otra cuestión importante es el nivel de abstracción de los lenguajes.

Desde los primeros lenguajes de máquina hasta los lenguajes orientados a objetos pasando por lenguajes ensambladores, FORTRAN y lenguajes procedimentales, la tendencia ha sido hacia un mayor nivel de abstracción en los lenguajes de programación.

Sin embargo, esta tendencia no es inmutable. Por un lado, ha habido lenguajes que al extenderse han provocado una bajada del nivel de abstracción, por ejemplo C. Pero quizá la anomalía más evidente se ha dado con los lenguajes declarativos (funcionales, lógicos, con restricciones) que, a pesar de su altísimo nivel de abstracción, no se han impuesto. No es fácil determinar la razón de este fracaso; quizá falta de apoyo comercial, entornos de desarrollo, herramientas o librerías de programación, o quizá una exigencia de un esfuerzo de formalización excesivo para las necesidades o la formación del programador medio.

En perspectiva, puede decirse que, a pesar de los augurios lanzados en múltiples ocasiones sobre el final cercano del paradigma imperativo, basado en el modelo de computadora de von Neumann, éste mantiene un predominio aplastante. Hasta hace poco este predominio se ha basado en lenguajes procedimentales y actualmente es de lenguajes orientados a objetos. Lo mismo puede decirse respecto al predominio de los lenguajes secuenciales frente a lenguajes paralelos, concurrentes o distribuidos. A lo largo de estas décadas, la estandarización de los lenguajes se ha mostrado imprescindible y más aún en un mundo con diferentes plataformas interconectadas. Por supuesto, los problemas para estandarizar son muchos y no hay ninguna receta clara para tratarlos: momento de la estandarización, conformidad del compilador al estándar, obsolescencia de versiones anteriores, etc. En el mundo de competencia feroz que es la informática no puede olvidarse la dificultad de que las empresas acaten la disciplina de un estándar e incluso respeten el tiempo necesario para elaborar la norma.

Los desarrollos de sistemas son cada vez más complejos y costosos, involucrando cuestiones de distribución y concurrencia. Antes de pasar al desarrollo e implantación de un sistema, es necesario demostrar la corrección del diseño y sus propiedades de viveza y seguridad, para evitar pagar el precio de los errores tardíos. Para ilustrar este tipo de sucesos es recomendable hacer una visita al foro de riesgos en computación de la ACM (ACM Risks-Forum Digest, http://catless.ncl.ac.uk/Risks), donde se recuerdan sucesos como un desbordamiento del contador de programa que le costó a un banco de Nueva York pérdidas valoradas en 32.000 millones de dólares, historias de cortes de suministro

15

de operadoras telefónicas como el de Pac Bell de 1991 que afectó a más de seis millones de teléfonos, o fiascos como los errores de diseño de las operaciones en punto flotante del Pentium. Tal vez el precio de errores como los mencionados contribuya en el futuro a introducir lenguajes y herramientas formales, a pesar de las dificultades inherentes a su alto nivel de abstracción y desarrollo académico, razones comentadas en párrafos anteriores.

El éxito.

Es imposible predecir cuándo tendrá éxito un lenguaje de programación, pero podemos apuntar algunas tendencias del pasado. En primer lugar, el éxito de una innovación no siempre llega en el momento de su divulgación. La oportunidad del momento es una pieza clave del éxito de un lenguaje, independientemente de los méritos que aporte. Por ejemplo, la orientación a objetos no triunfó a comienzos de los 80 con Smalltalk, sino en los 80 con C++ y Java. Un lenguaje triunfa si satisface las necesidades de una comunidad, aunque no guste a la comunidad académica. Ya hemos comentado antes la divergencia entre seguidores de FORTRAN y de Algol.

Los seguidores de FORTRAN apreciaban su soporte para compilación separada de procedimientos, sus facilidades para cálculo numérico, la posibilidad de entrelazar código en ensamblador y la eficiencia del código generado. Por su parte, los académicos preferían la sencillez conceptual y la elegancia de Algol. Otro ejemplo lenguaje de éxito pero denostado por la comunidad académica es COBOL. Sin embargo, se sigue usando muchísimo para aplicaciones de gestión porque satisface mejor sus necesidades que otros lenguajes. Esto se debe a su capacidad para manejar datos heterogéneos y jerárquicos (con estructura de registro), realizar aritmética de punto fijo, generar informes y manejar grandes volúmenes de datos.

El aspecto visual y la utilización de modelos claros también suponen otro factor de éxito en la implantación de un lenguaje. Los lenguajes formales actuales, a pesar de todassus ventajas y el impulso recibido desde la academia, siguen sin imponerse. Por el contrario, vemos cómo el lenguaje de modelado unificado (UML), a pesar de que carece de una semántica formal, se está imponiendo rápidamente en las grandes compañías de software. Además de un adecuado nivel de abstracción y el carácter visual del lenguaje, podemos encontrar otras razones de su éxito en la existencia de un creciente número de herramientas de soporte al diseño.

El fracaso.

El intento de imponer algunos lenguajes de propósito general se ha saldado con fracaso. Aunque estos lenguajes frecuentemente han estado bien diseñados, han fracasado por su complejidad. El caso más clamoroso fue el de PL/I por IBM en los setenta. Debido al dominio comercial de IBM, se usó bastante en esa década, pero en seguida decayó su uso.

También puede considerarse un fracaso la imposición de Ada por el Departamento de Defensa de EE.UU. En este caso, el lenguaje tuvo un diseño especialmente cuidado, pero su gran complejidad lo limitó casi exclusivamente a aplicaciones militares o de control. Un último ejemplo, esta vez en el ámbito de los lenguajes de descripción de hardware, es VHDL, también impulsado por el Departamento de Defensa de los Estados Unidos. A pesar de exigirse una descripción en VHDL como requisito para la presentación

16

de cualquier proyecto, no ha desplazado al resto de los lenguajes, especialmente a Verilog en temas de síntesis.

Algunas aportaciones de alto nivel técnico o matemático exigen un esfuerzo tal a los programadores que estos las rechazan. Este esfuerzo puede darse tanto en los propios lenguajes como en metodologías o en herramientas. Muchas herramientas que restringen el proceso de desarrollo (como los editores dirigidos por sintaxis o las herramientas CASE) terminan siendo abandonadas, independientemente de su calidad, salvo por algunos seguidores entusiastas.

Algunas perspectivas futuras.

Resulta difícil hacer previsiones a largo plazo, y más aún en el mundo tan cambiante de la informática. De todas formas, no queremos dejar esta breve reflexión sin señalar algunas tendencias actuales. De vez en cuando se produce un cambio de paradigma en el modelo de programación más usado (imperativo, eso sí). A comienzos de los setenta se impuso la programación estructurada, en los noventa ha sido la programación orientada a objetos (por ejemplo C++, Java) y los lenguajes de guión (por ejemplo Tcl/Tk, Perl). Parece que en esta década seguirá el auge y afianzamiento de los lenguajes orientados a objetos y de guión.

Con la explosión de la web, el auge le ha llegado a los lenguajes orientados a la web, tanto de programación (p.ej. Java) como documentales (de marcado, como HTML oXML). Java continuará gozando de buena salud durante bastante tiempo y volverá a pasar por nuevas fases de diseño para dotar al lenguaje y a la máquina virtual de nuevasmedidas de seguridad especialmente en la parte de soporte a hilos para el desarrollo de código móvil. XML y todos los estándares relacionados (DOM, XSL, etc.) van a seguir imponiéndose como base de todo tipo de nuevas aplicaciones en Internet.

Respecto a las nuevas tendencias de software de componentes y servidores de aplicaciones, asistiremos al desarrollo de nuevos lenguajes para la integración de componentes y lenguajes, y posiblemente también para la estandarización de lenguajes de catálogos y descripción de componentes. Por otra parte, la comercialización y distribución de componentes forzosamente pasa por el cauce de Internet y deberáajustarse a los estándares que rigen en ella. ¿Está XML llamado a desempeñar esta función?

El tiempo nos ayudará a desvelar esta incógnita, pero nosotros así lo suponemos. Respecto a las técnicas formales, únicamente aquellas que ofrecen modelos sencillos y visuales parecen tener éxito en la industria. Si a esto unimos la necesidad de verificación y validación de los sistemas, nuestra opinión es que asistiremos a la aparición de nuevos lenguajes y herramientas visuales de comprobación de modelos simbólicas, deductivas y transformacionales, y que estos se integrarán en entornos y lenguajes aceptados, como UML o incluso en Java.

También es probable que haya un renacer de los lenguajes declarativos, apoyados en mejores herramientas, incluido soporte para programación en Internet.

17

Actualmente Google a lanzando GO.

La industria informática está en constante tensión entre generar un nuevo comienzo y la evolución de las tecnologías actuales. Los límites actuales de diseños de hardware y la tradicional tecnología de programación motivaron a Google a tomar el primer enfoque y crear Go.

“Hemos encontrado algunos de estos problemas muy frustrante y decidimos que la única manera de hacerles frente es con un nuevo lenguaje”, dijo Rob Pike, un ingeniero Principal de Google Go.

Cuando hablamos características modernas de programación y límites de hardware actual nos referimos a que Go está diseñado para resolver los problemas presentes en la mayoría de programas en relación al aprovechamiento de los procesadores de múltiples núcleos para realizar múltiples tareas en paralelo.

Go también incorpora un enfoque para aliviar algunos de los dolores de cabeza de la programación orientada a objetos. Además tiene las características de un lenguaje moderno, como “la recolección de basura” que ayuda a los programadores trabajar con gestión de la memoria sin preocuparse demasiado. Go intenta combinar la velocidad de los lenguajes dinámicos con el rendimiento y seguridad de los lenguajes compilados.

Actualmente, el proyecto Go cuenta con el lenguaje propio de programación, compiladores y un paquete runtime con una serie de funciones incorporadas. Go tiene una sintaxis similar a C y C ++, pero emplea las características modernas de la programación y tiene suficiente versatilidad que incluso podría ser utilizado en los navegadores Web. The Go Programming Language

Los creadores de Google Go.

Ken Thompson, el ganador del Premio Turing 1983 y 1998 la Medalla Nacional de Tecnología que, junto a Dennis Ritchie fueron los creadores originales de Unix. Thompson también se acercó con el lenguaje de programación B, que condujo luego a C de Ritchie. Rob Pike, ingeniero de software que era un miembro del equipo Unix de Bell Labs, y un proyecto de sistema operativo denominado Plan 9. El ha trabajado con Thompson durante años y con él creó el ampliamente utilizado esquema de codificación de caracteres UTF-8.Robert Griesemer, que ayudó a escribir el compilador de Java HotSpot y V8, el motor JavaScript del navegador Chrome. Russ Cox, un desarrollador de Plan 9 .Ian Taylor, que ha trabajado en la implementación del ampliamente utilizado compilador de código abierto GCC. Adam Langley. Jini Kim.

18

Conclusión.

En conclusión unas palabras profeticas de E. W. Dijkstra habló casi hace 28 años en su es la conferencia del Premio de Turing que decía “Tan largo como no había máquinas, programar era ningún problema; cuando tuvimos unos pocas computadoras débiles, programar llegó a ser un problema templado y ahora que tenemos las computadoras gigantescas, programar ha llegado a ser un problema igualmente gigantesco. En este sentido que la industria electrónica no ha resuelto un solo problema, tiene sólo los creó - ha creado el problema de usar su producto". ["El Programista Humilde", Comunicaciones del ACM, Vol 15, No. 10 (el octubre 1972).].Es decir una de las llaves a programar exitoso son el concepto de la abstracción. La abstracción es la llave a la construcción sistemas complejos de software. Como el tamaño de nuestros problemas crece, la necesidad para la abstracción dramáticamente esta en aumento.1era.Generacion: Al desarrollarse las primeras computadoras electrónicas, se vio la necesidad de programarlas, es decir, de almacenar en memoria la información sobre la tarea que iban a ejecutar. Las primeras se usaban como calculadoras simples; se les indicaban los pasos de cálculo, uno por uno.2da.Generacion: El primer gran avance que se dio, como ya se comentó, fue la abstracción dada por el Lenguaje Ensamblador, y con él, el nacimiento de las primeras herramientas automáticas para generar el código máquina. Esto redujo los errores triviales, como podía ser el número que correspondía a una operación, que son sumamente engorrosos y difíciles de detectar, pero fáciles de cometer.3er.Generacion: Con el desarrollo en los 50s y 60s de algoritmos de más elevado nivel, y el aumento de poder del hardware, empezaron a entrar al uso de computadoras científicos de otras ramas; ellos conocían mucho de Física, Química y otras ramas similares, pero no de Computación, y por supuesto, les era sumamente complicado trabajar con lenguaje Ensamblador en vez de fórmulas. Así, nació el concepto de Lenguaje de Alto Nivel, con el primer compilador de FORTRAN (FORmula TRANslation), que, como su nombre indica, inició como un "simple" esfuerzo de traducir un lenguaje de fórmulas, al lenguaje ensamblador y por consiguiente al lenguaje de máquina. A partir de FORTRAN, se han desarrollado innumerables lenguajes, que siguen el mismo concepto: buscar la mayor abstracción posible, y facilitar la vida al programador, aumentando la productividad, encargándose los compiladores o intérpretes de traducir el lenguaje de alto nivel, al lenguaje de computadora.4ta.Generacion: Los idiomas de la cuarta generación parecen según las instrucciones a las de la tercera generación. Lo nuevo de estas lenguajes son conceptos como clases, objetos y eventos que permiten soluciones más fáciles y lógicos. Lenguajes como C++, java y C# se llaman lenguajes orientadas al objeto. 5ta.Generacion: Como la quinta generación están conocidos los Lenguajes de inteligencia artificial. Han sido muy valorados al principio de las noventa - mientras ahora el desarrollo de software toma otras caminos. Lo que veremos en el futuro es menos dependencia en el idioma, y más en el modelando herramientas, tal como el Unificado Modelando el Idioma (UML). Aun faltan novedades en programación como la web. 2.0 y Programacion Go de Google que el futuro de la programación es unificar e interactuar los lenjuages de programación en uno solo.

19

Bibliografías.

http://www.it.uc3m.es/jvillena/irc/practicas/estudios/Lenguajes_de_Programacion.pdf

http://pdf.rincondelvago.com/lenguajes-de-programacion_historia-y-evolucion.html http://www.authorstream.com/Presentation/verarex-33544-evolucion-de-los-

lenguajes-programaci-evolucionlp-education-ppt-powerpoint/ http://ocw.univalle.edu.co/ocw/ingenieria-de-sistemas-telematica-y-afines/

fundamentos-de-lenguajes-de-programacion/material-1/evolucionLP.pdf http://jorgesaavedra.wordpress.com/2007/07/07/el-futuro-lenguaje-de-

programacion-d/ http://geeks.ms/blogs/mllopis/archive/2008/10/29/el-futuro-de-los-lenguajes-de-

programaci-243-n-cap-237-tulo-1-control-poder-y-confianza.aspx

20