1.6. Lenguajes de programación 1.6.1. Concepto de lenguaje de programación1 Un lenguaje de programación es un conjunto limitado de palabras y de símbolos que representan procedimientos, cálculos, decisiones y otras operaciones que puede ejecutar una computadora. Los lenguajes de programación son la herramienta fundamental para el desarrollo de software. Los primeros lenguajes de programación surgieron de la idea de Charles Babagge a mediados del siglo XIX. Fue un profesor matemático de la universidad de Cambridge e inventor inglés, que a principios del siglo XIX predijo muchas de las teorías en que se basan los actuales ordenadores. Sus ideas consistían en lo que él denominaba la “máquina analítica”, pero que por motivos técnicos no pudo construirse hasta mediados del siglo XX. Colaboró en este proyecto Ada Lovedby, considerada como la primera programadora de la historia, pues realizó trabajos para aquella supuesta máquina de Babagge, con tarjetas perforadas. Como la máquina no llegó nunca a construirse, los programas de Ada, lógicamente, tampoco llegaron a ejecutarse, pero sí suponen un punto de partida de la programación, sobre todo si observamos que en cuanto se empezó a ejecutar esta tarea, 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. 1.6.2. Clasificación de lenguajes La clasificación más común y básica que suele hacerse de los lenguajes de programación es la que los divide en lenguajes de bajo y de alto nivel. Los lenguajes de programación de bajo nivel fueron los primeros que surgieron, tomaron ese nombre por estar directamente relacionados con el hardware del computador, es decir, el usuario introduce una serie de códigos numéricos que la máquina va a interpretar como instrucciones. Para usar este lenguaje, el 1 http://www.monografias.com/trabajos38/tipos-lenguajes-programacion/tipos-lenguajesprogramacion.shtml programador tenía que conocer el funcionamiento de la máquina al más bajo nivel y los errores de programación eran muy frecuentes. Los lenguajes de alto nivel surgieron con posterioridad 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 ensamblador y por consiguiente al lenguaje de máquina, facilitando la labor a los programadores. A partir de Fortran, se han desarrollado innumerables lenguajes, que siguen el mismo concepto: facilitar al programador su función para aumentar la productividad en el desarrollo de programas para computadora. Estos lenguajes usan un número reducido de instrucciones (en inglés) que siguen estrictas reglas gramaticales conocidas como sintaxis del lenguaje. Pero, aunque el programador de esta forma se distancie del hardware del computador, éste sigue trabajando en lenguaje de la máquina. Por ello se hace necesaria una traducción a una secuencia de instrucciones interpretables por el computador. Esta labor es llevada a cabo por los compiladores y los intérpretes. El lenguaje máquina2 de una computadora es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de un ordenador o el microcontrolador de un autómata (un PLC). Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa de computadora 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. 2 http://es.wikipedia.org/wiki/Lenguaje_m%C3%A1quinaAgosto, 2007. 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. 1. Comando u operación Instrucciones 2. Operando Figura 1.5. Partes de las instrucciones en el lenguaje máquina El lenguaje ensamblador permite a la computadora convertir las instrucciones en lenguaje ensamblador del programador en su propio código de máquina. Un programa de instrucciones escrito en lenguaje ensamblador se llama programa fuente. Cuando el ensamblador convierte las instrucciones fuente en código de máquina, se crea un nuevo archivo denominado programa objeto. Para los programadores es más fácil escribir instrucciones en un lenguaje ensamblador que en códigos de lenguajes de máquina, solo que pueden emplearse dos ejecuciones de computadora antes de que se puedan utilizar las instrucciones del programa fuente para producir las salidas deseadas. Los lenguajes ensambladores tienen ventajas sobre los de máquina. Ahorran tiempo y requieren menos atención a detalles. Se incurre en menos errores y los que se cometen son más fáciles de localizar. Además, los programas en lenguaje ensamblador son más fáciles de modificar que los que están en lenguaje de máquina. Pero existen limitaciones: la codificación en lenguaje ensamblador es todavía un proceso lento. Una desventaja importante de estos lenguajes es que tienen una orientación a la máquina, es decir, están diseñados para la marca y modelo específico de procesador que se utiliza, y es probable que, para una máquina diferente se tengan que volver a codificar los programas. El desarrollo de las técnicas nemotécnicas y macroinstrucciones condujeron, a su vez, al desarrollo de lenguajes de alto nivel que a menudo están orientados hacia una clase determinada de problemas de proceso. Por ejemplo, se han diseñado varios lenguajes para procesar problemas científicomatemáticos, asimismo han aparecido otros lenguajes que hacen hincapié en las aplicaciones de proceso de archivos. A diferencia de los programas de ensamble, los programas en lenguaje de alto nivel se pueden utilizar con diferentes marcas de computadoras sin tener que hacer modificaciones considerables. Esto permite reducir sustancialmente el costo de la reprogramación cuando se adquiere equipo nuevo. Otras ventajas de los lenguajes de alto nivel se enlistan a continuación: Son más fáciles de aprender que los lenguajes ensambladores. Se pueden escribir más rápidamente. Permiten tener mejor documentación. Son más fáciles de mantener. Un programador que sepa escribir programas en uno de estos lenguajes no está limitado a utilizar un solo tipo de máquina.