Programme
En 1843, Ada Lovelace traduit en anglais un compte rendu d'une conférence de Charles Babbage sur sa machine analytique et y ajoute des notes. L'une d'elles contient un algorithme, couramment décrit comme étant le premier programme informatique publié, pour calculer les nombres de Bernoulli.
En 1936, Alan Turing décrit dans un article un modèle de machine abstraite capable de lire, d'écrire et d'effacer des symboles sur un ruban selon un jeu fini de règles. Il démontre qu'il existe une machine universelle programmable, capable de simuler n'importe quelle autre machine de ce type.
De 1942 à 1945, Konrad Zuse conçoit théoriquement le Plankalkül, premier langage de haut niveau.
En 1947, Kathleen Booth conçoit un langage d'assemblage, du plus bas niveau après le langage machine. Ce langage se généralise dans les années 1950.
Par la suite, des langages de plus haut niveau ont été développés pour programmer de façon plus conviviale (abstraction du matériel, syntaxe plus lisible, meilleure portabilité, etc.) et prendre en charge différents paradigmes de programmation (procédural, orienté objet, fonctionnel, etc.).
Flux de communication
Un programme ne communique pas directement avec le matériel; le système d'exploitation fait office d'intermédiaire :
Processus
Pour les langages de programmation dits natifs, le processus, du code source jusqu'à l'exécution, est le suivant :

Formats
Chaque système d'exploitation a son chargeur (loader) qui place un programme en mémoire centrale avant son exécution.
Tous les programmes doivent donc respecter un format reconnu par le chargeur du système d'exploitation sur lequel ils s'exécutent.
MZ
Mark Zbikowski, pour DOS.
ELF
Executable and Linkable Format, pour Unix, ses dérivés et de nombreux autres systèmes.
Mach-O
Mach Object, pour macOS et iOS.
PE
Portable Executable, pour Windows.
Variables
Les données ne sont que des nombres stockés dans la mémoire centrale, laquelle est constituée que d'octets liés à des adresses.
Table des symboles
Pour faciliter la manipulation des données, les langages de programmation permettent d'utiliser un identificateur, plutôt qu'une adresse de la mémoire centrale, et un type de données. Et c'est la table des symboles qui fera office d'intermédiaire entre les deux lors de la compilation :
| Identificateur | Type | Taille | ... | Adresse |
|---|---|---|---|---|
| variable | entier | 4 octets | ... | 0x1A2B3C |
Types
L'une des deux utilités des types de données des langages de programmation est d'identifier comment interpréter et manipuler les données :
| MASM | C | C++ | Java | Taille |
|---|---|---|---|---|
| bool | boolean | 1 octet | ||
| BYTE | char, unsigned char | char, unsigned char | byte | 1 octet |
| WORD | short, unsigned short | short, unsigned short | short | 2 octets |
| DWORD | int, unsigned int | int, unsigned int | int | 4 octets |
| QWORD | long, unsigned long | long, unsigned long | long | 8 octets |
| REAL4 | float | float | float | 4 octets |
| REAL8 | double | double | double | 8 octets |
Plages
L'octet est l'unité de base en informatique, mais il est possible d'utiliser plusieurs octets, un à la suite des autres en mémoire centrale, afin de représenter une valeur. C'est l'autre des deux utilités des types de donnée des langages de programmation.
Pour connaître une plage de valeurs, il suffit d'élever 2 à la puissance du nombre de bits qu'occupe un type de données :
28 = 256, donc une plage de valeurs entre 0 et 255.
216 = 65 536, donc une plage de valeurs entre 0 et 65 535.
232 = 4 294 967 296, donc une plage de valeurs entre 0 et 4 294 967 295.
264 = 18 446 744 073 709 551 616, donc une plage de valeurs entre 0 et 18 446 744 073 709 551 615.
Les plages ci-dessus ne sont valides que pour des valeurs dites « non signées ». Puisque le bit le plus fort est utilisé pour les valeurs signées, la plage de valeurs est donc déplacée :
27 = une plage de valeurs entre -128 et 127.
215 = une plage de valeurs entre -32 768 et 32 767.
231 = une plage de valeurs entre -2 147 483 648 et 2 147 483 647.
263 = une plage de valeurs entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807.
Toutes les plages de valeurs ci-dessus sont inclusives.