Program Arcade Games
With Python And PygameChapter 2: Qu'est-ce qu'un langage de programmation ?
Qu'est-ce qu'un langage de programmation ? Pourquoi les ordinateurs en ont-ils besoin ? Pourquoi y a-t-il tellement de langages de programmation différents ?
Il n'est pas nécessaire de connaître les réponses à ces questions pour faire de la programmation simple, comme il n'est pas nécessaire de comprendre comment un moteur fonctionne pour conduire une voiture. Cependant, pour progresser jusqu'à un niveau élevé, cela devient nécessaire. Ce chapitre donne une courte explication, pour commencer à comprendre.
2.1 Une Brève Histoire de la Programmation
Les ordinateurs sont électroniques, et ils sont numériques. Pour un ordinateur, tout est une histoire de présence ou d'absence de tension le long d'un fil électrique. L'absence de tension signifie un 0 pour l'ordinateur, et la présence d'une tension signifie un 1. Les ordinateurs ne peuvent actuellement pas compter plus loin que cela sans combiner plusieurs 0 et 1.
Au tout début, on utilisait des interrupteurs pour entrer les 1 et les 0 dans la mémoire de l'ordinateur. La figure 2.1, merci à Wikimedia Commons, montre un Altair 8800. Les interrupteurs du panneau avant étaient utilisés pour charger le programme. Les lumières donnaient le résultat. Il n'y avait pas d'écran.
Chaque ensemble d'interrupteurs en position on ou off représente un nombre. Chaque nombre peut représenter une donnée ou une instruction que l'ordinateur doit traiter. Ce système qui n'utilise que des 1 et des 0 pour réprésenter les nombres s'appelle le système de numération binaire. Cette forme de langage de programmation s'appelle un langage de première génération, ou 1GL : « 1st Generation Language ».
Les nombres binaires sont généralement représentés en groupant les 1 et les 0 par quatre. Par exemple:
1010 0010 0011
Les données, comme les instructions, sont mémorisées en binaire. Le langage machine est constitué de nombres binaires qui représentent des instructions que l'ordinateur interprète. Mais toutes les données binaires ne sont pas du langage machine. Des données comme des documents, des bases de données, des graphiques financiers sont également mémorisés en binaire dans l'ordinateur. Ces données ne sont bien sûr pas destinées à être exécutées par l'odinateur.
Plutôt que de saisir les programmes avec des interrupteurs, une première amélioration a été d'utiliser le code héxadécimal. Les nombres décimaux qu'utilise la plupart des gens nécessitent les chiffres de 0 à 9. L'héxadécimal nécessite les chiffres de 0 à 9 et de A à F pour représenter un ensemble de 4 interrupteurs, ou les nombres de 0 à 15. Regardez le tableau ci-dessous pour avoir une idée de la relation entre le binaire, le décimal et l'héxadécimal.
Binaire | Décimal | Héxadécimal |
0 | 0 | 0 |
1 | 1 | 1 |
10 | 2 | 2 |
11 | 3 | 3 |
100 | 4 | 4 |
101 | 5 | 5 |
110 | 6 | 6 |
111 | 7 | 7 |
1000 | 8 | 8 |
1001 | 9 | 9 |
1010 | 10 | A |
1011 | 11 | B |
1100 | 12 | C |
1101 | 13 | D |
1110 | 14 | E |
1111 | 15 | F |
1 0000 | 16 | 10 |
1 0001 | 17 | 11 |
Afin de rendre la saisie des programmes encore plus facile, les programmeurs ont pu par la suite utiliser le langage assembleur. Chaque instruction est représentée par un mnémonique, et un programme appelé compilateur va traduire le mnémonique en un nombre qui représente l'instruction. Cette forme de langage est appellée un langage de deuxième génération, ou 2GL : « 2nd Generation Language ».
La figure 2.2 montre un extrait d'un programme en assembleur, à nouveau merci à Wikimedia Commons.
Bien que cela représentait une réelle amélioration, il n'était toujours pas très facile de programmer. La génération de langages suivante a permis un niveau d'abstraction plus élevé. Les langages de troisième génération, (COBOL, FORTRAN et LISP) furent bien plus faciles à comprendre et à utiliser.
La deuxième et la troisième génération de langages utilisaient un programme appelé compilateur. Un compilateur prend le programme saisi par l'utilisateur (qu'on appelle le code source) et le traduit en code machine. L'ordinateur exécute alors le code machine. Le code source originel n'est pas exécuté.
Si le code source d'un programme est en plusieurs parties, elles peuvent être unies dans un seul programme en utilisant un programme appelé éditeur de liens. L'éditeur de liens utilise le code machine généré par le compilateur pour générer le programme final. C'est ce programme final que l'utilisateur utilisera, et le code source originel n'est plus nécessaire.
Un inconvénient de la compilation en langage machine est que le programme ne fonctionnera que sur le type de machine prévu. Les programmes compilés pour Windows ne fonctionneront pas sur un ordinateur Macintosh d'Apple, ni sur un ordinateur sous Linux.
Parce que les étapes de compilation et d'édition des liens peuvent être complexes pour de nouveaux programmeurs, certains langages utilisent à la place des interpreteurs. Ces programmes lisent le code source et le traduisent en langage machine à la volée. Ils permettent également d'exécuter le même programme sur des ordinateurs fonctionnant sous Windows, Mac OS ou Unix, à la seule condition qu'un interpréteur soit disponible pour chaque plateforme.
En contrepartie, l'utilisation d'un interpréteur rendra l'exécution plus lente que pour un programme exécuté directement en langage machine.
Python est un exemple de langage interprété. Il est plus facile de développer en python qu'en C, mais Python s'exécute plus lentement et nécessite un interpréteur Python pour fonctionner.
Des langages comme Java utilisent un système dans lequel les programmes sont compilés dans un code machine qui fonctionne dans une Machine Virtuelle Java (ou « Java Virtual Machine », JVM), plutôt que directement sur l'ordinateur. Un autre langage populaire qui fonctionne ainsi est C#, un langage de la « Common Language Infrastructure » (CLI) qui s'exécute sur la machine virtuelle « Virtual Execution System » (VES). Une discussion complète sur ce point n'est pas le propos de ce livre, mais n'hésitez pas à approfondir le sujet.
De nos jours, il y a beaucoup de langages de programmation différents. Parce que les ordinateurs peuvent effectuer des tâches très variées, une grande variété de langages spécialisés dans chacune de ces tâches ont été développés. Des langages comme C sont efficaces pour les systèmes d'exploitation et les petits systèmes embarqués. D'autres langages comme PHP sont specialisés dans la création de pages Web. Python est un langage à usage général, dont la spécialité est la facilité d'utilisation.
La société Tiobe assure le suivi de la popularité d'un grand nombre de langages de programmation dans leur catalogue qui est actualisé chaque mois. Cela peut être une bonne idée de consulter ce catalogue, puis un site de recherche d'emploi comme DICE pour être en phase avec les langages recherchés par les employeurs.
Fort heureusement, la plupart des langages partagent des éléments communs, et une fois que vous avez appris un langage, les même bases théoriques s'appliqueront aux autres langages.
Pour une histoire distrayante de l'informatique, je vous recommande : « Triumph of the Nerds » par Robert X Cringley, un documentaire en trois parties sur les origines de l'informatique. Ces films sont suffisamment divertissants pour que toute votre famille puisse les regarder. Je vous recommande également le livre Accidental Empires, si vous préférez la lecture aux films.
Que s'est-il passé après la période couverte par ce documentaire ? Il ne parle même pas de la naissance d'Internet ! Regardez la série de documentaires Nerds 2.0.1, également par Robert X Cringely.
2.2 Évaluation
2.2.1 Questionnaire à Choix Multiples
Click here for a multiple-choice quiz.
2.2.2 Fiche d'Exercices à Réponse Courte
Click here for the chapter worksheet.
2.2.3 Travaux Pratiques
Click here for the chapter lab.
You are not logged in. Log in here and track your progress.
English version by Paul Vincent Craven
Spanish version by Antonio Rodríguez Verdugo
Russian version by Vladimir Slav
Turkish version by Güray Yildirim
Portuguese version by Armando Marques Sobrinho and Tati Carvalho
Dutch version by Frank Waegeman
Hungarian version by Nagy Attila
Finnish version by Jouko Järvenpää
French version by Franco Rossi
Korean version by Kim Zeung-Il
Chinese version by Kai Lin