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.
Para que la computadora entienda
nuestras instrucciones debe usarse un lenguaje específico conocido
como código máquina, el cual la máquina comprende fácilmente,
pero que lo hace excesivamente complicado para las personas. De hecho
sólo consiste en cadenas extensas de números 0 y 1.
Para facilitar el trabajo, los primeros
operadores de computadoras decidieron hacer un traductor para
reemplazar los 0 y 1 por palabras o abstracción de palabras y letras
provenientes del inglés; éste se conoce como lenguaje ensamblador.
Por ejemplo, para sumar se usa la letra A de la palabra inglesa add
(sumar). El lenguaje ensamblador sigue la misma estructura del
lenguaje máquina, pero las letras y palabras son más fáciles de
recordar y entender que los números.
La necesidad de recordar secuencias de
programación para las acciones usuales llevó a denominarlas con
nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar),
MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia
de posiciones se le denominó "instrucciones", y a este
conjunto de instrucciones se le llamó lenguaje ensamblador.
Posteriormente aparecieron diferentes lenguajes de programación, los
cuales reciben su denominación porque tienen una estructura
sintáctica similar a los lenguajes escritos por los humanos,
denominados también lenguajes de alto nivel.
La primera programadora de computadora
conocida fue Ada Lovelace, hija de Anabella Milbanke Byron y Lord
Byron. Anabella introdujo en las matemáticas a Ada quien, después
de conocer a Charles Babbage, tradujo y amplió una descripción de
su máquina analítica. Incluso aunque Babbage nunca completó la
construcción de cualquiera de sus máquinas, el trabajo que Ada
realizó con éstas le hizo ganarse el título de primera
programadora de computadoras del mundo. El nombre del lenguaje de
programación Ada fue escogido como homenaje a esta programadora.
A finales de 1953, John Backus sometió
una propuesta a sus superiores en IBM para desarrollar una
alternativa más práctica al lenguaje ensamblador para programar la
computadora central IBM 704. El histórico equipo Fortran de Backus
consistió en los programadores Richard Goldberg, Sheldon F. Best,
Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving
Ziller, Lois Haibt y David Sayre.
El primer manual para el lenguaje
Fortran apareció en octubre de 1956, con el primer compilador
Fortran entregado en abril de 1957. Esto era un compilador
optimizado, porque los clientes eran reacios a usar un lenguaje de
alto nivel a menos que su compilador pudiera generar código cuyo
desempeño fuera comparable al de un código hecho a mano en lenguaje
ensamblador.
En 1960, se creó COBOL, uno de los
lenguajes usados aún en 2010 en informática de gestión.
A medida que la complejidad de las
tareas que realizaban las computadoras aumentaba, se hizo necesario
disponer de un método más eficiente para programarlas. Entonces, se
crearon los lenguajes de alto nivel, como lo fue BASIC en las
versiones introducidas en los microordenadores de la década de 1980.
Mientras que una tarea tan sencilla como sumar dos números puede
necesitar varias instrucciones en lenguaje ensamblador, en un
lenguaje de alto nivel bastará una sola sentencia.
Todos los lenguajes de programación
tienen algunos elementos de formación primitivos para la descripción
de los datos y de los procesos o transformaciones aplicadas a estos
datos (tal como la suma de dos números o la selección de un
elemento que forma parte de una colección). Estos elementos
primitivos son definidos por reglas sintácticas y semánticas que
describen su estructura y significado respectivamente.
A la forma visible de un lenguaje de
programación se le conoce como sintaxis. La mayoría de los
lenguajes de programación son puramente textuales, es decir,
utilizan secuencias de texto que incluyen palabras, números y
puntuación, de manera similar a los lenguajes naturales escritos.
Por otra parte, hay algunos lenguajes de programación que son más
gráficos en su naturaleza, utilizando relaciones visuales entre
símbolos para especificar un programa.
La sintaxis de un lenguaje de
programación describe las combinaciones posibles de los símbolos
que forman un programa sintácticamente correcto. El significado que
se le da a una combinación de símbolos es manejado por su semántica
(ya sea formal o como parte del código duro de la referencia de
implementación). Dado que la mayoría de los lenguajes son
textuales, este artículo trata de la sintaxis textual.
La sintaxis de los lenguajes de
programación es definida generalmente utilizando una combinación de
expresiones regulares (para la estructura léxica) y la Notación de
Backus-Naur (para la estructura gramática).
La semántica estática define las
restricciones sobre la estructura de los textos válidos que resulta
imposible o muy difícil expresar mediante formalismos sintácticos
estándar. Para los lenguajes compilados, la semántica estática
básicamente incluye las reglas semánticas que se pueden verificar
en el momento de compilar. Por ejemplo el chequeo de que cada
identificador sea declarado antes de ser usado (en lenguajes que
requieren tales declaraciones) o que las etiquetas en cada brazo de
una estructura case sean distintas. Muchas restricciones importantes
de este tipo, como la validación de que los identificadores sean
usados en los contextos apropiados (por ejemplo no sumar un entero al
nombre de una función), o que las llamadas a subrutinas tengan el
número y tipo de parámetros adecuado, puede ser implementadas
definiéndolas como reglas en una lógica conocida como sistema de
tipos. Otras formas de análisis estáticos, como los análisis de
flujo de datos, también pueden ser parte de la semántica estática.
Nuevos lenguajes de programación como Java y C# tienen un análisis
definido de asignaciones, una forma de análisis de flujo de datos,
como parte de su semántica estática.
Un sistema de tipos define la manera en
la cual un lenguaje de programación clasifica los valores y
expresiones en tipos, como pueden ser manipulados dichos tipos y como
interactúan. El objetivo de un sistema de tipos es verificar y
normalmente poner en vigor un cierto nivel de exactitud en programas
escritos en el lenguaje en cuestión, detectando ciertas operaciones
inválidas. Cualquier sistema de tipos decidible tiene sus ventajas y
desventajas: mientras por un lado rechaza muchos programas
incorrectos, también prohíbe algunos programas correctos aunque
poco comunes. Para poder minimizar esta desventaja, algunos lenguajes
incluyen lagunas de tipos, conversiones explícitas no checadas que
pueden ser usadas por el programador para permitir explícitamente
una operación normalmente no permitida entre diferentes tipos. En la
mayoría de los lenguajes con tipos, el sistema de tipos es usado
solamente para checar los tipos de los programas, pero varios
lenguajes, generalmente funcionales, llevan a cabo lo que se conoce
como inferencia de tipos, que le quita al programador la tarea de
especificar los tipos. Al diseño y estudio formal de los sistemas de
tipos se le conoce como teoría de tipos.
Existen dos tipos de lenguajes
claramente diferenciados; los lenguajes de bajo nivel y los de alto
nivel.
El ordenador sólo entiende un lenguaje
conocido como código binario o código máquina, consistente en
ceros y unos. Es decir, sólo utiliza 0 y 1 para codificar cualquier
acción.
Los lenguajes más próximos a la
arquitectura hardware se denominan lenguajes de bajo nivel y los que
se encuentran más cercanos a los programadores y usuarios se
denominan lenguajes de alto nivel.
Lenguajes de bajo nivel
Lenguaje de máquina es el sistema de
códigos directamente interpretable por un circuito microprogramable,
como el microprocesador de una computadora o el microcontrolador de
un autómata. Este lenguaje está compuesto por un conjunto de
instrucciones que determinan acciones a ser tomadas por la máquina.
Un programa consiste en una cadena de estas instrucciones de lenguaje
de máquina (más los datos). Estas instrucciones son normalmente
ejecutadas en secuencia, con eventuales cambios de flujo causados por
el propio programa o eventos externos. El lenguaje de máquina es
específico de cada máquina o arquitectura de la máquina, aunque el
conjunto de instrucciones disponibles pueda ser similar entre ellas.
Los circuitos microprogramables son
sistemas digitales, lo que significa que trabajan con dos únicos
niveles de tensión. Dichos niveles, por abstracción, se simbolizan
con el cero, 0, y el uno, 1, por eso el lenguaje de máquina sólo
utiliza dichos signos. Esto permite el empleo de las teorías del
álgebra booleana y del sistema binario en el diseño de este tipo de
circuitos y en su programación.
El desarrollo tecnológico ha permitido
evolucionar desde las redes de relés electromagnéticos de Shannon a
circuitos con tubos de vacío, luego a redes transistorizadas, hasta
llegar a los modernos circuitos integrados cuya cúspide lo forman
los circuitos microprogramados.
Lenguajes de alto nivel
Un lenguaje de programación de alto
nivel se caracteriza 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 alto nivel se crearon para que el usuario común
pudiese solucionar un problema de procesamiento de datos de una
manera más fácil y rápida.
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.
Los lenguajes de alto nivel más
conocidos son:
- Ada
- ALGOL
- BASIC
- C++
- C#
- COBOL
- Fortran
- Java
- Lisp
- Modula-2
- Pascal
- Perl
- PHP
- PL/1
- PL/SQL
No hay comentarios:
Publicar un comentario