Un modelo computacional es un modelo matemático en las
ciencias de la computación que requiere extensos recursos computacionales para
estudiar el comportamiento de un sistema complejo por medio de la simulación
por computadora. El sistema bajo estudio es a menudo un sistema complejo no
lineal para el cual las soluciones analíticas simples e intuitivas no están
fácilmente disponibles. En lugar de derivar una solución analítica matemática
para el problema, la experimentación es hecha con el modelo cambiando los
parámetros del sistema en la computadora, y se estudian las diferencias en el
resultado de los experimentos.
Las teorías de la operación del modelo se pueden
derivar/deducir de estos experimentos de computacionales.
Ejemplos de modelos de computacionales comunes son: modelos de el pronóstico del tiempo, modelos del Earth Simulator, modelos de
simulador de vuelo, modelos de plegamiento molecular de proteínas, y modelos de
red neuronal.
Se considera a los algoritmos al conjunto de pasos
ordenados, que permiten resolver un problema bajo una secuencia lógica, es
decir, que tenga inicio y fin (sentido concreto).
Programas: Algoritmos para ser ejecutados por un ordenador.
Un ordenador o computadora está, desde que se enciende
hasta que se apaga totalmente, ejecutando un algoritmo. Por lo general, estos
algoritmos, escritos para que los entienda una máquina, terminan siendo vagos y
confusos para la mayoría de quienes no han estudiado programación. Una máquina
no puede entender "escribe Hola Mundo!" porque no sabe lo que es
"escribe" ni lo que es una letra o un espacio, ni lo que es una
pantalla. En cambio, puede entender "MOV EAX, 0x23afb31" (escribir en
el registro EAX el número 0x23afb31), aunque nosotros no. Un ordenador es solo
un circuito electrónico, no funciona a base de magia ni nada por el estilo.
Debido a lo difícil que es escribir en lenguaje máquina,
e incluso en ensamblador, se crearon diferentes lenguajes de programación, más
o menos parecidos al inglés actual y a cómo se redacta un algoritmo. Estos
lenguajes proveen de cosas tan complejas para una máquina como los bucles for.
Los compiladores se encargan de traducir esos ficheros al lenguaje ensamblador
que corresponda, el ensamblador de traducirlos a lenguaje máquina y el
enlazador de juntar todo ese código máquina en un solo archivo, el programa. Y
el microprocesador, se encarga de ir encendiendo o apagando transistores según
lo que le diga el código máquina. Es fácil entender el lenguaje de alto nivel
en comparación al lenguaje maquina pero de la evolución surgieron.
¿Qué instrucciones
ejecuta un ordenador?
Lenguaje de máquina
Cada tipo de microprocesador contiene un conjunto de instrucciones que realizan ciertas operaciones sobre una o más palabras de bits; las instrucciones van también codificadas en bits. No queremos hacer aquí una discusión sobre arquitectura de ordenadores, por lo que con esto debe valer por ahora.
Cada tipo de microprocesador contiene un conjunto de instrucciones que realizan ciertas operaciones sobre una o más palabras de bits; las instrucciones van también codificadas en bits. No queremos hacer aquí una discusión sobre arquitectura de ordenadores, por lo que con esto debe valer por ahora.
Se entiende que escribir sólo con dos teclas, el 0 y el
1, es incómodo. Históricamente, a la hora de diseñar un algoritmo para que el
ordenador ejecutara, se escribía mediante unas etiquetas nemotécnicas; éste fue
el origen del lenguaje ensamblador.
Por ejemplo quizás en una cierta arquitectura la instrucción de borrado de memoria (Memory Clear, en inglés) corresponda al código 010. Pronto surgieron programas que leían, siguiendo el ejemplo, MC, y lo sustituían por 010.
Por ejemplo quizás en una cierta arquitectura la instrucción de borrado de memoria (Memory Clear, en inglés) corresponda al código 010. Pronto surgieron programas que leían, siguiendo el ejemplo, MC, y lo sustituían por 010.
Lenguaje ensamblador
El código máquina tenía dos grandes inconvenientes para
los programadores:
Las instrucciones eran difíciles de recordar, ya que no
guardaban relación con la operación que se está realizando.
Puede haber, y de hecho hay, diferencias entre las
instrucciones de un procesador a otro.
Todo esto ha llevado a poner nombre a las instrucciones de código máquina de manera que a una secuencia concreta de bits que realiza una operación se le pone un nombre sencillo que identifique la operación. Esta traducción a un lenguaje más sencillo para las personas resulta en una mayor comodidad para el programador, además el proceso de traducción inverso de lenguaje ensamblador a código máquina puede ser realizado por un sencillo programa.
Todo esto ha llevado a poner nombre a las instrucciones de código máquina de manera que a una secuencia concreta de bits que realiza una operación se le pone un nombre sencillo que identifique la operación. Esta traducción a un lenguaje más sencillo para las personas resulta en una mayor comodidad para el programador, además el proceso de traducción inverso de lenguaje ensamblador a código máquina puede ser realizado por un sencillo programa.
Programación para seres
humanos
Lenguajes de alto nivel
Sobre este lenguaje ensamblador inicial se fueron
construyendo otros lenguajes de programación de más alto nivel; esto significa
que ocultan ciertos aspectos de manera que el programador no se ha de preocupar
sobre si en la máquina que quiere que se ejecute el algoritmo el MC corresponde
a la instrucción 101 o 010. Se produce, por tanto, una abstracción de datos,
muy deseable para poder utilizar el trabajo de otros para avanzar un paso más
en vez de tener que "reinventar la rueda", como se suele decir. Estos
textos en los que se codifican los algoritmos son los códigos fuente; siguen
las reglas sintácticas de un determinado lenguaje de programación. Existen
numerosos lenguajes de programación, y se utiliza uno u otro según sus
características se adecuen más o menos a la resolución de nuestro problema
.
Traductores e
intérpretes
Tras la escritura del algoritmo, un compilador o un
intérprete (otros programas) transformarán el texto en código máquina que el
procesador es capaz de ejecutar.
Toda esta abstracción permite resolver problemas alejados
de sumar números binarios, como pueden ser la consulta de esta misma
enciclopedia o jugar a un videojuego en 3D.
Lenguajes interpretados vs. Lenguajes compilados
Los lenguajes interpretados son como respuesta a la
dificultad de manejo de los compilados. Un lenguaje compilado es sólo apto para
un sistema operativo o formato de ejecutable (en GNU/Linux y Unix System V es
ELF, en Windows o incluso en BSD es muy diferente), y es tedioso de manejar:
para comprobar bugs o errores el computador debe:
- Compilar cada uno de los ficheros de código.
- Ensamblarlos en ficheros objeto.
- Enlazar los ficheros objeto.
- Volverlos a ensamblar.
Todo eso no es gran derroche de recursos para un
ordenador medio actualmente, pero dura sus 10 o 15 segundos. En cambio, con un
lenguaje interpretado, el programa intérprete analiza el fichero de código y lo
va ejecutando en tiempo real, sin compilarlo ni ensamblarlo. Otra de las
ventajas de los lenguajes interpretados es que son multiplataforma: un programa
en Perl, por ejemplo, no debe ser compilado dos veces (una para Unix y otra
para Windows). Con que haya diferentes versiones del intérprete en cada uno de
esos ordenadores, específicamente compilados para ellos.
Sus desventajas:
- Consume muchos recursos de memoria, sobre todo RAM.
- Se depende del intérprete: si no tienes instalado el intérprete que corresponda, no podrás ejecutar el programa.
Ejemplos de lenguajes interpretados son: PHP, Perl,
Python, Tcl/Tk, BASIC, LISP, entre otros.