El mes pasado murió Dennis Ritchie. Fue el creador del lenguaje de programación C. La revista Time recogía en portada el deceso de Steve Jobs; en cambio, a Ritchie sólo le dedicó una brevísima nota (de una sola frase) en la columna de obituarios. Y sin embargo, sin embargo … sería discutible si Ritchie no contribuyó en mayor medida al avance de la informática.
A fin de que un ordenador realice una tarea es necesario traducir nuestras ideas para expresarlas en términos de las escasas operaciones que puede llevar a cabo el microprocesador. Estas consisten básicamente en mover los bits de un lado a otro, cambiar su estado de cero a uno o de uno a cero, comparar dos bits, sumarlos, y no mucho más. Al principio de la era de los ordenadores, los programadores escribían en lenguaje máquina: ristras de números que indicaban exactamente esas órdenes. Imagínense lo complicado que podía llegar a ser multiplicar dos números enteros.
El siguiente paso (“segunda generación” de los lenguajes informáticos) fue el assembly o lenguaje ensamblador. Consta de unos pocos comandos que son representaciones simbólicas de las operaciones del lenguaje máquina. Por lo menos ya no son listas de números completamente ilegibles. Por ejemplo:
push ax
mov ah,9
mov dx,sp
int 21h
add sp,6
Todavía duro de leer, por supuesto. Una vez escrito, hay que traducirlo a lenguaje máquina. Eso se hace con un compilador. El lenguaje ensamblador es fácil de compilar porque cada orden corresponde exactamente a una instrucción en lenguaje máquina.
Aquí es donde llega Ritchie, el C, y otros lenguajes de “tercera generación”. Téngase en cuenta que el ensamblador depende del microprocesador (del chip que tenga el ordenador, vamos). Los lenguajes de tercera generación (como el COBOL o el FORTRAN) ya no utilizan código directamente trasladable a lenguaje máquina. Por el contrario, el compilador contiene librerías donde están implementadas varias funciones usadas habitualmente (así, pueden contener código para calcular el coseno de un ángulo). El compilador toma el programa y lo traduce al lenguaje máquina del procesador en el que se va a ejecutar con la ayuda de las librerías. Los lenguajes de tercera generación son portables (el código se lleva de un ordenador a otro y se compila donde se quiera ejecutar), y son más fáciles de leer (pues sus comandos son parecidos a las palabras del lenguaje humano).
Este avance permitió que muchas personas empezaran a escribir sus propios programas: no hacía falta conocer los arcanos de cada procesador ni dedicar largas y tediosas horas a escribir código que más parece una cábala que un algoritmo. La informática progresó entonces, hacia los años 70, de manera increíble, irrumpiendo en todos los ámbitos: la ciencia, los negocios, el hogar … El C es un lenguaje de tercera generación, muy potente, elaborado por Ritchie. Su uso, 40 años después de su invención, sigue siendo muy intenso. El sistema operativo UNIX, en cuya creación también colaboró Ritchie, y su pariente el Linux, están escritos en C, por ejemplo. Hay muchísimos lenguajes de programación. Cada uno de ellos suele tener ventajas para alguna tarea específica. El C es sumamente versátil.
Aún hay una “cuarta generación”. Conforme vamos avanzando de nivel, los programas tienen una sintaxis y unas palabras más parecidas al lenguaje humano que al de la máquina. Por ejemplo, Mathematica y Matlab son lenguajes de cuarta generación. En realidad, más que lenguajes son entornos de programación, en los que se integra el editor de texto, las representaciones gráficas, etc. Para que se aprecie la diferencia, he aquí una captura de la pantalla de mi ordenador donde se muestra un programa escrito en C y su correspondiente salida; el programa escribe Hola y calcula 2 + 3

Y ahora, lo mismo en Matlab:

Es un ejemplo gráfico de la diferencia entre un lenguaje de bajo y alto nivel (la "generación" a la que pertenecen). Pero por el camino hemos perdido velocidad. En muchas aplicaciones, el C resulta unas diez veces más rápido que Matlab. Así que muchos usamos C cuando se necesita eficiencia, y valoramos el trabajo de Dennis Ritchie. En señal de aprecio, vaya esta foto de mi ejemplar del libro en el que describió el lenguaje C, junto con B. Kernighan. La influencia que ha tenido esta obra ha sido profunda y duradera.
