Informática Breve introducción e historia de la Informática, Paradigmas y Lenguajes de Programación...

Comparte esta página:

Introducción a la Informática, lenguajes de programación, orderadores y software.

Introducción e Historia

La informática ha supuesto una revolución técnica y conceptual que ha impactado en prácticamente todas las áreas del conocimiento. Se le considera revolución técnica pues ha afectado la implementación y el análisis de las tareas más diversas. De igual forma, 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.

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):
  1. Primera Generación, Código Máquina: Es el nivel más bajo de los lenguajes de programación y está compuesto por los códigos máquina (binario, hexadecimal, etc.) aceptados por los ordenadores. Como cada ordenador tiene un código máquina distinto, los programas escritos en código máquina generalmente funcionan sólo en el ordenador específico para el cual están escritos.
  2. 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 (intérprete de comandos). Aunque es más fácil programar en lenguaje ensamblador que en código máquina, sigue siendo una tarea complicada. Ya que un ordenador sólo entiende código máquina, se requiere un traductor simple (intérprete) para convertir el lenguaje ensamblador en código máquina.
  3. 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.
  4. Cuarta Generación, Lenguajes de Muy Alto Nivel: también denominados 4GL (4th Generation 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.
  5. 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.

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.

Principales Lenguajes de Programación

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. Lenguaje 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:
    • Los compiladores de C han sido altamente probados y desarrollados para casi todos los tipos de ordenadores.
    • Tiene un alto grado de portabilidad. Los programas en C pueden ser compilados en una gran variedad de ordenadores haciendo muy pocos cambios.
    • Es muy rápido y eficiente.
    • Los compiladores de C suelen estar muy bien optimizados y producen código máquina muy rápido.

    Por otro lado, C no es muy fácil de aprender y no suele ser el primer lenguaje que se enseña a quien entra en el mundo de la programación. Además, es muy conciso, lo que a veces dificulta seguir y entender los programas hechos por otros.

  2. BASIC:

    Es un lenguaje simple que fue diseñado con motivos educacionales más que prácticos. Es muy sencillo e intuitivo y algunas extensiones actuales son muy populares y utilizadas (por ejemplo, Visual Basic de Microsoft).

  3. Pascal:

    Al igual que el BASIC es un lenguaje estructurado sencillo pero permite la creación de programas relativamente complejos ya que contiene (sin necesidad de ampliaciones) las estructuras básicas para organizar el código.

  4. FORTRAN:

    Desarrollado en 1954 por IBM, fue prácticamente el primer lenguaje estructurado de alto nivel. Originalmente fue diseñado para implementar fórmulas y cálculos matemáticos complejos y actualmente aún está en uso en entornos científicos, matemáticos o de ingenierías.

  5. COBOL:

    Adoptado formalmente en 1960 como resultado de un esfuerzo conjunto de diferentes organizaciones públicas y privadas, ha sido el lenguaje estructurado más usado en aplicaciones comerciales hasta la aparición de los ordenadores personales. Actualmente, aún hay una gran cantidad de aplicaciones programadas en COBOL.

  6. LISP:

    Es un lenguaje usado principalmente para realizar programas en el ámbito de la inteligencia artificial. Fue desarrollado en 1958 en el MIT y suele ser usado en la implementación de sistemas expertos.

  7. DBASE:

    Es un lenguaje similar al Pascal, pero con funciones para manipular directamente las bases de datos creadas con el sistema de base de datos conocido como DBASE.

  8. Java: (que es distinto a JavaScript aunque JavaScript es muy parecido a Java)

    Es un lenguaje de programación orientado a objetos creado por Sun Microsystems. Su estructura es parecida a la del C pero evitando sus desventajas. Es relativamente sencillo de aprender y además es un lenguaje que puede ser interpretado por los navegadores de Internet, con lo que un programador puede publicar su programa en un URL convenido y cualquier usuario de Internet puede ejecutarlo en su ordenador a través del navegador.

  9. Lenguaje C++:

    Es la evolución del C en un lenguaje orientado a objetos. Comparte las ventajas y desventajas del C, pero sigue los principios de la programación orientada a objetos. 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 dar a conocer distintos 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.

  10. Lenguaje PHP:

    PHP Hypertext Preprocessor es un lenguaje de programación interpretado creado en 1994 por Rasmus Lerdorf y desarrollado actualmente por The PHP Group. PHP está orientado principalmente al desarrollo de aplicaciones web (puede ser incrustado dentro de código HTML) y sirve como intérprete del lado del servidor (server-side scripting). PHP tambien puede ser utilizado desde la consola de línea de comandos, y, en la creación de otro tipo de programas incluyendo aplicaciones con interfaz gráfica usando las bibliotecas Qt o GTK+.
    El gran parecido que tiene PHP con otros lenguajes de programación estructurada, como C y Perl, permite a los desarrolladores crear aplicaciones complejas con una curva de aprendizaje muy corta e involucrarse con aplicaciones de contenido dinámico sin la nececidad de aprender todo un nuevo grupo de funciones.

Algunas Tecnologías Adicionales

En principio, con un lenguaje de programación de propósito general (como C o Java) y su correspondiente compilador o intérprete un programador puede desarrollar cualquier tipo de aplicación. No obstante, aplicaciones de un mismo tipo suelen tener las mismas necesidades, restricciones y requerimientos. Por ejemplo, cualquier aplicación gráfica abrirá ventanas, construirá botones, cuadros de texto, gráficos, etc. con lo que es deseable extender el lenguaje utilizado con procedimientos u objetos primitivos que permiten realizar esas funciones, evitando que el programador las programe cada vez que se crea una aplicación gráfica. De esta manera existen extensiones y aplicaciones que sistematizan la creación de programas y sistemas en general para determinados dominios. En cierta manera, estas aplicaciones aíslan al usuario final de los detalles de la implementación de los mismos. A continuación se exponen algunas de estas tecnologías:

Sistemas Expertos

¿Qué es un Sistema Experto?

Un sistema experto es un programa de ordenador que le permite a éste realizar o aconsejar acerca de la toma de decisiones no estructuradas o semiestructuradas que son propias de humanos con conocimientos y experiencia en un dominio específico. Los sistemas expertos operan normalmente como consultores expertos que ofrecen su consejo a humanos en áreas específicas. Algunos ejemplos de decisiones basadas en los sistemas expertos son los diagnósticos de enfermedades bacteriológicas en pacientes, detección de fallos en el funcionamiento eléctrico en locomotoras diesel, configuraciones de sistemas y redes de ordenadores basados en las estimaciones de trabajo y necesidades de los usuarios, etc.. Como podemos observar los sistemas expertos explotan el conocimiento específico acerca de un dominio para realizar inferencias complejas que ayudan al humano en el análisis y proceso de una situación concreta.

Arquitectura de un Sistema Experto

La arquitectura de un sistema experto evoca en cierta manera las estructuras y procesos cognitivos en el comportamiento humano. El primer componente de un experto humano es una memoria a largo plazo de hechos, estructuras y reglas que representan el conocimiento del experto en un dominio concreto. La estructura análoga en un sistema experto se denomina base de conocimiento. Luego, un experto humano, posee unos métodos de razonamientos apropiados a su dominio de forma que puede extraer de su conocimiento la información adecuada para aplicarla en la resolución de un problema dado.