El código fuente de un programa informático (o software) es un conjunto de líneas de
texto con los pasos que debe seguir la computadora para ejecutar un cargador.1
El código fuente de un programa está escrito por un programador en algún lenguaje de
programación legible por humanos, normalmente en forma de texto plano.2 Sin embargo, el
programa escrito en un lenguaje legible por humanos no es directamente ejecutable por la
computadora en su primer estado, sino que debe ser traducido a otro lenguaje o código
binario; así será más fácil para la máquina interpretarlo (lenguaje máquina o código objeto que
sí pueda ser ejecutado por el hardware de la computadora). Para esta traducción se usan los
llamados compiladores, ensambladores, intérpretes y otros sistemas de traducción.
El término código fuente también se usa para hacer referencia al código fuente de otros
elementos del software, como, por ejemplo, el código fuente de una página web, que está
escrito en lenguaje de marcado HTML o en Javascript, u otros lenguajes de programación
web, y que es posteriormente ejecutado por el navegador web para visualizar dicha página
cuando es visitada.
El área de la informática que se dedica a la creación de programas, y por tanto a la creación
de su código fuente, es la ingeniería de software.
Un lenguaje de programación es un lenguaje formal (o artificial, es decir, un lenguaje con
reglas gramaticales bien definidas) que proporciona a una persona, en este caso el
programador, la capacidad y habilidad de escribir (o programar) una serie de instrucciones o
secuencias de órdenes en forma de algoritmos con el fin de controlar el comportamiento físico
o lógico de un sistema informático, para que de esa manera se puedan obtener diversas
clases de datos o ejecutar determinadas tareas. A todo este conjunto de órdenes escritas
mediante un lenguaje de programación se le denomina programa informático.1234
Características[editar]
Programar viene a ser el proceso de crear un software fiable mediante la
escritura, prueba, depuración, compilación o interpretación, y mantenimiento del código
fuente de dicho programa informático. Básicamente, este proceso se define aplicando
lógicamente 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).
Compilación o interpretación del programa hasta convertirlo en lenguaje de máquina.
Prueba y depuración del programa.
Desarrollo de la documentación.
Los lenguajes de programación están formados por un conjunto de símbolos
(llamado alfabeto), reglas gramaticales (léxico/morfológicas y sintácticas) y semánticas, que
en conjunto definen las estructuras válidas del lenguaje y su significado. Existe el error común
de tratar como sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los
lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por
ejemplo HTML (lenguaje para el marcado de páginas web, que no es propiamente un lenguaje
de programación, sino un conjunto de instrucciones que permiten estructurar el contenido de
los documentos).
El lenguaje de programación permite especificar de manera precisa sobre qué datos debe
operar un software específico, cómo deben ser almacenados o transmitidos dichos datos, y
qué acciones debe tomar el software bajo una variada gama de circunstancias. Todo esto, a
través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural.
Una característica relevante de los lenguajes de programación es precisamente que más de
un programador pueda usar un conjunto común de instrucciones que sean comprendidas
entre ellos para realizar la construcción de un programa de forma colaborativa.
Historia[editar]
Artículo principal: Historia de los lenguajes de programación
Código Fortran en una tarjeta perforada,
mostrando el uso especializado de las columnas 1-5, 6 y 73-80
Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico
conocido como código máquina, que la máquina lee fácilmente, pero que es excesivamente
complicado para las personas. De hecho, solo consiste en cadenas extensas de números 0 y
1(números binarios).
Para facilitar el trabajo, los primeros operadores de computadoras decidieron crear un
traductor para reemplazar los 0 y 1 por palabras o abstracción de palabras y letras
provenientes del inglés; este 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 semejante a la de los lenguajes escritos por los humanos, denominados
también lenguajes de alto nivel.5
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 John 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.6
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 la actualidad, 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.
Clasificación de los lenguajes de programación[editar]
Los lenguajes de programación han sido históricamente clasificados atendiendo a distintos
criterios:
Clasificación histórica
A medida que surgían nuevos lenguajes que permitían nuevos estilos de programación
más expresiva, se distinguieron dichos estilos en una serie de generaciones, cada
una representando lenguajes de programación surgidos en una época similar y con
características genéricas comunes.
Lenguajes de alto y de bajo nivel
Los lenguajes de programación se suelen clasificar dentro de dos amplias categorías
que se refieren a su "nivel de abstracción", es decir, en cuanto a lo específico o
general que es respecto a la arquitectura de computación inherente al sistema que se
está utilizando.
Clasificación por paradigmas
Los paradigmas de programación distinguen distintos modelos de cómputo y de estilos
de estructurar y organizar las tareas que debe realizar un programa. Un lenguaje de
programación puede ofrecer soporte a uno o varios paradigmas de programación, total
o parcialmente.
Clasificación por propósito
Se distinguen los lenguajes de programación de propósito general de aquellos
de propósito específico.
En algunas ocasiones los lenguajes de programación son también
clasificados en familias que comparten ciertas características comunes como
el estilo general de la sintaxis que emplean. Habitualmente estas
características suelen ser heredadas de lenguajes de programación
anteriores que sirvieron de inspiración a los creadores de dicho lenguaje.
Clasificación histórica o por generaciones[editar]
Los equipos de ordenador (el hardware) han pasado por cuatro generaciones,
de las que las tres primeras (ordenadores con válvulas, transistores y circuitos
integrados) están muy claras; la cuarta (circuitos integrados a gran escala) es
más discutible.
Algo parecido ha ocurrido con la programación de los ordenadores
(el software), que se realiza en lenguajes que suelen clasificarse en cinco
generaciones, de las que las tres primeras son evidentes, mientras no todo el
mundo está de acuerdo en las otras dos. Estas generaciones no coincidieron
exactamente en el tiempo con las de hardware, pero sí de forma aproximada,
y son las siguientes:
Primera generación: los primeros ordenadores se programaban
directamente en código de máquina (basado en sistema binario), que
puede representarse mediante secuencias de 0 y 1. No obstante, cada
modelo de ordenador tiene su propia estructura interna a la hora de
programarse. A estos lenguajes se les denominaba Lenguajes de bajo
nivel, porque sus instrucciones ejercen un control directo sobre el
hardware y están condicionados por la estructura física de las
computadoras que lo soportan. Dado que este tipo de lenguaje se acerca
mucho más a la lógica de la máquina que a la humana, es mucho más
complicado programar con él. El uso de la palabra bajo en su
denominación no implica que el lenguaje sea menos potente que
un lenguaje de alto nivel, sino que se refiere a la
reducida abstracción entre el lenguaje y el hardware. Por ejemplo, se
utiliza este tipo de lenguajes para programar tareas críticas de
los sistemas operativos, de aplicaciones en tiempo real o controladores
de dispositivos. Otra limitación de estos lenguajes es que se requiere de
ciertos conocimientos de programación para realizar las secuencias de
instrucciones lógicas.
Segunda generación: los lenguajes simbólicos, asimismo propios de la
máquina, simplifican la escritura de las instrucciones y las hacen más
legibles. Se refiere al lenguaje ensamblador ensamblado a través de un
macroensamblador. Es el lenguaje de máquina combinado con una serie
de poderosas macros que permiten declarar estructuras de datos y de
control complejas.
Tercera generación: los lenguajes de alto nivel sustituyen las
instrucciones simbólicas por códigos independientes de la máquina,
parecidas al lenguaje humano o al de las Matemáticas. 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. Son usados en ámbitos
computacionales donde se logra un alto rendimiento con respecto a
lenguajes de generaciones anteriores. Entre ellos se
encuentran C, Fortran, Smalltalk, Ada, C++, C#, Cobol, Delphi, Java y PH
P, entre otros. Algunos de estos lenguajes pueden ser de propósito
general, es decir, que el lenguaje no está enfocado a una única
especialidad, sino que puede usarse para crear todo tipo de programas.
Para ciertas tareas más comunes, existen bibliotecas para facilitar la
programación que permiten la reutilización de código.
Cuarta generación: se ha dado este nombre a ciertas herramientas que
permiten construir aplicaciones sencillas combinando piezas
prefabricadas. Hoy se piensa que estas herramientas no son,
propiamente hablando, lenguajes. Cabe mencionar que, algunos
proponen reservar el nombre de cuarta generación para la programación
orientada a objetos. Estos últimos tienen una estructura muy parecida al
idioma inglés. Algunas de sus características son: acceso a base de
datos, capacidades gráficas, generación de código automáticamente, así
como poder programar visualmente (como por ejemplo Visual
Basic o SQL). Entre sus ventajas se cuenta una mayor productividad y
menor agotamiento del programador, así como menor concentración por
su parte, ya que las herramientas proporcionadas incluyen secuencias de
instrucciones. El nivel de concentración que se requiere es menor, ya que
algunas instrucciones, que le son dadas a las herramientas, a su vez,
engloban secuencias de instrucciones a otro nivel dentro de la
herramienta. Cuando hay que dar mantenimiento a los programas
previamente elaborados, es menos complicado por requerir menor nivel
de concentración. Por otro lado, sus desventajas consisten en que estas
herramientas prefabricadas son generalmente menos flexibles que las
instrucciones directas en los lenguajes de bajo nivel. Además, se suelen
crear dependencias con uno o varios proveedores externos, lo que se
traduce en pérdida de autonomía. Asimismo, es frecuente que dichas
herramientas prefabricadas contengan librerías de otros proveedores, que
conlleva instalar opciones adicionales que son consideradas opcionales.
A menos que existan acuerdos con otros proveedores, son programas
que se ejecutan únicamente con el lenguaje que lo creó. Tampoco suelen
cumplir con los estándares internacionales ISO y ANSI, lo cual conlleva
un riesgo futuro por desconocerse su tiempo de permanencia en el
mercado. Algunos ejemplos son: NATURAL y PL/SQL.
Quinta generación: La quinta generación de lenguajes de programación
[(5GL)] es un término que se refiere a un conjunto de lenguajes de
programación de alto nivel que se centran en la resolución de problemas
utilizando inteligencia artificial y técnicas de programación declarativa.
Estos lenguajes de programación utilizan paradigmas de programación no
convencionales para ayudar a los desarrolladores a resolver problemas
complejos.
Algunos ejemplos de lenguajes de programación de quinta generación son:
Mercury: Un lenguaje de programación funcional basado en lógica que
utiliza un enfoque declarativo para la programación.
OPS5: Un lenguaje de programación basado en reglas que se utiliza en
sistemas expertos.
Prolog: Un lenguaje de programación lógico que se utiliza para la
programación de inteligencia artificial y sistemas expertos.
Haskell: Un lenguaje de programación funcional que se utiliza en la
programación de inteligencia artificial y aprendizaje automático.
Lisp: Un lenguaje de programación funcional que se utiliza en la
programación de inteligencia artificial y sistemas expertos.