Un ordenador es una máquina muy compleja construida por capas y capas de tecnología.
En definitiva, los ordenadores no entienden nada, son una gran red de circuitos digitales simples que obedecen a las leyes de la física. Un chip moderno puede tener miles de millones de transistores.
A partir de ahí tienes capas y capas. Algunas capas son muy complejas pero sólo ofrecen una interfaz limitada. Por ejemplo, un chip de Intel tiene un completo sistema operativo Minix funcionando en su interior sólo para ofrecer una capa de lenguaje de máquina con muchas CPUs.
Dicho esto, normalmente, el nivel más bajo que un humano puede utilizar para dar órdenes a los ordenadores es el lenguaje de máquina. Se trata de un conjunto de instrucciones en forma de números (secuencia de dígitos). Estas instrucciones componen el conjunto de instrucciones de la CPU, y ese conjunto de instrucciones limita lo que el ordenador puede hacer.
El lenguaje de máquina se representaría, para los humanos, como números. En los años 50 o 60, antes de que el lenguaje ensamblador y los ensambladores se generalizaran, los programadores podrían tener que introducir números, a mano, en un panel.
La imagen de abajo muestra el panel de 22 bits del PDP-11. Se introducía una dirección y un número que se cargaba en esa dirección en la memoria.
Por lo tanto, el lenguaje más sencillo que un ordenador y un humano pueden entender y "comunicar" son números que representan instrucciones que controlan cómo se comporta el circuito electrónico (como añadir el registro B al registro A). Lo llamamos Lenguaje de Máquina.
Debo señalar que hay ordenadores que tienen un conjunto de instrucciones modificable, u ordenadores que pueden ser microprogramados, es decir, hay un lenguaje "debajo" del conjunto de instrucciones que uno puede utilizar para modificar lo que el ordenador puede hacer, en los límites de su circuitería.
Los humanos, sin embargo, somos mucho mejores con las palabras. Desde el principio, asociamos estas instrucciones con mnemónicos que las representan, como ADD A,B para añadir el registro B al registro A. Estos mnemónicos forman el Lenguaje Ensamblador.
Actualmente, la mayoría de los chips se lanzarían y discutirían utilizando su Lenguaje Ensamblador como una representación mucho más legible del verdadero lenguaje de máquina (números). Normalmente, utilizamos ensambladores (una especie de programa informático) para traducir el lenguaje ensamblador al lenguaje máquina, pero eventualmente, trabajando en un nuevo chip, es posible que alguien tenga que hacer alguna traducción manual.
No es fácil programar grandes sistemas en ensamblador, por lo que se han desarrollado lenguajes de programación. Los Lenguajes de Programación están diseñados para que sean fáciles de programar y no sean ambiguos para los ordenadores. Normalmente, se diseñan con un objetivo, como por ejemplo, al principio, Fortran se diseñó para cálculos, Cobol para aplicaciones comerciales, y C para programación de sistemas.
Los Lenguajes de Programación pueden ser traducidos directamente, por los compiladores, a Lenguaje Máquina u otra representación intermedia, como Ensamblador o incluso otros Lenguajes de Programación. Muchos estudiantes crean lenguajes de programación traduciendo algo a C, y compilan C.
Hay esfuerzos para que los ordenadores entiendan gráficos (como los diagramas UML) y lenguaje natural (como el inglés).
Por lo tanto, la respuesta es que los ordenadores entienden muchos lenguajes diferentes, respecto a en qué capa de la jerarquía de esta complejísima máquina se está discutiendo.
Puedes consultar el libro Structured Computer Organization de Andrew Tanenbaum para entender mejor estas capas y sus lenguajes.
Si quieres saber más sobre lenguajes de programación, puedes consultar el libro Programming Languages de Sebesta.