Un ordinateur est une machine très complexe construite par des couches et des couches de technologie.
Enfin, les ordinateurs ne comprennent rien, ils sont un grand réseau de circuits numériques simples qui obéissent aux lois de la physique. Une puce moderne peut comporter des milliards de transistors.
Sur cette base, vous avez des couches et des couches. Certaines couches sont très complexes mais n'offrent qu'une interface limitée. Par exemple, une puce Intel a un système d'exploitation Minix complet qui tourne à l'intérieur juste pour offrir une couche de langage machine avec de nombreux CPU.
Cela dit, généralement, le niveau le plus bas qu'un humain peut utiliser pour donner des ordres aux ordinateurs est le langage machine. Il s'agit d'un ensemble d'instructions sous forme de nombres (séquence de chiffres). Ces instructions composent le jeu d'instructions de l'unité centrale, et ce jeu d'instructions limite ce que l'ordinateur peut faire.
Le langage machine serait représenté, pour les humains, sous forme de chiffres. Dans les années 50 ou 60, avant que le langage d'assemblage et les assembleurs ne se répandent, les programmeurs peuvent avoir à saisir des nombres, à la main, dans un panneau.
L'image ci-dessous montre le panneau 22 bits du PDP-11. Vous saisissiez une adresse et un nombre qui serait chargé à cette adresse en mémoire.
Donc, le langage le plus simple qu'un ordinateur et un humain puissent comprendre et "communiquer" sont des nombres qui représentent des instructions qui contrôlent le comportement du circuit électronique (comme ajouter le registre B au registre A). On appelle cela le langage machine.
Je dois préciser qu'il existe des ordinateurs dont le jeu d'instructions est modifiable, ou des ordinateurs qui peuvent être microprogrammés, c'est-à-dire qu'il existe un langage "sous" le jeu d'instructions que l'on peut utiliser pour modifier ce que l'ordinateur peut faire, dans les limites de ses circuits.
Les humains, cependant, sont bien meilleurs avec les mots. Depuis le début, nous avons associé ces instructions à des mnémoniques qui les représentent, comme ADD A,B pour ajouter le registre B au registre A. Ces mnémoniques forment le langage d'assemblage.
Actuellement, la plupart des puces seraient lancées et discutées en utilisant leur langage d'assemblage comme une représentation beaucoup plus lisible du véritable langage machine (les chiffres). Habituellement, nous utilisons des Assembleurs (une sorte de programme informatique) pour traduire l'Assembleur en langage machine, mais éventuellement, en travaillant sur une nouvelle puce, il est possible que quelqu'un doive faire une traduction manuelle.
Il n'est pas facile de programmer de grands systèmes en Assembleur, donc nous avons développé des Langages de programmation. Les langages de programmation sont conçus pour être faciles à programmer et sans ambiguïté pour les ordinateurs. Habituellement, ils sont conçus dans un seul but, comme, au début, le Fortran a été conçu pour les calculs, le Cobol pour les applications commerciales et le C pour la programmation des systèmes.
Les langages de programmation peuvent être directement traduits, par des compilateurs, en langage machine ou en une autre représentation intermédiaire, comme l'Assembleur ou même d'autres langages de programmation. De nombreux étudiants créent des langages de programmation traduisant quelque chose en C, et ils compilent le C.
Il y a des efforts pour que les ordinateurs comprennent les graphiques (comme les diagrammes UML) et le langage naturel (comme l'anglais).
Donc, la réponse est que les ordinateurs comprennent de nombreux langages différents, concernant dans quelle couche de la hiérarchie de cette machine très complexe vous discutez.
Vous pouvez vous référer à Structured Computer Organization d'Andrew Tanenbaum pour mieux comprendre ces couches et leurs langages.
Si vous voulez en savoir plus sur les langages de programmation, vous pouvez consulter le livre Programming Languages de Sebesta.
Les langages de programmation.