Chapitre 5.4.1
Introduction à la programmation
Coder est à la portée de tous.
La vraie difficulté réside dans l'architecture du code. Il faut qu'il soit testable, adaptable en cas d'idée de
nouvelle fonctionnalité, maintenable sur le long terme et compréhensible par les 50 développeurs qui vont se
succéder dessus.
Le but de cette section n'est bien sûr pas de faire de toi un développeur. Elle te permettra de mieux comprendre ce
qu'on fait dans notre vie quotidienne et peut-être d'ouvrir la porte sur une façon différente de penser.
Un peu d'histoire
On a vu précédemment que les langages de programmation servaient d'intermédiaire entre l'humain et
la machine. Mais ça n'a pas toujours été le cas.
Les premiers programmes informatiques, dans les années 1940, étaient écrits directement en langage machine : des
suites de 0 et de 1, parfois sous forme de cartes perforées. Chaque trou dans la carte représentait un bit
d'instruction. C'était lent, fastidieux, et la moindre erreur obligeait à refaire la carte.
Dans les années 1950, on a inventé le premier vrai langage de programmation : le Fortran. Pour la première fois,
les programmeurs pouvaient écrire des instructions ressemblant vaguement à de l'anglais. Un programme appelé
"compilateur" se chargeait de traduire ça en langage machine. C'était une révolution.
Ensuite, les langages se sont multipliés. COBOL pour la gestion d'entreprise, BASIC pour l'enseignement, Pascal
pour la programmation structurée... Chacun répondait à un besoin spécifique de son époque.
En 1972, Dennis Ritchie crée le langage C aux laboratoires Bell. Ce langage va devenir l'un des plus influents de
l'histoire. Il est assez proche de la machine pour être performant, mais assez lisible pour être utilisé à grande
échelle. Le système d'exploitation Unix, ancêtre de Linux et macOS, a été réécrit en C.
La grande majorité des langages modernes descendent du C ou s'en inspirent fortement. C++, Java, JavaScript, C#,
PHP, Go, Rust... tous ont hérité de sa syntaxe à des degrés divers. C'est pour ça que quand on en connaît un, on
peut lire les autres sans trop de difficulté.
COBOL, créé en 1959, est toujours utilisé aujourd'hui dans les systèmes bancaires. Des milliards de lignes de COBOL tournent encore dans les banques et les administrations du monde entier. Il y a régulièrement des offres d'emploi pour maintenir ces systèmes, souvent très bien payées, parce que les développeurs qui connaissent ce langage se font de plus en plus rares.
Langages compilés et langages interprétés
On a vu que les langages servaient d'intermédiaire entre l'humain et la machine, et qu'un programme spécialisé se chargeait de traduire le code en instructions compréhensibles par le processeur. Mais il y a deux grandes façons de faire cette traduction.
Les langages compilés
Avec un langage compilé, la traduction se fait en une seule fois, avant l'exécution du programme. Un outil appelé
"compilateur" prend tout le code source et le transforme en un fichier exécutable : un fichier que la machine peut
lancer directement.
C'est comme traduire un livre entier avant de le publier. Le lecteur reçoit la version traduite, prête à être lue.
La traduction prend du temps, mais une fois que c'est fait, la lecture est rapide.
Quand tu installes un logiciel sur ton ordinateur (un .exe sur Windows par exemple), tu utilises souvent un
programme qui a été compilé. Le développeur a écrit du code, l'a compilé, et c'est le résultat de cette
compilation que tu télécharges et exécutes.
Les langages compilés sont généralement plus rapides à l'exécution, car le travail de traduction a déjà été fait.
C, C++ et Rust sont des exemples de langages compilés.
En revanche, un programme compilé ne fonctionne que sur le type de machine pour lequel il a été compilé. Un .exe
compilé pour Windows ne marchera pas sur Mac, et inversement. Si tu veux que ton logiciel tourne sur Windows, Mac
et Linux, il faut le compiler trois fois, une fois pour chaque système. Et si le processeur est différent (un PC
classique vs un Mac avec puce Apple Silicon par exemple), c'est encore une compilation supplémentaire. C'est un des
inconvénients majeurs de la compilation.
Les langages interprétés
Avec un langage interprété, la traduction se fait au fur et à mesure, ligne par ligne, au moment où le programme
s'exécute. Un outil appelé "interpréteur" lit chaque instruction et l'exécute immédiatement.
C'est comme avoir un interprète en temps réel lors d'une conférence. Chaque phrase est traduite au moment où elle
est prononcée. C'est plus souple, mais un peu plus lent puisque la traduction se fait en même temps que l'exécution.
JavaScript, Python et PHP sont des exemples de langages interprétés. On n'a pas besoin de compiler quoi que ce
soit : on écrit le code, on le lance, et il s'exécute directement. Et comme c'est l'interpréteur qui s'occupe de
parler à la machine, le même code fonctionne sur n'importe quel système, du moment que l'interpréteur y est
installé. C'est un gros avantage en termes de portabilité.
En pratique, la frontière entre langages compilés et interprétés est devenue floue. Beaucoup de langages modernes utilisent des approches hybrides. Par exemple :
- Java compile d'abord le code source en un format intermédiaire appelé "bytecode". Ce bytecode est ensuite exécuté par la machine virtuelle Java (JVM), qui peut l'interpréter ou le compiler à la volée en code machine pour améliorer les performances.
- Les moteurs des navigateurs interprètent le code JavaScript, mais ils peuvent aussi compiler les portions les plus utilisées afin d'accélérer leur exécution. C'est ce qu'on appelle la compilation "Just-In-Time" (JIT).
- PHP combine ces pratiques. Le code est d'abord transformé en "opcodes" avant d'être exécuté. Depuis PHP 8, certaines parties du code peuvent en plus être compilées dynamiquement grâce à un mécanisme de compilation JIT.
Haut niveau et bas niveau
On classe aussi les langages selon leur niveau d'abstraction, c'est-à-dire à quel point ils te protègent des détails techniques de la machine.
Bas niveau
Un langage "bas niveau" te donne un contrôle très précis sur le matériel. Tu gères toi-même la mémoire, tu peux
interagir directement avec le processeur. C'est puissant, mais complexe et risqué : la moindre erreur peut faire
planter tout le système.
Le C est considéré comme l'un des langages les plus bas niveau encore couramment utilisés. Et pourtant, même lui
est d'abord transformé en quelque chose d'encore plus bas lors de la compilation : l'assembleur. L'assembleur, ce
sont des instructions qui correspondent presque directement à ce que le processeur exécute. C'est le dernier
niveau lisible par un humain avant le langage machine.
Assembleur x86 (additionner 2 + 3)
mov eax, 2 add eax, 3
En assembleur, mov eax, 2 signifie "mets la valeur 2 dans le registre eax du processeur" et
add eax, 3 signifie "ajoute 3 à ce qui se trouve dans eax". C'est direct, mais pas très intuitif.
Pour faire la même chose en Python, on écrirait simplement resultat = 2 + 3.
Et chaque type de processeur a son propre assembleur. Un processeur Intel ne comprend pas les mêmes instructions
qu'un processeur ARM (celui des smartphones et des Mac récents). C'est justement pour ça qu'il faut recompiler un
programme pour chaque combinaison de système d'exploitation et de processeur : le compilateur doit produire
l'assembleur correspondant à la machine cible.
Haut niveau
Un langage "haut niveau" te facilite la vie en gérant automatiquement plein de choses. Tu n'as pas besoin de savoir
en détail comment la mémoire fonctionne, ni comment le processeur traite tes instructions. Tu te concentres sur ce que tu
veux que le programme fasse, pas sur comment la machine va le faire.
Python, JavaScript, Java, PHP sont tous des langages haut niveau.
Plus un langage est haut niveau, plus il est facile à apprendre et à utiliser, mais plus on perd en performance et
en contrôle. C'est un compromis permanent en informatique. Pour un site web ou une application mobile, un langage
haut niveau est parfait. Pour programmer le système de freinage d'une voiture ou un système d'exploitation, il vaut
mieux un langage bas niveau qui permet un contrôle total.
L'IDE
Pour écrire du code, on pourrait théoriquement utiliser n'importe quel éditeur de texte : le Bloc-notes de Windows,
TextEdit sur Mac... Ça fonctionnerait, mais ce serait comme essayer de construire une maison avec un tournevis
pour seul outil.
En pratique, les développeurs utilisent un IDE, pour "Integrated Development Environment", un environnement de
développement intégré. C'est un éditeur de texte spécialement conçu pour écrire du code, avec plein de
fonctionnalités en plus.
Au quotidien, un IDE apporte :
- La coloration syntaxique : le code est coloré en fonction de sa signification. Les mots-clés du langage dans une couleur, les textes dans une autre, les nombres dans une troisième... Ça rend le code bien plus lisible.
- L'autocomplétion : quand tu commences à taper un mot, l'IDE te propose des suggestions. Un peu comme le clavier de ton téléphone qui te propose la fin du mot, mais en beaucoup plus intelligent. L'IDE connaît toutes les variables, fonctions et structures du projet. Depuis l'intégration de l'IA, les IDE comprennent encore mieux le contexte et l'intention, ils peuvent générer d'un coup plusieurs lignes de codes.
- La détection d'erreurs : pas besoin d'exécuter le programme pour voir certaines erreurs. L'IDE les souligne en rouge directement dans le code, comme un correcteur orthographique.
- La navigation : tu peux cliquer sur le nom d'une fonction pour aller directement à l'endroit où elle est définie, même si c'est dans un autre fichier. Indispensable dans un projet qui contient des milliers de fichiers.
- Le débogage : tu peux exécuter ton programme pas à pas, ligne par ligne, pour comprendre exactement ce qui se passe et trouver l'origine d'un bug.
- L'intégration d'outils : l'IDE supporte nativement tous les outils utilisés quotidiennement par les développeurs. Par exemple les outils de versionnage comme Git, un terminal, un navigateur, un chat IA etc... La plupart des IDE proposent aussi un magasin d'extensions pour ajouter des fonctionnalités personnalisées. Le développeur peut travailler sans quitter son IDE.
Plusieurs IDE populaires se partagent le marché :
- Visual Studio Code (VS Code), développé par Microsoft. Il est gratuit, open source, et utilisé par une majorité de développeurs tous langages confondus.
- Les produits JetBrains (IntelliJ pour Java, PyCharm pour Python, WebStorm pour JavaScript, PHPStorm pour PHP...) sont réputés pour leur intelligence et leur intégration poussée avec les langages qu'ils supportent.
- Xcode est l'IDE d'Apple pour développer des applications iOS et macOS.
- Android Studio est celui de Google pour les applications Android.
Il y a aussi des développeurs qui préfèrent des éditeurs minimalistes en ligne de commande, comme Vim.
Ils fonctionnent entièrement au clavier, sans souris. Ça peut paraître archaïque, mais une fois maîtrisés, ils
permettent d'éditer du code à une vitesse impressionnante.
Ces dernières années, l'intelligence artificielle a profondément changé la façon dont on utilise les IDE.
Des outils comme GitHub Copilot ou Cursor (un clone de VS Code centré sur l'IA) peuvent suggérer des blocs de code
entiers, expliquer du code existant, ou encore refactorer du code automatiquement. Certains développeurs utilisent
même des agents IA directement dans leur terminal, comme Claude Code, capables de naviguer dans le projet, écrire
du code et exécuter des commandes de manière autonome.
Passons à la pratique
Dans les prochains chapitres, tu vas découvrir les concepts fondamentaux de la programmation : les variables, les
types, les conditions, les boucles, les fonctions...
Les exemples se serviront du langage JavaScript. C'est l'un des langages les plus utilisés au monde, avec une
syntaxe inspirée du C. Mais surtout, tu vas pouvoir tester tous les exemples directement dans ton navigateur web,
sans rien installer. Tous les navigateurs proposent une console. Sur Chrome, appuie sur F12 puis va dans l'onglet
"Console". Sur Firefox, c'est pareil. Sur Safari, il faut d'abord activer le menu "Développement" dans les
préférences.
Tu peux y taper n'importe quelle instruction JavaScript et appuyer sur Entrée pour l'exécuter. Essaie par
exemple de taper :
Dans la console de ton navigateur
console.log("Bonjour !")
Si tu vois "Bonjour !" s'afficher, c'est que tout fonctionne. Tu es prêt pour la suite.
N'hésite pas à modifier les valeurs, à expérimenter. C'est en pratiquant qu'on apprend le mieux. Et pas d'inquiétude, tu ne risques pas de casser quoi que ce soit.
On utilise JavaScript par commodité, mais tous les concepts que tu vas découvrir existent dans pratiquement tous les langages de programmation. La syntaxe change, les idées restent les mêmes. Un développeur qui maîtrise ces fondamentaux peut passer d'un langage à un autre sans trop de difficulté.
