2. PROGRAMACION
La programación informática, a menudo acortada
como programación, es el proceso de diseñar, codificar, depurar y
mantener el código fuente de programas computacionales. El
código fuente es escrito en un lenguaje de programación. El
propósito de la programación es crear programas que exhiban un
comportamiento deseado. El proceso de escribir código requiere
frecuentemente conocimientos en varias áreas distintas, además
del dominio del lenguaje a utilizar, algoritmos especializados y
lógica formal. Programar no involucra necesariamente otras tareas
tales como el análisis y diseño de la aplicación (pero sí el diseño
del código), aunque sí suelen estar fusionadas en el desarrollo de
pequeñas aplicaciones.
3. LENGUAJE DE PROGRAMACION
lenguaje de programación es un lenguaje formal diseñado para expresar procesos que pueden
ser llevados a cabo por máquinas como las computadoras.
Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una
máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.1
Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su
estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se
prueba, se depura, se compila(de ser necesario) y se mantiene el código fuente de un programa
informático se le llama programación.
También la palabra programación se define como el proceso de creación de
un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de
los siguientes pasos:
El desarrollo lógico del programa para resolver un problema en particular.
Escritura de la lógica del programa empleando un lenguaje de programación específico
(codificación del programa).
Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
Prueba y depuración del programa.
Desarrollo de la documentación.
4. HISTORIA DE LA PROGRAMACIÓN
A pesar de que muchos usuarios pueden creer que la programación y
el desarrollo son ciencias nuevas, lo cierto es que no es así. De hecho,
el algoritmo considerado primer programa fue creado entre 1842
y 1843 por Ada Lovelace. Años después, el departamento de defensa
estadounidense nombró un lenguaje de programación, Ada, en su
honor.
Pero quien realmente influyó en el diseño de los primeros
computadores fue Charles Babbage (1793-1871). Con la colaboración
de la hija de Lord Byron, Lady Ada Countess of Lovelace (1815-1852),
a la que debe su nombre el lenguaje ADA creado por el DoD
(Departamento de defensa de Estados Unidos) en los años 70.
Babbage diseñó y construyó la "máquina diferencial" para el cálculo
de polinomios. Más tarde diseñó la "máquina analítica" de propósito
general, capaz de resolver cualquier operación matemática. Murió sin
poder terminarla, debido al escepticismo de sus patrocinadores y a
que la tecnología de la época no era lo suficientemente avanzada. Un
equipo del Museo de las Ciencias de Londres, en 1991, consiguió
construir la máquina analítica de Babbage, totalmente funcional,
siguiendo sus dibujos y especificaciones
5. Un hito importante en la historia de la
informática fueron las tarjetas
perforadas como medio para
"alimentar" los computadores. Lady
Ada Lovelace propuso la utilización de
las tarjetas perforadas en la máquina
de Babbage. Para que se enteren todos
esos machistas desaprensivos, el
primer programador/a fue una mujer.
En 1880 el censo en Estados Unidos
tardó más de 7 años en realizarse. Es
obvio que los datos no eran muy
actualizados. Un asistente de la oficina
del censo llamado Herman
Hollerit (1860-1929) desarrolló un
sistema para automatizar la pesada
tarea del censo. Mediante tarjetas
perforadas y un sistema de circuitos
eléctricos, capaz de leer unas 60
tarjetas por minuto realizó el censo de
1890 en 3 años ahorrando tiempo y
dinero. Más tarde fundó la Tabulating
Machine Company y en 1924 tras
alguna que otra fusión nació la
Internacional Bussines Machines, IBM.
Maquina analítica de Babbage
6. Las computadoras de hoy en día se sustentan en la lógica
matemática basada en un sistema binario. Dicho sistema se
implementa sobre dispositivos electrónicos que permiten, o no,
pasar la corriente, con lo que se consiguen los 2 estados binarios: 0
y 1. A mediados del siglo XX, cuando se empezaron a construir las
primeras computadoras digitales, se utilizaban tubos de vacío
para implementar los 2 estados binarios, pero ¿ cómo aparecieron
estos conceptos ? Alan Mathison Turing (1912-1954) diseñó una
calculadora universal para resolver cualquier problema, la
"máquina de Turing". Tuvo mucha influencia en el desarrollo de la
lógica matemática. En 1937 hizo una de sus primeras
contribuciones a la lógica matemática y en 1943 plasmó sus ideas
en una computadora que utilizaba tubos de vacío. George
Boole (1815-1864) también contribuyó al algebra binaria y a los
sistemas de circuitos de computadora, de hecho, en su honor fue
bautizada el álgebra booleana.
7. Por otro lado, una de
las empresas más
grandes de la
informática, IBM,
nació en 1896, aunque
entonces se
llamaba Tabulating
Machine Company.
Fundada por Herman
Hollerith, se dedicaba
a la fabricación de
máquinas capaces de
leer tarjetas
perforadas.
8. La primera computadora digital electrónica patentada fue obra de John
Vincent Atanasoff (1903-1995). Conocedor de las inventos de Pascal y
Babbage, y ayudado por Clifford Berry (1918-1963), construyó el
Atanasoff Berry Computer (ABC). El ABC se desarrolló entre 1937 y 1942.
Consistía en una calculadora electrónica que utilizaba tubos de vacío y
estaba basada en el sistema binario (sistema numérico en el que se
combinan los valores verdadero y falso, o 0 y 1).
Entre 1939 y 1944, Howard Aiken (1900-1973) de la universidad de
Harvard en colaboración con IBM desarrolló el Mark 1. Era una
computadora electromecánica de 16 metros de largo y más de dos de alto.
Tenía 700.000 elementos móviles y varios centenares de kilómetros de
cables. Podía realizar las cuatro operaciones básicas y trabajar con
información almacenada en forma de tablas.
Por desgracia, los avances tecnológicos suelen producirse gracias a los
militares que se aprovechan de la ciencia para perfeccionar sus armas. En
la Moore School de la Universidad de Pensilvania se estaba trabajando en
un proyecto militar para realizar unas tablas de tiro para armas balísticas.
Los cálculos eran enormes y se tardaban semanas en realizarlos. Parece
ser que John W. Mauchly (1907-1980), quien dirigía el departamento de
física del Ursine College de Filadelfia vivió en casa de Atanasoff durante
cuatro días a partir del 13 de Junio de 1941, lo que seguramente
aprovechó para conocer las ideas de Atanasoff.
9. Junto a John Presper Eckert (1919-1995), Mauchly desarrolló una
computadora electrónica completamente operacional a gran escala, para
acelerar los complicados cálculos del proyecto militar de la universidad
Moore. Se terminó en 1946 y se llamó Electronic Numerical Integrator
And Computer (ENIAC). El ENIAC tenía 18.000 tubos electrónicos
integrados en un volumen de 84 metros cúbicos. Pesaba unas 30
toneladas y consumía alrededor de 100.000 vatios. Su capacidad de
cálculo era de 5.000 operaciones por segundo, aunque tenía que
programarse manualmente conectándola a 3 tableros que contenían más
de 6000 interruptores. Cargar un programa podía ser una tarea de varios
días. El calor dispado por semejante monstruo debía ser importante, y se
necesitaba una instalación de aire acondicionado. En definitiva, un
ordenador portátil... más o menos. Puede que no os suene, pero quien
conozca de "los entresijos de la informática" seguro que considera
importante nombrar a Johann Ludwig Von Neumann (1903-1957), genio
de las matemáticas, quien tuvo el honor de asistir a las clases de Albert
Einstein en la universidad de Berlín. Autor de trabajos de lógica
simbólica, matemática pura y aplicada, física y tecnología, publicó un
artículo acerca del almacenamiento de los programas, en 1945. Proponía
que los programas se guardaran en memoria al igual que los datos, en
forma binaria. Esto tuvo como consecuencia el aumento de velocidad de
los cálculos y la ausencia de errores producidos por fallos mecánicos al
programar la máquina mediante cables.
10. En cuanto a la aparición de los lenguajes de programación, el
archiconocido COBOL, que tantos problemas causó con el "efecto 2000",
fue el primer lenguaje en el que no había que programar directamente en
código binario, y fue Grace Murray Hoper en 1952, una oficial de la
Marina de Estados Unidos desarrolló el primer compilador, un programa
que puede traducir enunciados parecidos al inglés en un código binario
comprensible para la maquina llamado COBOL (COmmon Business-
Oriented Languaje).
A partir de ahí, los avances han sido vertiginosos.
La utilización del transistor en las computadoras en 1958, sustituyendo
los tubos de vacío
La aparición del circuito integrado de mano de Jack Kilby, también en
1958
La miniaturización de un circuito electrónico en un chip de silicio en 1961
El primer microprocesador, el 4004 de Intel, en 1971
Gary Kildall crea el sistema operativo CP/M en 1973
IBM comercializa el primer PC en 1980
11. 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
de cálculo, 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.
12. 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.
13. Segunda 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 el programador
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.
14. Tercera Generación
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.
Hay que notar la existencia de lenguajes que combinan características de
los de alto nivel y los de bajo nivel (es decir, Ensamblador). Mi ejemplo
favorito es C: contiene estructuras de programación de alto nivel, y la
facilidad de usar librerías que también son características de alto nivel; sin
embargo, fue diseñado con muy pocas instrucciones, las cuales son
sumamente sencillas, fáciles de traducir al lenguaje de la máquina; y
requiere de un entendimiento apropiado de cómo funciona la máquina, el
uso de la memoria, etcétera. Por ello, muchas personas consideramos a
lenguajes como C (que fue diseñado para hacer sistemas operativos),
lenguajes de nivel medio.
16. Cuarta Generación
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.
Los idiomas modernos, tal como C++ y Java, no sólo permite las
abstracciones, pero permite la implementación impuesta de
restricciones en abstracciones. La mayoría de los idiomas
modernos son objetivas orientado, que permite que mí modele el
mundo verdadero que usa mi idioma. Además, puedo limitar el
acceso para modelar las restricciones de mundo verdadero en
datos. La llave es que usé el término "mundo verdadero." Por la
primera vez, yo modelo mi solución en términos del problema.
Quiero que mi solución sea orientado de problema, para que la
solución refleje el mundo verdadero en términos de estructuras de
datos y acceso a los datos. Yo también puedo aplicar directamente
y para poder modelar objetos de mundo verdadero usando las
clases (en C + + o Java).
18. Quinta Generación
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). La salida del modelando herramienta producirá mucho
de nuestro código para nosotros; en el muy menos, producirá
arquitectónico y los modelos del diseño y la estructura de nuestro código.
Esto producirá un diseño (y posiblemente código) eso 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 "volver a hacer" el código. Los días de
decir, "acabamos de escribir una versión de Beta y el cliente entonces
pueden decir nosotros lo que ellos quieren realmente," son pasados. Las
organizaciones que fallan de obtener completa y corrige los requisitos de
cliente antes de escribir el código saldrá del negocio. ¿Por qué? Porque
toma demasiado largo, y cuesta también mucho, para escribir código dos
o más vez. Las organizaciones que tienen un compromiso a la
comprobación y la validación antes de producir código prosperarán - los
otros fallarán.
19. Ejemplos de quinta generación
ejemplo Flowchart ejemplo UML