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.
Sobre los últimos 50 años, los idiomas que programan han evolucionado del código binario de máquina a herramientas poderosas que crean las abstracciones complejas. Es importante entender por qué los idiomas han evolucionado, y qué capacidades que los idiomas más nuevos nos dan.
"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".
E. W. Dijkstra habló estas palabras proféticas casi hace 28 años en su es la conferencia del Premio de Turing. En aquel momento, el 'las computadoras gigantescas él radio de probablemente tenido entre 64 y 128 kilobytes de la memoria verdadera, y a lo más unos pocos megaoctetos de artefactos de almacenamiento de acceso directo.
Para entender la palabra programación hay que entender 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 aumento. En sistemas sencillos, los años 1950s y '60s, un solo programador podría entender el problema entero, y por lo tanto manipula todas estructuras del programa y datos. Los programadores son hoy incapaces de entender todos los programas y los datos. La abstracción sirve para que el programador pueda utilizar los conceptos necesarios.
"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".
E. W. Dijkstra habló estas palabras proféticas casi hace 28 años en su es la conferencia del Premio de Turing. En aquel momento, el 'las computadoras gigantescas él radio de probablemente tenido entre 64 y 128 kilobytes de la memoria verdadera, y a lo más unos pocos megaoctetos de artefactos de almacenamiento de acceso directo.
Para entender la palabra programación hay que entender 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 aumento. En sistemas sencillos, los años 1950s y '60s, un solo programador podría entender el problema entero, y por lo tanto manipula todas estructuras del programa y datos. Los programadores son hoy incapaces de entender todos los programas y los datos. La abstracción sirve para que el programador pueda utilizar los conceptos necesarios.
Primera Generación
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 para desarrollar los cálculos, uno por uno.
John Von Neumann desarrolló el modelo que lleva su nombre, para describir este concepto de "programa almacenado". En este modelo, se tiene una abstracción de la memoria como un conjunto de celdas, que almacenan simplemente números. Estos números pueden representar dos cosas: los datos, sobre los que va a trabajar el programa; o bien, el programa en sí.
¿Cómo es que describimos un programa como números? Se tenía el problema de representar las acciones que iba a realizar la computadora, y que la memoria, al estar compuesta por switches correspondientes al concepto de bit, solamente nos permitía almacenar números binarios.
La solución que se tomó fue la siguiente: a cada acción que sea capaz de realizar nuestra computadora, asociarle un número, que será su código de operación (opcode) . Por ejemplo, una calculadora programable simple podría asignar los opcodes :
1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE.
John Von Neumann desarrolló el modelo que lleva su nombre, para describir este concepto de "programa almacenado". En este modelo, se tiene una abstracción de la memoria como un conjunto de celdas, que almacenan simplemente números. Estos números pueden representar dos cosas: los datos, sobre los que va a trabajar el programa; o bien, el programa en sí.
¿Cómo es que describimos un programa como números? Se tenía el problema de representar las acciones que iba a realizar la computadora, y que la memoria, al estar compuesta por switches correspondientes al concepto de bit, solamente nos permitía almacenar números binarios.
La solución que se tomó fue la siguiente: a cada acción que sea capaz de realizar nuestra computadora, asociarle un número, que será su código de operación (opcode) . Por ejemplo, una calculadora programable simple podría asignar los opcodes :
1 = SUMA, 2 = RESTA, 3 = MULTIPLICA, 4 = DIVIDE.
Supongamos que queremos realizar la operación 5 * 3 + 2, en la calculadora descrita arriba. En memoria, podríamos "escribir" el programa de la siguiente forma:
La descripción y uso de los opcodes es lo que llamamos lenguaje de máquina. Es decir, la lista de códigos que la máquina va a interpretar como instrucciones, describe las capacidades de programación que tenemos de ella; es el lenguaje más primitivo, depende directamente del hardware, y requiere del programador que conozca el funcionamiento de la máquina al más bajo nivel.
Los lenguajes más primitivos fueron los lenguajes de máquina. Esto, ya que el hardware se desarrolló antes del software, y además cualquier software finalmente tiene que expresarse en el lenguaje que maneja el hardware.
La programación en esos momentos era sumamente tediosa, pues el programador tenía que "bajarse" al nivel de la máquina y decirle, paso a pasito, cada punto de la tarea que tenía que realizar. Además, debía expresarlo en forma numérica; y por supuesto, este proceso era propenso a errores, con lo que la productividad del programador era muy limitada. Sin embargo, hay que recordar que en estos momentos, simplemente aún no existía alternativa.
Los lenguajes más primitivos fueron los lenguajes de máquina. Esto, ya que el hardware se desarrolló antes del software, y además cualquier software finalmente tiene que expresarse en el lenguaje que maneja el hardware.
La programación en esos momentos era sumamente tediosa, pues el programador tenía que "bajarse" al nivel de la máquina y decirle, paso a pasito, cada punto de la tarea que tenía que realizar. Además, debía expresarlo en forma numérica; y por supuesto, este proceso era propenso a errores, con lo que la productividad del programador era muy limitada. Sin embargo, hay que recordar que en estos momentos, simplemente aún no existía alternativa.
Segunada Generación
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. Sin embargo, aún aquí es fácil para que el programador llegue a perderse y cometer errores de lógica, pues debe bajar al nivel de la forma en que trabaja el CPU, y entender bien todo lo que sucede dentro de él.
Ejemplo Lenguaje Ensamblador: Hola Mundo!

Ejemplo Lenguaje Ensamblador: Hola Mundo!
Tercera Generación
Lenguaje de Alto Nivel: Se desarrollo el primero compilador FORTRAN (Formula Traslation), que permite traducir de un lenguaje de formulas al lenguaje esnsamblador y por consiguiente al lenguaje de maquina.A partir de FORTRAN se han desarrollado numerables lenguajes de programación facilitando el trabajo del programador.
Hay que notar la existecia de lenguajes que combinan el lenguaje de alto y bajo nivel "Ensamblador" y es el C.
Lenguaje C: Contiene estructuras de programación de alto nivel, pero fue diseñado con muy pocas instrucciones facil de traducir al código de maquina . Por ello muchas personas consideran que C fue diseñado para hacer los Sistemas Operativos.
Cuarta Generación
Los idiomas de la cuarta generación maneja las mismas instrucciones 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.
Los idiomas modernos, tal como C++ y Java, no sólo permite las abstracciones, permite la implementación impuesta de restricciones en abstracciones. La mayoría de los idiomas modernos permite el modelado de datos en mi idioma. Además, puedo limitar el acceso para modelar las restricciones del mundo verdadero en datos. El programador puede modelar la solución en términos del problema, es decir, que la solución sea orientado al problema, para que la solución refleje el mundo verdadero en términos de estructuras de datos y acceso a los datos.

Los idiomas modernos, tal como C++ y Java, no sólo permite las abstracciones, permite la implementación impuesta de restricciones en abstracciones. La mayoría de los idiomas modernos permite el modelado de datos en mi idioma. Además, puedo limitar el acceso para modelar las restricciones del mundo verdadero en datos. El programador puede modelar la solución en términos del problema, es decir, que la solución sea orientado al problema, para que la solución refleje el mundo verdadero en términos de estructuras de datos y acceso a los datos.
Quinta Generación
En la quinta generación están 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 Lenguaje Unificado Modelado (UML).Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.. Esto produce un diseño (y posiblemente código) que puede ser validado por el cliente antes de completar la implementación y probar. Cuando los problemas diarios que resolvemos llegan a ser más grande, nosotros tenemos cada vez menos tiempo. Los días de decir, "acabamos de escribir una versión de Beta y el cliente entonces pueden decir lo que realmente quieren," son pasados.


Historia de las lenguajes de programación

Referencia: http://go.yuri.at/juegos/clase1/clase1_introduccion.html#his
Lo que veremos en el futuro es menos dependencia en el idioma, y más en el modelando herramientas, tal como el Lenguaje Unificado Modelado (UML).Es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. UML ofrece un estándar para describir un "plano" del sistema (modelo), incluyendo aspectos conceptuales tales como procesos de negocio y funciones del sistema, y aspectos concretos como expresiones de lenguajes de programación, esquemas de bases de datos y componentes reutilizables.. Esto produce un diseño (y posiblemente código) que puede ser validado por el cliente antes de completar la implementación y probar. Cuando los problemas diarios que resolvemos llegan a ser más grande, nosotros tenemos cada vez menos tiempo. Los días de decir, "acabamos de escribir una versión de Beta y el cliente entonces pueden decir lo que realmente quieren," son pasados.
Historia de las lenguajes de programación
Referencia: http://go.yuri.at/juegos/clase1/clase1_introduccion.html#his