Ya vimos en la parte 1 las características generales del hardware de un ordenador. Ahora uniremos algunos conceptos software y relativos a los programas, para poder pasar a uno de los ejemplos tutorizados que son el objetivo de esta serie de entradas.
Un breve repaso por las etapas de la construcción de un programa simple, desde su implementación en un lenguaje de alto nivel hasta la ejecución de las instrucciones que componen el programa por parte del procesador. Comencemos pues.
¿Qué es un programa?
Un programa no es más que un conjunto de instrucciones que es capaz de entender y ejecutar un ordenador y que resuelven un problema concreto. Ya vimos que los ordenadores son capaces de entender un lenguaje particular basado en cadenas de unos y ceros a las que se les da una determinada interpretación según su disposición o su contexto.
Para un ser humano, a la hora de escribir un programa se le antoja excesivamente difícil escribir un programa mediante unos y ceros.Además, aunque fueramos capaces, al escribir un programa de esta forma, lo haríamos para un hardware en concreto (ya que el tamaño de las instrucciones, registros, direcciones de memoria, etc, dependen de la configuración de procesador y memoria que lleve el equipo).
Es recomendable que el software que escribimos sea lo más versátil posible y funcione en una plataforma de manera genérica. Por ejemplo, cuando escribimos un programa para Windows, este programa debe funcionar en cualquier equipo que sea capaz de tener dicho sistema operativo instalado independientemente del hardware que posea (el sistema operativo crea una capa de abstracción con respecto al hardware).
Para ello existen lenguajes de programación a distintos niveles. De manera simplista podríamos clasificarlos de la siguiente manera:
–Lenguajes de alto nivel: El ser humano se siente más cómodo en este tipo de lenguajes. Dentro de esta categoría podemos nombrar los lenguajes C++, Java, C#, Python, Ruby on Rails, HTML, Lisp, Haskell… Cada uno puede tener utilidades distintas: construcción de páginas web, creación de programas para plataformas móviles, desarrollo de software para robots, modelado y resolución de problemas de ingeniería,etc. Y no sólo una de ellas, sino pueden combinar varias de estas funcionalidades.
Cada uno tiene una sintaxis y una semántica distinta. Viene a ser lo mismo que con los lenguajes con los que se comunica el hombre, el inglés y el español tienen construcciones muy distintas para decir lo mismo y cada una de ellas, en cierta medida, puede tener una mayor o menor expresividad o facilidad de aprendizaje en función de cómo esté dispuesta. Pasa lo mismo con los lenguajes de programación.
–Lenguajes de nivel intermedio: Estos lenguajes combinan algunas de las características de los lenguajes de alto nivel con otras de lenguajes de bajo nivel. Habitualmente, estos lenguajes permiten construir los sistemas operativos ya que son más fiables porque son más cercanos a la forma en que el ordenador trabaja. Es importante aclarar que cuánto más alto es el nivel de un lenguaje, menos depende de la máquina sobre la que se ejecuta.
–Lenguajes de bajo nivel: Básicamente se trata de los lenguajes de tipo ensamblador. Esta muy cercana al lenguaje que el ordenador es capaz de entender directamente. Cuando programas en ensamblador, haces referencia a operaciones aritméticas, cargas de memoria, escrituras, puertos, etiquetas, saltos, etc. Son instrucciones de tan bajo nivel que prácticamente le indicas al ordenador las microinstrucciones que tiene que ejecutar.
¿Cómo entiende mi ordenador los programas de alto nivel?
Cuando escribes un programa en un lenguaje de alto nivel, utilizas instrucciones que luego se descomponen en varias instrucciones de bajo nivel. Normalmente los lenguajes de alto nivel, incorporan numerosas bibliotecas de funciones (librerías) con código previamente escrito que se puede utilizar para tus programas. Por ejemplo, una librería matemática puede incorporar una función que calcule las soluciones de una ecuación de segundo grado.
Sin embargo, el cálculo de la solución de una ecuación no se ejecuta directamente en el procesador como una instrucción; sino que tendrá que realizar sumas, multiplicaciones y divisiones antes de poder devolvernos la solución. Por tanto, la función se dividiría en tantas pequeñas operaciones cómo el procesador necesitara para poder entenderlas.
¿Y quién se ocupa de dividir una función o un programa que yo escriba en pequeñas instrucciones? El compilador.
El compilador
Un compilador verifica que un programa esté correctamente escrito en un lenguaje y una vez hecho esto, transforma el código de alto nivel en código de bajo nivel hasta generar un programa ejecutable para un sistema. Además también puede enlazar varios fragmentos de código en archivos diferentes para crear un sólo programa como veremos más adelante. En definitiva, un compilador no es más que otro programa con una finalidad muy específica (la traducción de alto nivel a bajo nivel). El compilador está relacionado con uno o varios lenguajes y uno o varios sistemas operativos.
Conclusiones
Ya tenemos unidos y relacionados tanto el hardware del ordenador como el software. Con respecto a la próxima entrada, explicaremos qué componentes genéricos puede tener un programa de un lenguaje de programación. Nuestro primer programa lo escribiremos en el primer lenguaje que aprendí y uno de los más usados de la historia: C++.
Poner a Haskell y Lisp en esa lista debería estar prohibido!! :O Por otra parte, muy completito el repaso 😉 Impaciente estoy por leer el resto.
PD: Malditas horas aquellas de programación en ensamblador…
hola espero k les guste
soy nobato en esto y estoy en la busqueda de poder armar un programita facil
el cual tendria que por medio de 3 teclas acreditas segun la tecla un balor ejm:
q= 2 w= 5 e= 10 que serian creditos y con otra tecla pueda ir quitando de a 1 esos creditos si alguien me puede ayudas les agradeseria [email protected]
No me quejo, almenos estoy aprendiendo programacion estructurada en pascal y tambien hago los talleres de python =)
Che viejo, me enseñarias c++!?, o me pasarias alguna web que explique bien detallado eso?..
Un abrazo amigo…