Article de reference

Programmation informatique

La programmation informatique ou codage est la composition de séquences d'instructions, appelées programmes , que les ordinateurs peuvent suivre pour effectuer des tâches. Elle ...

La programmation informatique ou codage est la composition de séquences d'instructions, appelées programmes , que les ordinateurs peuvent suivre pour effectuer des tâches. Elle implique la conception et la mise en œuvre d'algorithmes , de spécifications étape par étape de procédures, en écrivant du code dans un ou plusieurs langages de programmation . Les programmeurs utilisent généralement des langages de programmation de haut niveau qui sont plus facilement intelligibles pour les humains que le code machine , qui est directement exécuté par l' unité centrale de traitement . Une programmation compétente nécessite généralement une expertise dans plusieurs domaines différents, notamment la connaissance du domaine d'application , les détails des langages de programmation et des bibliothèques de codes génériques , les algorithmes spécialisés et la logique formelle .

Les tâches auxiliaires accompagnant et liées à la programmation comprennent l'analyse des exigences , les tests , le débogage (recherche et résolution des problèmes), la mise en œuvre de systèmes de construction et la gestion des artefacts dérivés , tels que le code machine des programmes . Bien que ces tâches soient parfois considérées comme de la programmation, le terme développement de logiciels est souvent utilisé pour ce processus global plus vaste, les termes programmation , implémentation et codage étant réservés à l'écriture et à l'édition de code en soi. Le développement de logiciels est parfois appelé ingénierie logicielle , en particulier lorsqu'il utilise des méthodes formelles ou suit un processus de conception technique .

Histoire

Ada Lovelace , dont les notes ont été ajoutées à la fin de l'article de Luigi Menabrea , a inclus le premier algorithme conçu pour le traitement par la machine analytique de Charles Babbage . Elle est souvent reconnue comme la première programmeuse informatique de l'histoire.

Les appareils programmables existent depuis des siècles. Dès le IXe siècle, un séquenceur musical programmable a été inventé par les frères persans Banu Musa , qui ont décrit un joueur de flûte mécanique automatisé dans le Livre des appareils ingénieux . En 1206, l'ingénieur arabe Al-Jazari a inventé une machine à rythmes programmable où un automate mécanique musical pouvait être amené à jouer différents rythmes et motifs de batterie, via des chevilles et des cames . En 1801, le métier à tisser Jacquard pouvait produire des tissages entièrement différents en changeant le « programme » – une série de cartes en carton perforées.

Les algorithmes de décryptage existent également depuis des siècles. Au IXe siècle, le mathématicien arabe Al-Kindi a décrit un algorithme cryptographique pour déchiffrer un code crypté, dans A Manuscript on Deciphering Cryptographic Messages . Il a donné la première description de la cryptanalyse par analyse de fréquence , le premier algorithme de décryptage de code.

Le premier programme informatique est généralement daté de 1843 lorsque la mathématicienne Ada Lovelace a publié un algorithme pour calculer une séquence de nombres de Bernoulli , destiné à être exécuté par la machine analytique de Charles Babbage . Cependant, Charles Babbage lui-même avait écrit un programme pour l'AE en 1837.

Les données et les instructions étaient autrefois stockées sur des cartes perforées externes , qui étaient conservées dans l'ordre et disposées dans des jeux de programmes.

Dans les années 1880, Herman Hollerith a inventé le concept de stockage de données sous une forme lisible par machine. Plus tard, un panneau de commande (carte de connexion) ajouté à sa tabulatrice de type I de 1906 lui a permis d'être programmé pour différentes tâches et, à la fin des années 1940, les équipements d'enregistrement d'unités tels que l' IBM 602 et l'IBM 604 ont été programmés par des panneaux de commande de manière similaire, tout comme les premiers ordinateurs électroniques . Cependant, avec le concept d' ordinateur à programme enregistré introduit en 1949, les programmes et les données ont été stockés et manipulés de la même manière dans la mémoire de l'ordinateur .

Langage machine

Le code machine était le langage des premiers programmes, écrit dans le jeu d'instructions de la machine concernée, souvent en notation binaire . Des langages d'assemblage ont rapidement été développés, permettant au programmeur de spécifier des instructions dans un format texte (par exemple, ADD X, TOTAL), avec des abréviations pour chaque code d'opération et des noms significatifs pour spécifier des adresses. Cependant, comme un langage d'assemblage n'est guère plus qu'une notation différente pour un langage machine, deux machines avec des jeux d'instructions différents ont également des langages d'assemblage différents.

Panneau de commande câblé pour une machine comptable IBM 402. Des câbles relient les flux d'impulsions du lecteur de cartes aux compteurs et autres logiques internes et, en fin de compte, à l'imprimante.

Langages de compilation

Les langages de haut niveau ont simplifié et rendu plus compréhensible le processus de développement d'un programme, et l'ont rendu moins lié au matériel sous-jacent . Le premier outil lié au compilateur, le système A-0 , a été développé en 1952 par Grace Hopper , qui a également inventé le terme « compilateur ». FORTRAN , le premier langage de haut niveau largement utilisé à avoir une implémentation fonctionnelle, est sorti en 1957, et de nombreux autres langages ont rapidement été développés, en particulier COBOL destiné au traitement de données commerciales et Lisp pour la recherche informatique.

Ces langages compilés permettent au programmeur d'écrire des programmes dans des termes syntaxiquement plus riches et plus capables d' abstraire le code, ce qui facilite le ciblage de différents jeux d'instructions machine via des déclarations de compilation et des heuristiques . Les compilateurs ont exploité la puissance des ordinateurs pour faciliter la programmation en permettant aux programmeurs de spécifier des calculs en saisissant une formule à l'aide de la notation infixe .

Entrée du code source

Les programmes étaient généralement saisis à l'aide de cartes perforées ou de bandes de papier . À la fin des années 1960, les périphériques de stockage de données et les terminaux informatiques sont devenus suffisamment bon marché pour que les programmes puissent être créés en tapant directement dans les ordinateurs. Des éditeurs de texte ont également été développés, permettant d'effectuer des modifications et des corrections beaucoup plus facilement qu'avec des cartes perforées .

Programmation moderne

Exigences de qualité

Quelle que soit l'approche de développement, le programme final doit satisfaire à certaines propriétés fondamentales. Les propriétés suivantes sont parmi les plus importantes :

  • Fiabilité : fréquence à laquelle les résultats d'un programme sont corrects. Cela dépend de l'exactitude conceptuelle des algorithmes et de la minimisation des erreurs de programmation, telles que les erreurs de gestion des ressources (par exemple, les dépassements de mémoire tampon et les conditions de concurrence ) et les erreurs logiques (telles que les erreurs de division par zéro ou les erreurs de décalage d'un octet ).
  • Robustesse : capacité d'un programme à anticiper les problèmes dus aux erreurs (et non aux bugs). Cela inclut des situations telles que des données incorrectes, inappropriées ou corrompues, l'indisponibilité des ressources nécessaires telles que la mémoire, les services du système d'exploitation et les connexions réseau, les erreurs de l'utilisateur et les pannes de courant inattendues.
  • Utilisabilité : ergonomie d'un programme : facilité avec laquelle une personne peut utiliser le programme pour l'usage prévu ou, dans certains cas, pour des usages imprévus. De tels aspects peuvent faire ou défaire son succès, même indépendamment d'autres aspects. Cela implique un large éventail d'éléments textuels, graphiques et parfois matériels qui améliorent la clarté, l'intuitivité, la cohésion et l'exhaustivité de l'interface utilisateur d'un programme.
  • Portabilité : ensemble des plateformes de matériel informatique et de système d'exploitation sur lesquelles le code source d'un programme peut être compilé / interprété et exécuté. Cela dépend des différences dans les fonctionnalités de programmation fournies par les différentes plateformes, notamment les ressources matérielles et du système d'exploitation, le comportement attendu du matériel et du système d'exploitation, et la disponibilité de compilateurs spécifiques à la plateforme (et parfois de bibliothèques) pour le langage du code source.
  • Maintenabilité : facilité avec laquelle un programme peut être modifié par ses développeurs actuels ou futurs afin d'y apporter des améliorations ou de le personnaliser, de corriger des bugs et des failles de sécurité , ou de l'adapter à de nouveaux environnements. Les bonnes pratiques lors du développement initial font la différence à cet égard. Cette qualité peut ne pas être directement apparente pour l'utilisateur final mais elle peut affecter de manière significative le sort d'un programme sur le long terme.
  • Efficacité / performance : mesure des ressources système consommées par un programme (temps processeur, espace mémoire, périphériques lents tels que les disques, bande passante réseau et dans une certaine mesure même interaction utilisateur) : moins il y en a, mieux c'est. Cela comprend également une gestion minutieuse des ressources, par exemple le nettoyage des fichiers temporaires et l'élimination des fuites de mémoire . Ce point est souvent évoqué sous l'angle du langage de programmation choisi. Bien que le langage affecte certainement les performances, même les langages plus lents, tels que Python , peuvent exécuter des programmes instantanément d'un point de vue humain. La vitesse, l'utilisation des ressources et les performances sont importantes pour les programmes qui engorgent le système, mais l'utilisation efficace du temps du programmeur est également importante et est liée au coût : plus de matériel peut être moins cher.

L’utilisation de tests automatisés et de fonctions de fitness peut aider à maintenir certains des attributs susmentionnés.

Lisibilité du code source

En programmation informatique, la lisibilité fait référence à la facilité avec laquelle un lecteur humain peut comprendre le but, le flux de contrôle et le fonctionnement du code source . Elle affecte les aspects de qualité ci-dessus, notamment la portabilité, la facilité d'utilisation et, surtout, la maintenabilité.

La lisibilité est importante car les programmeurs passent la majeure partie de leur temps à lire, essayer de comprendre, réutiliser et modifier le code source existant, plutôt qu'à écrire un nouveau code source. Un code illisible entraîne souvent des bugs, des inefficacités et du code dupliqué . Une étude a révélé que quelques simples transformations de lisibilité ont raccourci le code et réduit considérablement le temps nécessaire pour le comprendre.

Le respect d'un style de programmation cohérent contribue souvent à la lisibilité. Cependant, la lisibilité ne se limite pas au style de programmation. De nombreux facteurs, n'ayant que peu ou rien à voir avec la capacité de l'ordinateur à compiler et exécuter efficacement le code, contribuent à la lisibilité. Certains de ces facteurs incluent :

Les aspects de présentation (tels que les retraits, les sauts de ligne, la mise en évidence des couleurs, etc.) sont souvent gérés par l' éditeur de code source , mais les aspects de contenu reflètent le talent et les compétences du programmeur.

Différents langages de programmation visuelle ont également été développés dans le but de résoudre les problèmes de lisibilité en adoptant des approches non traditionnelles de la structure et de l'affichage du code. Les environnements de développement intégrés (IDE) visent à intégrer toutes ces aides. Des techniques comme le refactoring de code peuvent améliorer la lisibilité.

Complexité algorithmique

Le domaine universitaire et la pratique de l'ingénierie de la programmation informatique s'intéressent à la découverte et à la mise en œuvre des algorithmes les plus efficaces pour une classe donnée de problèmes. À cette fin, les algorithmes sont classés par ordre à l'aide de la notation Big O , qui exprime l'utilisation des ressources (comme le temps d'exécution ou la consommation de mémoire) en termes de taille d'une entrée. Les programmeurs experts connaissent une variété d'algorithmes bien établis et leurs complexités respectives et utilisent ces connaissances pour choisir les algorithmes les mieux adaptés aux circonstances.

Méthodologies

La première étape de la plupart des processus formels de développement de logiciels est l'analyse des exigences , suivie de tests pour déterminer la valeur, la modélisation, la mise en œuvre et l'élimination des échecs (débogage). Il existe de nombreuses approches différentes pour chacune de ces tâches. Une approche populaire pour l'analyse des exigences est l'analyse des cas d'utilisation . De nombreux programmeurs utilisent des formes de développement logiciel Agile où les différentes étapes du développement logiciel formel sont davantage intégrées dans des cycles courts qui prennent quelques semaines plutôt que des années. Il existe de nombreuses approches du processus de développement logiciel.

Les techniques de modélisation les plus courantes incluent l'analyse et la conception orientées objet ( OOAD ) et l'architecture pilotée par les modèles ( MDA ). Le langage de modélisation unifié ( UML ) est une notation utilisée pour l'OOAD et la MDA.

Une technique similaire utilisée pour la conception de bases de données est la modélisation entité-relation ( modélisation ER ).

Les techniques de mise en œuvre incluent les langages impératifs ( orientés objet ou procéduraux ), les langages fonctionnels et les langages de programmation logique .

Mesurer l’usage de la langue

Il est très difficile de déterminer quels sont les langages de programmation modernes les plus populaires. Les méthodes de mesure de la popularité des langages de programmation comprennent : le comptage du nombre d'offres d'emploi qui mentionnent le langage, le nombre de livres vendus et de cours enseignant le langage (cela surestime l'importance des langages plus récents) et les estimations du nombre de lignes de code existantes écrites dans le langage (cela sous-estime le nombre d'utilisateurs de langages commerciaux tels que COBOL).

Certains langages sont très populaires pour des types d'applications particuliers, tandis que d'autres sont régulièrement utilisés pour écrire de nombreux types d'applications différents. Par exemple, COBOL est toujours très utilisé dans les centres de données d'entreprise souvent sur de gros ordinateurs centraux , Fortran dans les applications d'ingénierie, les langages de script dans le développement Web et C dans les logiciels embarqués . De nombreuses applications utilisent un mélange de plusieurs langages dans leur construction et leur utilisation. Les nouveaux langages sont généralement conçus autour de la syntaxe d'un langage précédent avec de nouvelles fonctionnalités ajoutées (par exemple, C++ ajoute l'orientation objet au C, et Java ajoute la gestion de la mémoire et le bytecode au C++, mais en conséquence, perd en efficacité et en capacité de manipulation de bas niveau).

Débogage

Le premier bug connu causant un problème dans un ordinateur était un papillon de nuit, piégé à l'intérieur d'un ordinateur central de Harvard, enregistré dans une entrée du journal de bord datée du 9 septembre 1947. « Bug » était déjà un terme courant pour un défaut de logiciel lorsque cet insecte a été découvert.

Le débogage est une tâche très importante dans le processus de développement logiciel, car la présence de défauts dans un programme peut avoir des conséquences importantes pour ses utilisateurs. Certains langages sont plus sujets à certains types de défauts, car leur spécification n'exige pas que les compilateurs effectuent autant de vérifications que d'autres langages. L'utilisation d'un outil d'analyse de code statique peut aider à détecter certains problèmes possibles. Normalement, la première étape du débogage consiste à tenter de reproduire le problème. Cela peut être une tâche non triviale, par exemple dans le cas de processus parallèles ou de certains bogues logiciels inhabituels. De plus, l'environnement utilisateur spécifique et l'historique d'utilisation peuvent rendre difficile la reproduction du problème.

Une fois le bug reproduit, il peut être nécessaire de simplifier l'entrée du programme pour faciliter le débogage. Par exemple, lorsqu'un bug dans un compilateur peut provoquer un plantage lors de l'analyse d'un fichier source volumineux, une simplification du cas de test qui ne génère que quelques lignes du fichier source d'origine peut suffire à reproduire le même plantage. Il faut procéder par essais et erreurs/diviser pour mieux régner : le programmeur essaiera de supprimer certaines parties du cas de test d'origine et vérifiera si le problème existe toujours. Lors du débogage du problème dans une interface utilisateur graphique, le programmeur peut essayer d'ignorer certaines interactions de l'utilisateur de la description du problème d'origine et vérifier si les actions restantes sont suffisantes pour que les bugs apparaissent. Les scripts et les points d'arrêt font également partie de ce processus.

Le débogage est souvent effectué à l'aide d'IDE . Des débogueurs autonomes comme GDB sont également utilisés, et ceux-ci fournissent souvent un environnement moins visuel, utilisant généralement une ligne de commande . Certains éditeurs de texte comme Emacs permettent d'invoquer GDB via eux, pour fournir un environnement visuel.

Langages de programmation

Différents langages de programmation prennent en charge différents styles de programmation (appelés paradigmes de programmation ). Le choix du langage utilisé est soumis à de nombreuses considérations, telles que la politique de l'entreprise, l'adéquation à la tâche, la disponibilité de packages tiers ou les préférences individuelles. Idéalement, le langage de programmation le mieux adapté à la tâche à accomplir sera sélectionné. Les compromis par rapport à cet idéal impliquent de trouver suffisamment de programmeurs connaissant le langage pour constituer une équipe, la disponibilité de compilateurs pour ce langage et l'efficacité avec laquelle les programmes écrits dans un langage donné s'exécutent. Les langages forment un spectre approximatif allant du « bas niveau » au « haut niveau » ; les langages de « bas niveau » sont généralement plus orientés machine et plus rapides à exécuter, tandis que les langages de « haut niveau » sont plus abstraits et plus faciles à utiliser mais s'exécutent moins rapidement. Il est généralement plus facile de coder dans des langages de « haut niveau » que dans des langages de « bas niveau ». Les langages de programmation sont essentiels au développement de logiciels. Ils sont les éléments de base de tous les logiciels, des applications les plus simples aux plus sophistiquées.

Allen Downey , dans son livre Comment penser comme un informaticien , écrit :

Les détails semblent différents selon les langues, mais quelques instructions de base apparaissent dans presque toutes les langues :
  • Entrée : Collecter des données à partir du clavier, d'un fichier ou d'un autre appareil.
  • Sortie : affichez les données sur l'écran ou envoyez les données vers un fichier ou un autre périphérique.
  • Arithmétique : Effectuer des opérations arithmétiques de base comme l’addition et la multiplication.
  • Exécution conditionnelle : vérifiez certaines conditions et exécutez la séquence d'instructions appropriée.
  • Répétition : Effectuer une action de manière répétée, généralement avec quelques variations.

De nombreux langages informatiques proposent un mécanisme permettant d'appeler des fonctions fournies par des bibliothèques partagées . À condition que les fonctions d'une bibliothèque respectent les conventions d'exécution appropriées (par exemple, la méthode de transmission des arguments ), ces fonctions peuvent être écrites dans n'importe quel autre langage.

Programmeurs

Les programmeurs informatiques sont ceux qui écrivent des logiciels informatiques. Leur travail consiste généralement à :

Bien que la programmation ait été présentée dans les médias comme une matière quelque peu mathématique, certaines recherches montrent que les bons programmeurs ont de solides compétences dans les langues humaines naturelles et qu'apprendre à coder est similaire à apprendre une langue étrangère .

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index