Autores: Antonio Hernández Mendo, Raúl Ramos Pollán

Introducción
La informática ha supuesto una revolución técnica y conceptual que ha impactado en prácticamente todas las áreas de conocimiento. Consideramos que es una revolución técnica en cuanto que ha afectado la implementación y el análisis de las tareas más diversas. De la misma manera, consideramos que es una revolución conceptual porque ha provocado -con la generación de sistemas expertos, algoritmos genéticos, etc.- la desaparición y reducción de incertidumbre de las teorías y modelos conceptuales de las disciplinas donde se ha implantado.
Evidentemente estas implicaciones son pertinentes en las ciencias de la actividad física y el deporte, en todas y cada una de sus áreas de conocimiento e investigación.
Este trabajo pretende simplemente dotar al lector de unos criterios mínimos en algunas de las tecnologías usadas actualmente en el tratamiento de problemas científicos. Para cada paradigma aquí presentado damos unos conceptos generales sobre el mismo y unos principios básicos de funcionamiento. Con esto esperamos ofrecer criterios acerca del tipo de aspectos que se pueden abordar con cada uno de ellos, así como el coste y conocimiento que esto supone. Se recomienda acudir a las referencias para más detalles sobre el funcionamiento y
conveniencia de cada paradigma.
2. Ordenadores, programas y lenguajes Un ordenador es una máquina de propósito general que almacena, procesa y transmite información, según se le especifica. Al contrario que cualquier otra máquina que podamos encontrar en nuestro entorno (una televisión, un coche, una radio, etc.), un ordenador no está diseñado a priori para realizar ninguna tarea en particular. Para que un ordenador realice cualquier tarea es necesario especificársela y ordenarle que la ejecute. La especificación de la tarea determina la funcionalidad que se obtiene cuando el ordenador la ejecuta. Las tareas se especifican por medio de programas, por tanto un ordenador es una máquina que ejecuta programas para obtener una cierta funcionalidad. Por ejemplo, un procesador de texto es un
programa que, al ejecutarlo, dirige al ordenador sobre cómo debe de obtener información del teclado, cómo mostrarla en pantalla dándole forma de documento, cómo mandarlo a impresora, como almacenarla y recuperarla del disco, etc.

Un programa es una lista de instrucciones que un ordenador debe seguir para procesar datos y convertirlos en información (esto es, para realizar una tarea). Los datos pueden venir de muchas fuentes (el teclado, el disco duro, la red, etc.) y pueden ser transformados en distintos tipos de información (un documento, una base de datos, una página Web, etc.). El tipo de datos y de información, así como la naturaleza de esa transformación determinan la funcionalidad final de un programa (procesador de texto, gestor de bases de datos, navegador de la Web, etc.).
Las instrucciones de las que consta un programa se describen en un lenguaje de programación determinado.
Un ordenador desnudo (en el que no se ha introducido ningún programa) sólo entiende un lenguaje de programación que se llama código máquina. Cada tipo de ordenador tiene un código máquina distinto. Este lenguaje es complicado y sus instrucciones son muy crípticas (por ejemplo, 0011010101011010111 puede ser la instrucción para escribir un caracter en el disco duro) con lo que desarrollar programas es este lenguaje es una tarea difícil.
Afortunadamente, se han desarrollado programas llamados compiladores, que entienden instrucciones más cercanas al lenguaje humano (por ejemplo, write (‘A’, hd) sería la instrucción para escribir el caracter ‘A’ en el disco duro). En este sentido, existen muchos lenguajes. En general a estos lenguajes se les denomina lenguajes de alto nivel. Un traductor se encarga de traducir programas e instrucciones en algún lenguaje de alto nivel (entendibles por el programador) en instrucciones en código máquina (entendibles por el ordenador).
Normalmente para poder realizar un programa de ordenador, el programador debe de conocer el lenguaje de alto nivel adecuado y debe saber manejar el traductor correspondiente.
Los lenguajes de programación han evolucionado a lo largo de la historia de los ordenadores.
Los primeros ordenadores que existieron fueron máquinas muy complejas para su época, que se programaban únicamente en código máquina y muy poca gente sabía como realizar programas para ellos. Según la tecnología de los ordenadores evolucionó también evolucionaron las técnicas de traducción y surgieron otros lenguajes, haciendo la tarea de programar más asequible. Los lenguajes de programación han evolucionado en lo que se denomina generaciones de lenguajes. Existen cinco generaciones en las que se clasifican los lenguajes de programación utilizados. Las primeras generaciones contienen lenguajes próximos al código máquina. Las últimas contienen lenguajes próximos al lenguaje natural (humano):
 Primera Generación, Código Máquina: Es el nivel más bajo de los lenguajes de programación y está compuesta por los códigos máquina aceptados por los ordenadores.
Como cada ordenador tiene un código máquina distinto, los programas escritos en código máquina sólo funcionan en el ordenador específico para el cual están escritos.
 Segunda Generación, Lenguaje Ensamblador: Son lenguajes de programación de bajo nivel que permiten usar abreviaciones o mnemónicos para las instrucciones de código máquina. Aunque así es más fácil realizar programas que en código máquina directamente aún es una tarea complicada. Ya que un ordenador sólo entiende código máquina se necesita un traductor simple para convertir el lenguaje ensamblador en código máquina.
 Tercera Generación, Lenguajes de Alto Nivel: Es un lenguaje con construcciones similares al lenguaje natural (típicamente al inglés) que permite crear programas (aplicaciones) complejas y relativamente sencillas de mantener y modificar. Un programa en un lenguaje de alto nivel no es entendible directamente por el ordenador. Un compilador es un programa traductor que acepta un programa en un lenguaje de alto nivel (típicamente en uno o varios archivos de disco) y produce el código máquina entendible por un ordenador específico en otro archivo de disco. Posteriormente el ordenador ya es capaz de ejecutar el archivo producido por el proceso de compilación tantas veces como se quiera. Un intérprete es un programa que acepta un programa en un lenguaje de alto nivel, lo compila y lo ejecuta inmediatamente sin generar un archivo con el programa en código máquina. Posteriores ejecuciones del programa requieren que todo el proceso se repita. Los compiladores e intérpretes son más complejos que los traductores simples ya que una instrucción de un lenguaje de alto nivel suele generar varias (a veces cientos) de instrucciones de código máquina. Los lenguajes de tercera generación son los más usados actualmente y se les denomina en muchos entornos lenguajes procedimentales, ya que se suelen agrupar conjuntos de instrucciones en procedimientos o funciones.
Cuarta Generación, Lenguajes de Muy Alto Nivel: también denominados 4GL (4thGeneration Languages). Los lenguajes 4GL son mucho más orientados al usuario que los lenguajes de generaciones anteriores, y los programas se desarrollan especificando instrucciones muy próximas al lenguaje humano. Típicamente los lenguajes 4GL también se denominan lenguajes no procedimentales, ya que los programadores simplemente especifican qué es lo que quieren que el ordenador realice y no cómo. Estos lenguajes se utilizan en ámbitos altamente especializados o de investigación.
 Quinta Generación, Lenguajes Naturales: Existen lenguajes naturales de dos tipos.
Por un lado están los lenguajes humanos: el español, inglés, etc. Por otro lado están los lenguajes de programación de quinta generación que usan un lenguaje humano para ofrecer una relación con el ordenador más intuitiva. Los lenguajes naturales de quinta generación están todavía en su infancia, y actualmente puede considerarse que están más cerca de los lenguajes 4GL que de los lenguajes humanos.
Como se puede observar, los compiladores (intérpretes, traductores) son una pieza fundamental para el trabajo del programador, ya que son los que permiten obtener código máquina directamente ejecutable de un programa escrito en un lenguaje de más alto nivel. Las tecnologías de compilación constituyen una parte muy importante de la evolución de los lenguajes de programación. Según los lenguajes pertenecen a generaciones más avanzadas, se
requieren compilados más complejos.
Un aspecto muy importante de los compiladores es la idea de portabilidad, que permite producir programas para distintos tipos de ordenadores a partir de un mismo programa en algún lenguaje de alto nivel. Por ejemplo, si tenemos un programa en el lenguaje C, y utilizamos el compilador de C para PC, entonces podremos generar el programa en código máquina para PC con Windows y por tanto ejecutar el programa en un PC. Si, con el mismo programa en C, utilizamos el compilador para un ordenador UNIX de HP entonces obtendremos un ejecutable para esa máquina. Para que esto sea posible es necesario que nuestros programas no utilicen funciones particulares a ninguna máquina. En muchas ocasiones es imposible evitar usar este tipo de funciones.
2.1. Paradigmas de Programación
Un paradigma es un conjunto de principios generales que un programador ha de seguir para
desarrollar un programa. Cada lenguaje de programación permite al programador seguir un
paradigma determinado, por tanto los lenguajes de programación se pueden también clasificar
según el paradigma que siguen. Los paradigmas de programación definen cómo se organizan
los diferentes elementos de un programa, como esos elementos interactúan entre ellos, etc.
Actualmente, los paradigmas de programación más comúnmente usados son los siguientes:
1. Programación Estructurada: Postula el principio de división de un programa en
unidades algorítmicas más pequeñas llamadas funciones o procedimientos. Una vez
definidos, el programador puede invocar a un procedimiento desde otro. Típicamente un
programa estructurado se realiza diseñando primeramente un conjunto de estructuras de
datos, y posteriormente un conjunto de algoritmos (procedimientos) que actúan sobre
esas estructuras de datos. Por ejemplo, si queremos desarrollar un programa para
calcular la media de diversos conjuntos de variables, el programador desarrolla un
procedimiento al que llama media donde implementa el algoritmo mediante el cual se
calcula la media para cualquier conjunto de variables. Posteriormente invoca a ese
procedimiento por cada conjunto de variables de los cuales quiera calcular la media.
Algunos lenguajes que siguen el paradigma de la programación estructurada son el C,
Pascal, Basic, Fortran, Cobol, etc.
2. Programación Orientada a Objeto: Aunque la programación estructurada es un
paradigma que se ha usado durante mucho tiempo y aún se usa en la actualidad, existe
un límite en la complejidad de los programas que se pueden realizar manteniendo los
costes de mantenimiento y modificación de los programas razonablemente bajos. Es
otras palabras, modificar un programa complejo en Pascal o COBOL puede ser una tarea
altamente costosa en términos de tiempo. Para sobrepasar estos problemas se creó el paradigma de la programación orientada a objetos, que postula la división de un
programa en unidades autocontenidas llamadas objetos. A diferencia de los
procedimientos que contienen sólo algoritmos y los datos sobre los que actúan están
aparte, un objeto contiene un conjunto de algoritmos junto con los datos sobre los que
actúan. De esta manera cuando un programador invoca algoritmos en un objeto, no
necesita saber qué tipo de datos el objeto maneja de forma interna. Además los objetos
pueden ser organizados en jerarquías, de forma unos objetos pueden heredar datos y
algoritmos de otros objetos. Con esto lo que se consigue es que la organización de un
programa orientado a objetos sea más modular y rica que la organización de un
programa estructurado, con lo que la arquitectura de los programas complejos puede ser
acomodada a cambios más fácilmente.
2.2. Principales Lenguajes de Programación
Como mencionamos, actualmente la mayoría de los programas realizados actualmente son
implementados usando lenguajes de programación de tercera generación. La utilidad y
utilización de estos lenguajes no depende sólo de su diseño sino también del tipo de
aplicaciones que se pueden crear con ellos, las herramientas disponibles (librerías, herramientas
de programación, etc.) Actualmente los lenguajes más utilizados son el C y Java, por distintas
razones. La siguiente lista también contiene lenguajes que fueron utilizados muy extensamente
en el pasado y que aún se siguen utilizando por motivos educaciones, o bien porque las
aplicaciones creadas con ellos aún están en funcionamiento. Diferentes lenguajes están
orientados para diferentes entornos y finalidades, aunque cualquiera de ellos es lo
suficientemente general para ser utilizado en un amplio espectro de aplicaciones.
1. C: Desarrollado por los Laboratorios Bell, C es un lenguaje estructurado compilado de
propósito general que funciona en una gran variedad de computadores y por tanto es
portable entre ellos. Es decir, existen compiladores de C para casi todos los tipos de
maquinas existentes en la actualidad. El lenguaje C es muy adecuado para escribir
multitud de tipos de programas: gestores de bases de datos, procesadores de texto,
software comercial, juegos, robótica, gráficos, etc. y de hecho la mayoría del software
disponible actualmente está realizado en C. Sus ventajas principales son: