Un ordinateur, çà fonctionne avec des transistors, qui peuvent prendre deux états : 1 ou 0. Cette information est codée sous forme électrique ( courant / pas de courant), et voyage sur des fils.
En combinant des transistors, tu peux obtenir des trucs intéressants :
- des unités de calcul ( addition, soustraction, multiplication, etc.)
- de la mémoire, qui stocke un bit ( un 0 ou un 1) aussi longtemps que l´ordinateur est allumé
- des unités de logique ( choix d´1 fil parmi 2 selon qu´un troisième est à 0 ou à 1, etc.)
Par conséquent, tu peux stocker n´importe quoi et faire des opérations dessus, à partir du moment où tu peux transformer ton n´importe quoi en bits.
Là où çà devient intéressant, c´est quand tu imagines que tu peux choisir l´opération que tu veux effectuer et le paquet de bits sur lequel tu veux l´effectuer. A partir de ce moment, tu peux définir un code ( un ensemble de bits) pour chaque opération, et un code pour chaque adresse mémoire ( chaque paquet de bits).
Et de là, tu peux définir un programme : une suite de couples " opération/adresse", ordonnée selon la volonté du programmeur ( l´algorithme).
Ce programme n´est pas simple à comprendre ( dis-moi ce que veut dire 001011101000100011110101010100011). On utilise donc un niveau d´abstraction supplémentaire : le langage d´assemblage. Ainsi, chaque opération est représentée par un mot ( ADD pour l´addition par exemple), chaque adresse par un numéro ( 0x0044A64C) voire par un nom si c´est une adresse importante ( ECX par exemple). Un programme déjà tout prêt ( l´assembleur) va transformer ton code en langage d´assemblage, en un code binaire, lisible par la machine.
Mais ce système n´est pas forcément très pratique, car d´une machine à l´autre, la même suite de commandes en langage d´assemblage n´aboutira pas au même programme, car les ordinateurs sont constitués différemment ( imagine que tu envoies à ta carte graphique les données de carte son). On utilise donc un niveau d´abstraction supplémentaire, un langage de bas niveau, pour transformer un code commun à n´importe quelle machine en un code d´assemblage prévu pour une seule machine. Un programme tout prêt et prévu spécialement pour la machine, le compilateur, effectue l´opération de transformation. Le compilateur C par exemple, sert à çà.
Enfin, il existe un niveau d´abstraction supplémentaire : le langage de haut niveau. Il sert à organiser les données et/ou les instructions d´une manière simple pour le programmeur. Le compilateur C++ fait çà.
Et si tu veux un niveau d´abstraction supplémentaire, il existe les langages de description ( C#, Visual Basic, etc.), dans lesquels tu places simplement des bidules dans ta fenêtre, tu coches quelques cases, et ton programme est terminé.