Un programa es una secuencia de órdenes para un ordenador. Estas órdenes se le deben dar en un lenguaje que el ordenador sea capaz de comprender.
El problema es que los lenguajes que realmente entienden los ordenadores resultan difíciles para nosotros, porque son muy distintos de los que nosotros empleamos habitualmente para hablar. Escribir programas en el lenguaje que utiliza internamente el ordenador (llamado "lenguaje máquina" o "código máquina") es un trabajo duro, tanto a la hora de crear el programa como (especialmente) en el momento de corregir algún fallo o mejorar lo que se hizo. Por eso, en la práctica se emplean lenguajes más parecidos al lenguaje humano, llamados "lenguajes de alto nivel". Normalmente, estos son muy parecidos al idioma inglés, aunque siguen unas reglas mucho más estrictas.
Las órdenes que nosotros escribimos (lo que se conoce como "programa fuente") deben convertirse a lo que el ordenador comprende (obteniendo el "programa ejecutable"). Las herramientas encargadas de esa traducción son los compiladores. El programa ejecutable obtenido con un compilador se podría hacer funcionar en otro ordenador similar al que habíamos utilizado para crearlo, sin necesidad de que ese otro ordenador tenga instalado el compilador.
Un intérprete es otro tipo de traductor, más sencillo que un compilador, La diferencia de que en los intérpretes no se crea ningún "programa ejecutable" capaz de funcionar "por sí solo", de modo que si queremos distribuir nuestro programa a alguien, deberemos entregarle el programa fuente y deberá tener también el intérprete que es capaz de entenderlo, o nuestro programa no le servirá de nada. Cuando es el momento de poner el programa en funcionamiento, el intérprete de encarga de convertir cada orden del programa fuente en su equivalente en código máquina, y de poner en marcha esa orden, una tras otra. Eso hace que normalmente un programa interpretado comenzará a funcionar antes que un programa compilado (no es necesario traducir todo el programa para empezar, sino sólo la primera orden) pero será más lento en los procesos de cálculo intensivo (cada orden se puede tener que traducir varias veces, tantas como se ejecute).
Para algunos lenguajes, es frecuente encontrar compiladores pero no suele existir intérpretes. Es el caso del lenguaje C, de Pascal y de C++, por ejemplo. En cambio, para otros lenguajes, lo habitual es trabajar con intérpretes y no con compiladores, como ocurre con Python, Ruby y PHP.
Además, hoy en día existe algo que parece intermedio entre un compilador y un intérprete: hay lenguajes que no se compilan para obtener un ejecutable para un ordenador concreto, sino un ejecutable "genérico", que es capaz de funcionar en distintos tipos de ordenadores, a condición de que en ese ordenador exista una "máquina virtual" capaz de entender esos ejecutables genéricos. Esta es la idea que se aplica en Java: los fuentes son ficheros de texto, con extensión ".java", que se compilan a ficheros ".class". Estos ficheros ".class" se podrían llevar a cualquier ordenador que tenga instalada una "máquina virtual Java" (las hay para la mayoría de sistemas operativos). Esta misma idea se sigue en el lenguaje C#, que se apoya en una máquina virtual llamada " plataforma punto net" ("Dot Net Framework").
A pesar de que los lenguajes de alto nivel se acercan al lenguaje natural, que nosotros empleamos para hablar, es habitual no usar ningún lenguaje de programación concreto cuando queremos plantear inicialmente los pasos necesarios para resolver un problema, sino emplear un lenguaje de programación ficticio, no tan estricto, muchas veces escrito incluso en español. Este lenguaje recibe el nombre de pseudocódigo:
pedir dato1 al usuario
pedir dato2 al usuario
si dato2 es distinto de cero
escribir resultado de : dato1 / dato2
en caso contrario
escribir "No se puede dividir entre cero"
La secuencia finita de pasos que se debe dar para resolver un problema es lo que se conoce como algoritmo. Por tanto, un programa de ordenador es un algoritmo que se ha expresado usando un lenguaje de programación.
Ejercicio propuesto 1.1.1: En el lenguaje BASIC clásico, una orden PRINT "Hola" escribiría el texto Hola en pantalla. Busca un emulador de un un ordenador clásico que funcione desde una página web, como el que tienes en cpcbox.com o el de roland.retrolandia.net y comprueba lo que ocurre al teclear esa orden y pulsar Intro.