II.

Les langages de programmation et la création de logiciels

On définit souvent un langage de programmation comme « une langue artificielle construite pour donner des consignes à un ordinateur ». Les ordinateurs ne comprennent pas le français, l’arabe ou le chinois, et même si les humains peuvent, en théorie, apprendre le binaire (le langage de base des ordinateurs), presque personne ne le fait. Voilà pourquoi nous avons besoin d’un niveau intermédiaire de communication : ce que l’on appelle les langages de programmation.

Comme nous avons pu le voir dans la partie I, les programmeurs créent des langages et des outils logiciels depuis les premiers pas des systèmes informatiques. Dans cette partie, vous allez comprendre à quoi servent les langages de programmation et comment ils ont évolué.

Les langages de programmation de bas niveau

Aux débuts de l’informatique, le code assembleur et le code binaire constituaient les langages principaux de communication informatique permettant de demander aux ordinateurs d’exécuter des commandes en traduisant des données en 0 et 1 – le binaire.

Le code machine, également connu sous le nom de langage binaire, est une série de 1 et de 0 qui représentent une commande destinée au processeur de l’ordinateur. Le langage assembleur est bien plus facile à lire que le langage binaire. Plutôt que d’utiliser directement les valeurs numériques de l’instruction machine, l’assembleur utilise des codes mnémotechniques pour s’y référer.

On pourrait penser que ces langages ne sont plus importants puisqu’ils restent invisibles pour la plupart des utilisateurs d’ordinateurs, mais la réalité est tout autre puisque l’on continue à employer ces langages dans les machines modernes. Ils servent de fondamentaux à tous les ordinateurs. Chaque processeur exécute un ensemble spécifique d’instructions qui correspond à sa marque ou son architecture.

Mais pourquoi donc vouloir apprendre les langages et la programmation de bas niveau ? On peut citer de nombreuses raisons :

  • Certaines parties de nos systèmes d’exploitation et même des virus sont écrits en assembleur.

  • Si vous souhaitez travailler dans le domaine de la programmation sur carte graphique (ou programmation GPU) à partir de langages de haut niveau comme CUDA ou OpenCL, vous devrez comprendre la programmation de bas niveau.

  • Si vous souhaitez améliorer votre connaissance de l’apprentissage automatique, vous pouvez optimiser votre code grâce aux langages assembleurs afin de gérer la mémoire efficacement.

  • Si vous souhaitez comprendre en détail le fonctionnement d’un système d’exploitation, connaître un assembleur vous sera utile. Le langage assembleur est généralement utilisé dans le code de démarrage d’un système – le code de bas niveau qui initialise et teste le matériel du système avant de lancer le système d’exploitation.

  • La rétro-ingénierie s’appuie sur le langage assembleur. De nombreux programmes sont uniquement diffusés en code machine, facile à traduire en langage assembleur grâce à un désassembleur, mais plus complexe à traduire dans un langage de plus haut niveau à partir d’un décompilateur.

Maintenant que nous avons compris comment et pourquoi étudier les langages de bas niveau, nous sommes prêts à en apprendre plus sur les langages de haut niveau.

Une pile de noms de langages de programmation
Une pile de noms de langages de programmation

Les langages de programmation de haut niveau

On sait que les ordinateurs comprennent le code binaire, mais nous ne le comprenons pas nous-mêmes – très peu de personnes comprennent le binaire dans le monde.

À la fin des années 1950, les utilisateurs d’ordinateurs (principalement des scientifiques et de grandes entreprises) devaient souvent écrire leurs programmes eux-mêmes. Inconvénient propre à l’époque, chaque entreprise ou laboratoire devait pouvoir compter sur une personne capable de programmer son ordinateur : le logiciel était créé pour un système informatique bien précis et donc impossible à vendre puisqu’il n’aurait été compatible avec aucun autre. L’invention des compilateurs a entraîné la mise au point de langages de programmation de haut niveau, des langages plus abstraits et plus faciles à comprendre.

Note

Un compilateur traduit un code écrit dans un certain langage de programmation dans un autre langage.

Les premiers langages de haut niveau développés dans les années 1950 ont été FORTRAN, COBOL et BASIC. Ils ont permis de décrire des programmes de façon abstraite, indépendamment des détails spécifiques de l’architecture matérielle de l’ordinateur. (Wolfram 2002).

Ces langages sont employés pour écrire des programmes, c’est-à-dire des ensembles d’instructions complets et fonctionnels à partir desquels les ordinateurs réalisent des tâches, par exemple : charger une page Web, générer des analyses statistiques ou déterminer la somme de deux nombres. Néanmoins, le code n’est pas reconnu directement par le processeur : il doit être compilé (pages en anglais) dans un langage de bas niveau.

Comme compiler de longs codes pouvait prendre beaucoup de temps, les programmeurs ont alors inventé les interpréteurs.

Note

Un interpréteur exécute directement des instructions écrites dans un langage de programmation sans qu’un compilateur ait à les compiler dans un programme de langage machine.

Certains langages de programmation emploient aussi bien des compilateurs que des interpréteurs. Si vous devez écrire un programme Java dans un éditeur de texte, quand vient le moment de le compiler à partir du compilateur Java, vous créez en réalité ce que l’on appelle un bytecode (terme anglais signifiant «code en octets»). On peut voir le bytecode comme une étape intermédiaire entre le code source et le code objet. Quand un ordinateur exécute un programme Java, les programmes de bibliothèque de la machine interprètent le bytecode. C’est ce qui permet à Java d’être indépendant de toute plateforme – les utilisateurs ont besoin des bibliothèques d’exécution correctes pour Java sur leur machine afin d’exécuter les programmes.

Quelles sont les différences entre langages de bas niveau et de haut niveau ?

La différence principale tient au fait que les programmeurs peuvent comprendre, interpréter ou compiler plus aisément le langage de haut niveau que le code machine. En revanche, les machines comprennent plus facilement le langage de bas niveau que les êtres humains. Voyons ensemble quelques différences supplémentaires:

Langage de haut niveau Langage de bas niveau
Langage adapté aux programmeurs Langage adapté aux machines
Un langage de haut niveau requiert plus d’espace mémoire Un langage de bas niveau est très efficace en termes de mémoire
Plus simple à déboguer Comparativement plus complexe à déboguer
Plus simple à maintenir Comparativement plus complexe à maintenir
PortableNon portable
Fonctionne sur toutes les plateformes Dépend de la machine
La traduction requiert un compilateur ou un interpréteur La traduction requiert un assembleur
Usage généralisé en programmation Peu utilisé aujourd’hui en programmation

Écrire son propre programme/logiciel

On appelle « génie logiciel » la discipline consacrée à la création de (produits) logiciels. Vous allez maintenant en apprendre plus sur le génie logiciel, puis sur les langages de programmation.

Qu’est-ce que le génie logiciel ?

Quand on pense à un logiciel, on imagine généralement une interface permettant d’utiliser un ordinateur (afin d’écrire un texte, par exemple). Le génie logiciel est un processus d’analyse des exigences des utilisateurs (les besoins de ceux qui souhaitent écrire un texte, par exemple) dont le but est de concevoir un produit logiciel pertinent. Il s’agit ensuite d’élaborer, de concevoir et de tester une application logicielle qui répond à ces besoins.

Exemple

Penchons-nous sur les différentes définitions du génie logiciel :

  • L’IEEE, dans sa norme 610.12-1990, définit le génie logiciel comme la mise en œuvre d’une approche systématique, rigoureuse et informatique du développement logiciel, de son exploitation et de sa maintenance.

  • Pour Fritz Bauer c’est «l’établissement de principes techniques standardisés utilisés. Il permet d’obtenir de façon rentable des logiciels fiables et efficaces fonctionnant sur des machines réelles».

  • Boehm explique que le génie logiciel concerne : «l’application pratique de connaissances scientifiques à l’élaboration et la conception de programmes informatiques. À quoi s’ajoute la documentation nécessaire à leur développement, leur exploitation et leur maintenance».

Le génie logiciel va-t-il au-delà de la programmation en tant que telle ?

Oui, car la création d’un logiciel comprend de nombreuses étapes, aussi bien avant qu’après la programmation. C’est ce que l’on appelle le cycle de vie du développement logiciel. Il est structuré selon une séquence d’étapes structurées qui rationalisent le processus de conception et de développement. Voilà les étapes :

  • Première phase : la communication. En règle générale, un client potentiel ayant besoin d’un logiciel fait une demande à un éditeur.

  • La collecte des besoins du client consiste à obtenir autant d’informations que possible sur ses exigences.

  • L’étude de faisabilité permet à l’équipe d’élaborer un plan schématique du processus de développement.

  • Puis, l’équipe analyse l’envergure du projet et prépare en conséquence un calendrier et les ressources nécessaires lors de la phase d’analyse des systèmes.

  • Pendant la conception du logiciel, l’équipe s’appuie sur les connaissances obtenues lors des phases de collecte des besoins et d’analyse afin de créer le produit logiciel.

  • La phase de codage ou de programmation s’amorce quand l’équipe commence à écrire le code du programme dans un langage de programmation pertinent. Elle développe ensuite efficacement des programmes exempts d’erreurs.

  • Grâce au test, on découvre puis résout des erreurs potentielles : c’est une partie essentielle du processus.

  • La phase d’intégration est nécessaire quand le logiciel doit être intégré à des entités externes, comme des bases de données ou d’autres programmes.

  • Une fois le logiciel au point, la mise en place correspond à la phase d’installation sur les machines des utilisateurs.

  • Les phases d’exploitation et de maintenance permettent de valider l’efficacité du logiciel dans la vie réelle. Le cas échéant, les erreurs sont identifiées et corrigées.

Développement en cascade ou agile

Les phases et activités du cycle de vie du développement logiciel peuvent être exécutées dans un ordre particulier selon différentes approches existantes. En outre, en fonction des approches, on accorde plus ou moins de temps à chaque phase du cycle de vie. Ces phases peuvent être conduites les unes après les autres – comme dans l’approche en cascade – ou répétées plusieurs fois selon une méthode qui privilégie une conception incrémentale du produit logiciel – comme c’est le cas de l’approche agile.

Une comparaison entre le développement agile et le développement en cascade
Une comparaison entre le développement agile et le développement en cascade

Les méthodes traditionnelles de développement logiciel emploient la méthode en cascade. Télécharger les mises à jour logicielles ou les installer automatiquement à partir d’Internet n’a pas toujours été possible. Le processus de développement en cascade a ainsi été conçu pour tenter de s’assurer que toutes les fonctionnalités nécessaires sont présentes et tous les problèmes identifiés et résolus au moment de l’envoi du logiciel au client, et ce jusqu’à la sortie de la version suivante du programme. Ce processus est très risqué et demande beaucoup de temps, car la phase de test du produit se déroule à la fin, donc après que les développeurs et les concepteurs ont passé un temps considérable à concevoir et construire le programme dans son intégralité. Ce type de processus de développement privilégie également l’efficacité technique sur l’expérience des utilisateurs finaux. Des problèmes non anticipés par les ingénieurs peuvent apparaître, synonymes de frustration pour les utilisateurs finaux qui ne sont pas impliqués dans le processus de développement après la phase initiale d’étude des besoins. La frustration générée peut résulter en une perte de clientèle. Des corrections onéreuses peuvent s’avérer nécessaires.

La méthode agile fait figure de bonne pratique actuelle en matière de développement logiciel. Elle met l’accent sur la collaboration entre équipes et clients et repose sur la planification, l’apprentissage et la communication. Elle mise sur une conception incrémentale du produit logiciel plutôt que sur une livraison en une fois à la fin du projet. Les utilisateurs finaux (les individus qui vont réellement utiliser le logiciel) sont au centre de la définition des besoins et des fonctionnalités. On leur demande de tester les améliorations incrémentales tout au long du projet. De cette façon, si une erreur devient apparente pendant la conception du produit, des ajustements peuvent être réalisés directement, avant la poursuite du développement. Découper le processus en étapes, puis tester et intégrer en continu les fonctionnalités, petit à petit, permet de répartir le risque de l’investissement dans le développement et d’accélérer la livraison du logiciel aux utilisateurs.

Maintenant que nous connaissons mieux le processus de création d’un logiciel, revenons au codage et aux langages de programmation.

Note

Comme vous le savez désormais, la plupart des programmes informatiques sont écrits dans un langage de programmation de haut niveau. On appelle « code source » la version directement lisible d’un programme. N’importe qui – aussi bien vous qu’un développeur – peut créer et éditer un code source dans un langage de haut niveau à l’aide d’un environnement de développement intégré (EDI) ou même d’un éditeur de texte basique (pages en anglais).

Qu’est-ce qu’un EDI ?

Un EDI, acronyme d’environnement de développement intégré, est une application utilisée par les développeurs pour créer des programmes informatiques. « Intégré » renvoie au fait que de multiples outils de développement sont combinés dans ce même programme. Un EDI inclut généralement un éditeur de code source, un débogueur et un compilateur. La plupart des EDI fournissent également une interface de gestion à partir de laquelle les programmeurs suivent en continu tous les fichiers d’un même projet. Nombre d’entre eux sont également dotés d’une fonctionnalité de gestion des versions succesives.

Certains EDI fournissent aussi un « environnement d’exécution » qui sert à tester les programmes. Lorsqu’un programme est exécuté avec l’environnement d’exécution, le développeur a la possibilité de suivre l’enchaînement des évènements sur l’application testée. Cela peut permettre de trouver et de résoudre des bogues et de localiser la source de possibles fuites de mémoire. Puisque les EDI fournissent une interface utilisateur centralisée destinée à écrire du code et tester les programmes, les programmeurs peuvent réaliser un petit changement, recompiler le programme et l’exécuter à nouveau. La programmation demande toujours aujourd’hui beaucoup de travail, mais les EDI contribuent à rationaliser le processus de développement.

Les programmeurs, les développeurs de logiciels, les développeurs Web (pages en anglais) et les autres professionnels utilisent un nombre incroyable de langages de programmation informatique. Mais combien en existe-t-il vraiment ?

D’après Wikipédia, il y aurait environ 700 langages de programmation – en comptant les langages de programmation exotiques. D’autres sources qui n’incluent que les langages les plus importants en comptent tout de même jusqu’à 245. L’HOPL qui affirme avoir listé tous les langages de programmation ayant jamais existé avance le nombre de 8 945. Certaines personnes estiment même qu’il en existerait jusqu’à 25 000 (pages en anglais).

Mais quel langage de programmation doit-on apprendre ? Et d’ailleurs, est-il possible d’apprendre à programmer ? La réponse est oui ! Vous pouvez et vous devriez apprendre à programmer, car un nombre croissant de métiers requièrent des compétences en la matière.

Grâce à Carlcheo (page en anglais), vous pouvez choisir un langage de programmation à partir d’un schéma bien pratique et accéder à des informations qui constituent un bon point de départ pour apprendre certains des langages cités.

  • Scratch est le langage que l’on recommande aux enfants. Une fois ce langage maîtrisé, il est possible de passer à Python (page en anglais).

  • Si vous voulez décrocher un poste chez Facebook ou Google, optez pour Python. De manière générale, Python est d’ailleurs une très bonne option, car on considère qu’il est relativement facile à apprendre.

  • Si vous souhaitez apprendre un langage réputé « simple », les développeurs vous conseilleront Python, Ruby et JavaScript. Grâce à ces langages, vous acquerrez des bases solides sur la logique et la syntaxe de la programmation. Une fois ces bases maîtrisées, les autres langages seront plus faciles à apprendre.

  • Si vous souhaitez développer des jeux, C++ est généralement le langage privilégié.

  • Pour encoder à un niveau relativement bas, choisissez C et C++, car ces langages sont généralement directement compilés dans le langage machine de la plateforme employée. En outre, l’écriture en C et C++ est assez proche de la plupart des codes machines (incrémentation de pointeurs, etc.). Dans ce domaine, on citera également un nouveau langage nommé Rust.

  • Si vous voulez travailler sur des projets pour iPhone sur iOS, choisissez Swift.

  • Pour des projets sur Android, optez pour Java ou Kotlin.

  • Si c’est la beauté des sites Web qui vous séduit, privilégiez les codes directement accessibles aux utilisateurs (le développement Web frontal ou front-end en anglais). Dans ce domaine, le langage de référence est JavaScript.

  • Si les serveurs (le développement de l’arrière-plan ou back-end en anglais) et les bases de données vous attirent, choisissez Ruby et Python.

  • Vous opterez soit pour le développement frontal soit pour le développement de l’arrière-plan si vous savez déjà quelle partie du stack technique vous intéresse.

Un dernier conseil: puisque vous avez le choix entre des centaines de langages, vous devriez avant tout vous poser deux questions principales avant de faire votre choix.

  • Qu’est-ce qui vous intéresse dans la programmation ?

  • Que souhaitez-vous programmer ?

Vous pouvez donner un nouveau souffle à votre carrière de nombreuses façons. Utiliser votre premier langage pour apprendre à penser comme les programmeurs et découvrir les fondamentaux de la logique de la programmation. Et n’oubliez pas que l’apprentissage tout au long de la vie est essentiel pour rester au fait des dernières tendances en matière de langage et de technologie.

Next section
III. Comprendre et utiliser des logiciels sur nos appareils