Introduction aux langages de programmation
Qu'est-ce qu'un langage de programmation ?
Un langage de programmation est un système de communication structuré qui permet à un humain de donner des instructions à une machine, généralement un ordinateur. Imaginez que vous voulez expliquer à quelqu'un comment faire un gâteau : vous utilisez des mots, des phrases, et un ordre précis. Pour un ordinateur, c'est la même chose, mais les "mots" et les "phrases" sont des instructions spécifiques que seule la machine peut comprendre.
Key Concepts:
- Définition d'un langage : C'est un ensemble de règles et de symboles utilisés pour écrire des programmes informatiques. Ces programmes sont ensuite exécutés par l'ordinateur pour réaliser des tâches spécifiques.
- Communication avec la machine : Les langages de programmation servent de pont entre la pensée humaine (ce que l'on veut faire) et l'exécution par la machine (comment elle doit le faire). Sans eux, il serait impossible de donner des ordres complexes à un ordinateur.
- Syntaxe et sémantique :
- La syntaxe est l'ensemble des règles qui définissent la structure correcte d'un programme. C'est comme la grammaire d'une langue : elle vous dit comment arranger les mots pour former des phrases valides. Par exemple, en Python,
print("Bonjour")est syntaxiquement correct, maisPrint "Bonjour"ne l'est pas. - La sémantique est le sens des instructions. Même si une instruction est syntaxiquement correcte, elle peut ne pas avoir de sens ou ne pas faire ce que l'on attend. Par exemple,
x = 1 / 0est syntaxiquement correct, mais sémantiquement, cela conduit à une erreur car la division par zéro est impossible. Un programme doit être à la fois syntaxiquement correct et sémantiquement cohérent pour fonctionner comme prévu.
- La syntaxe est l'ensemble des règles qui définissent la structure correcte d'un programme. C'est comme la grammaire d'une langue : elle vous dit comment arranger les mots pour former des phrases valides. Par exemple, en Python,
Historique et évolution des langages
L'histoire des langages de programmation est une évolution constante, allant de la manipulation directe des composants de la machine à des abstractions de plus en plus élevées pour faciliter le travail des développeurs.
Key Concepts:
- Langages de bas niveau (machine, assembleur) :
- Langage machine : C'est le niveau le plus bas, composé de suites de 0 et de 1 (code binaire) que le processeur de l'ordinateur peut exécuter directement. Chaque instruction correspond à une opération élémentaire du processeur. Programmer directement en langage machine est extrêmement fastidieux et source d'erreurs.
- Langage assembleur : Une légère amélioration du langage machine. Il remplace les séquences de 0 et 1 par des mnémoniques (des codes courts et faciles à retenir) pour les instructions (ex:
ADDpour additionner,MOVpour déplacer). Un programme appelé "assembleur" traduit ensuite ce code en langage machine. Bien que plus lisible, il reste très proche de l'architecture matérielle et est réservé à des tâches spécifiques (pilotes de périphériques, systèmes embarqués).
- Langages de haut niveau : Ces langages sont conçus pour être plus compréhensibles par les humains. Ils utilisent des mots clés proches du langage naturel (anglais) et des structures logiques. Un seul énoncé dans un langage de haut niveau peut correspondre à des dizaines, voire des centaines, d'instructions en langage machine. Ils permettent de développer plus rapidement et avec moins d'erreurs.
- Générations de langages :
- 1ère génération : Langage machine.
- 2ème génération : Langage assembleur.
- 3ème génération : Premiers langages de haut niveau comme FORTRAN, COBOL, LISP, C, Pascal. Ils sont orientés vers la résolution de problèmes spécifiques ou la logique.
- 4ème génération : Langages encore plus proches du langage humain, souvent utilisés pour des requêtes de bases de données (SQL) ou des générateurs d'applications. Ils sont conçus pour des tâches très spécifiques.
- 5ème génération : Langages basés sur la logique et l'intelligence artificielle (Prolog, LISP, Python). Ils visent à permettre à l'ordinateur de résoudre des problèmes à partir de contraintes données, sans spécifier explicitement chaque étape.
Typologie des langages
Les langages de programmation peuvent être classés selon plusieurs critères, chacun ayant des implications sur la manière dont le code est écrit, exécuté et géré.
Key Concepts:
- Langages compilés vs interprétés :
- Langages compilés : Avant d'être exécuté, le code source (écrit par le programmeur) est entièrement traduit par un programme appelé compilateur en un fichier exécutable (souvent en langage machine). Ce fichier peut ensuite être exécuté directement par l'ordinateur, sans avoir besoin du code source original ni du compilateur.
- Avantages : Généralement plus rapides à l'exécution car la traduction est faite une seule fois, et le code machine est optimisé. Le code source n'est pas nécessaire pour l'exécution.
- Inconvénients : Le processus de compilation peut prendre du temps. Chaque modification du code source nécessite une nouvelle compilation. Moins portables (un exécutable compilé pour Windows ne fonctionnera pas sur macOS sans recompilation).
- Exemples : C, C++, Java (Java est un cas hybride : le code est compilé en bytecode qui est ensuite interprété par une machine virtuelle), Go.
- Langages interprétés : Le code source est lu et exécuté ligne par ligne par un programme appelé interprète. Il n'y a pas de phase de compilation préalable en un exécutable autonome.
- Avantages : Plus flexibles et rapides à développer (on peut tester le code immédiatement après modification). Plus portables (le même code source peut fonctionner sur différentes plateformes si un interprète est disponible).
- Inconvénients : Généralement plus lents à l'exécution car chaque ligne doit être traduite à chaque fois qu'elle est exécutée. L'interprète et le code source sont nécessaires pour l'exécution.
- Exemples : Python, JavaScript, Ruby, PHP.
- Langages compilés : Avant d'être exécuté, le code source (écrit par le programmeur) est entièrement traduit par un programme appelé compilateur en un fichier exécutable (souvent en langage machine). Ce fichier peut ensuite être exécuté directement par l'ordinateur, sans avoir besoin du code source original ni du compilateur.
- Langages statiquement vs dynamiquement typés : Ces termes décrivent comment les types de données (entier, chaîne de caractères, etc.) sont gérés.
- Langages statiquement typés : Le type de chaque variable doit être connu et déclaré au moment de la compilation (ou de l'écriture du code). Le compilateur vérifie la cohérence des types avant l'exécution. Une erreur de type arrêtera la compilation.
- Avantages : Détection précoce des erreurs (avant l'exécution), amélioration des performances (le compilateur sait à l'avance comment gérer les données), meilleure lisibilité et maintenance du code pour les grands projets.
- Exemples : C, C++, Java, C#.
- Langages dynamiquement typés : Le type d'une variable n'est pas déclaré explicitement et peut changer pendant l'exécution du programme. L'interprète détermine le type de la variable au moment de l'exécution.
- Avantages : Plus de flexibilité et rapidité de développement, code souvent plus concis.
- Inconvénients : Les erreurs de type ne sont détectées qu'à l'exécution (runtime errors), ce qui peut rendre le débogage plus difficile pour les grands projets.
- Exemples : Python, JavaScript, Ruby, PHP.
- Langages statiquement typés : Le type de chaque variable doit être connu et déclaré au moment de la compilation (ou de l'écriture du code). Le compilateur vérifie la cohérence des types avant l'exécution. Une erreur de type arrêtera la compilation.
- Exemples concrets :
- Python : Langage interprété et dynamiquement typé. Très populaire pour sa simplicité et sa polyvalence (développement web, IA, science des données, scripts).
- C : Langage compilé et statiquement typé. Très utilisé pour les systèmes d'exploitation, les pilotes et les applications nécessitant de hautes performances.
- Java : Langage compilé en bytecode, puis interprété par une machine virtuelle (JVM), et statiquement typé. Très répandu pour les applications d'entreprise, Android et les systèmes distribués.


