
La programmation informatique dĂ©signe lâensemble des activitĂ©s liĂ©es Ă la conception, lâĂ©criture, le test et la maintenance de programmes informatiques Ă lâaide de langages de programmation. CompĂ©tence centrale de lâingĂ©nierie contemporaine, elle intervient dans le dĂ©veloppement de logiciels, dâapplications, de systĂšmes dâexploitation et de dispositifs numĂ©riques au cĆur de tous les secteurs de la sociĂ©tĂ©.
L'Ă©criture d'un programme se fait dans un langage de programmation. Un logiciel est un ensemble de programmes (qui peuvent ĂȘtre Ă©crits dans des langages de programmation diffĂ©rents) destinĂ© Ă la rĂ©alisation de certaines tĂąches par un (ou plusieurs) utilisateurs du logiciel.
La programmation représente donc ici la rédaction du code source d'un logiciel. On utilise plutÎt le terme développement pour dénoter l'ensemble des activités liées à la création d'un logiciel et des programmes qui le composent. Cela inclut la spécification du logiciel, sa conception, puis son implémentation proprement dite au sens de l'écriture des programmes dans un langage de programmation bien défini, ainsi que la vérification de sa correction, etc.
Longtemps perçue comme un simple instrument technique, la programmation est dĂ©sormais reconnue comme une pratique culturellement et socialement signifiante. Elle façonne nos usages numĂ©riques, nos modes de communication et jusquâĂ nos structures sociales et Ă©conomiques. Des chercheurs comme Lev Manovich[1] ou Shoshana Zuboff[2] ont mis en lumiĂšre le rĂŽle structurant du logiciel dans notre culture numĂ©rique contemporaine et les rapports de pouvoir qui en Ă©mergent.
La programmation nâest pas neutre : elle implique des choix techniques et Ă©thiques pouvant renforcer ou attĂ©nuer des biais algorithmiques, comme lâont montrĂ© Joy Buolamwini et Timnit Gebru dans lâĂ©tude Gender Shades[3]. Elle est aussi au cĆur des dĂ©bats sur lâinclusion dans les mĂ©tiers du numĂ©rique, documentĂ©s notamment par Mar Hicks[4] ou Janet Abbate[5].
Enfin, elle sâinscrit dans des dynamiques sociales vivantes : communautĂ©s open source, plateformes coopĂ©ratives comme GitHub, ou initiatives Ă©ducatives visant Ă dĂ©mocratiser lâapprentissage du code. Lâanthropologue Gabriella Coleman[6] y voit une Ă©thique du partage et de la libertĂ© façonnĂ©e par les dĂ©veloppeurs eux-mĂȘmes.
Histoire
[modifier | modifier le code]La premiĂšre machine programmable (câest-Ă -dire machine dont les possibilitĂ©s changent quand on modifie son programme) est probablement le mĂ©tier Ă tisser de Jacquard, qui a Ă©tĂ© rĂ©alisĂ© en 1801. La machine utilisait une suite de cartons perforĂ©s. Les trous indiquaient le motif que le mĂ©tier suivait pour rĂ©aliser un tissage ; avec des cartes diffĂ©rentes le mĂ©tier produisait des tissages diffĂ©rents[7]. Cette innovation a Ă©tĂ© ensuite amĂ©liorĂ©e par Herman Hollerith d'IBM pour le dĂ©veloppement de la fameuse carte perforĂ©e d'IBM[8].
En 1937, la publication de l'article fondateur de la science informatique On Computable Numbers with an Application to the Entscheidungsproblem[9] par Alan Turing allait donner le coup d'envoi à la création de l'ordinateur programmable. Il y présente sa machine de Turing, le premier calculateur universel programmable, et invente les concepts et les termes de programmation et de programme.
Les premiers programmes d'ordinateur Ă©taient rĂ©alisĂ©s avec un fer Ă souder et un grand nombre de tubes Ă vide (plus tard, des transistors). Les programmes devenant plus complexes, cela est devenu presque impossible, parce qu'une seule erreur rendait le programme entier inutilisable. Avec les progrĂšs des supports de donnĂ©es, il devint possible de charger le programme Ă partir de cartes perforĂ©es, contenant la liste des instructions en code binaire spĂ©cifique Ă un type d'ordinateur particulier. La puissance des ordinateurs augmentant, on les utilisa pour faire les programmes, les programmeurs prĂ©fĂ©rant naturellement rĂ©diger du texte plutĂŽt que des suites de 0 et de 1, Ă charge pour l'ordinateur d'en faire la traduction lui-mĂȘme.
Les origines de la programmation informatique remontent bien avant lâĂšre contemporaine des algorithmes. Le premier algorithme qui fut Ă©crit pour une machine a Ă©tĂ© Ă©crit par Ada Lovelace en 1843 pour la machine analytique de Charles Babbage. Elle est aujourdâhui considĂ©rĂ©e comme la premiĂšre programmeuse de lâhistoire. Dans le XXe siĂšcle, au cours de la Seconde Guerre mondiale, la programmation prend une forme plus concrĂšte et appliquĂ©e. Un des meilleurs exemples est celui des programmeuses de l'ENIAC, un groupe composĂ© de six femmes qui furent chargĂ©es de la programmation du premier ordinateur Ă©lectronique Ă usage gĂ©nĂ©ral. Alors que leur rĂŽle a Ă©tĂ© longtemps nĂ©gligĂ©, des Ă©tudes telles que celles de Janet Abbate[5] ou de Mar Hicks[4] ont permis de redĂ©couvrir le rĂŽle moteur jouĂ© par les femmes dans les origines de l'informatique. Jusque dans les annĂ©es 1960, la programmation Ă©tait gĂ©nĂ©ralement considĂ©rĂ©e comme une activitĂ© administrative ou secondaire, dominĂ©e par les femmes. Ă mesure que la programmation gagnait en prestige, les femmes en ont Ă©tĂ© progressivement Ă©cartĂ©es. Mar Hicks[4] montre comment, au Royaume-Uni, la profession a Ă©tĂ© dĂ©libĂ©rĂ©ment masculinisĂ©e, Ă©cartant les femmes au profit d'une vision technocratique et Ă©litiste de l'informatique. Les annĂ©es 1970 et 1980 ont vu l'Ă©mergence des premiers langages structurĂ©s (tels que C ou Pascal) et de paradigmes de programmation tels que la programmation orientĂ©e objet. Cette pĂ©riode marque aussi lâessor des communs numĂ©riques, avec le dĂ©but du mouvement open source, qui deviendra central dans les annĂ©es 1990. Le travail de Christopher Kelty[10] et Gabriella Coleman[6] met en lumiĂšre l'importance socioculturelle des communautĂ©s de dĂ©veloppeurs dans cette pĂ©riode de transition.
Avec le temps, de nouveaux langages de programmation sont apparus, faisant de plus en plus abstraction du matériel sur lequel devraient tourner les programmes. Ceci apporte plusieurs facteurs de gain : ces langages sont plus faciles à apprendre, un programmeur peut produire du code plus rapidement, et les programmes produits peuvent tourner sur différents types de machines.
Enfin, Ă partir des annĂ©es 2010, les rĂ©flexions Ă©thiques sur les algorithmes et l'intelligence artificielle sont devenues centrales. Des chercheuses comme Joy Buolamwini et Timnit Gebru ont dĂ©montrĂ©, dans l'Ă©tude Gender Shades[3], que certains systĂšmes d'IA prĂ©sentaient des biais importants envers les femmes et les personnes racisĂ©es. Cette conscience a reprĂ©sentĂ© un nouveau repĂšre dans l'histoire de la programmation : celui de la responsabilisation des codeurs et de la prise en compte de l'impact social de leurs Ćuvres.
Différents langages de programmation
[modifier | modifier le code]Exemple de programme
[modifier | modifier le code]L'immense majoritĂ© des programmes qui s'exĂ©cutent sur nos ordinateurs, tĂ©lĂ©phones et autres outils Ă©lectroniques sont Ă©crits dans des langages de programmation dits impĂ©ratifs : les lignes du programme sont exĂ©cutĂ©es les unes aprĂšs les autres. Chaque ligne du programme effectue soit une opĂ©ration simple, soit exĂ©cute une fonction qui est elle-mĂȘme une suite d'opĂ©rations simples.
Le programme « Hello World! » est par tradition le premier programme Ă©crit par tout programmeur, censĂ© illustrer la syntaxe du langage de programmation. Le programme a pour unique fonction d'afficher le texte "Hello World!" dans la console ou dans une fenĂȘtre de l'interface graphique.
Voici une version d'un programme « Hello World! »:

Le programme suivant écrit en langage simplifié et avec des commentaires, demande simplement à l'utilisateur d'entrer au clavier deux nombres entiers, et affiche leur quotient.
void main() { // fonction 'main' : c'est toujours ici qu'un programme commence
// 'int' signifie integer : nombre entier en anglais
int A, B; // on déclare deux variables A et B qui sont des nombres entiers
WriteLine("entrez deux entiers : "); // 'WriteLine' permet d'écrire à l'écran
A = ReadIntFromKeyboard(); // on attend que l'utilisateur tape un entier au clavier,
// et on l'enregistre dans A
B = ReadIntFromKeyboard(); // puis on fait la mĂȘme chose pour B
if (B == 0) { // si B est égal à 0
WriteLine("erreur : division par zéro");
} else { // sinon
float C = CalculerDivision(A,B); // on exécute la fonction 'CalculerDivision'
// que l'on a programmée ci-dessous,
// et on enregistre le résultat dans C qui est un 'float' : un nombre à virgule
WriteLine("le résultat est : " + C); // on affiche C
}
}
float CalculerDivision(float U, float V) { // U et V sont les paramĂštres de notre fonction 'CalculerDivision' : ce sont des nombres Ă virgules (float).
// et celle-ci renvoie un 'float' : un nombre Ă virgule flottante
// dans la fonction 'main', A et B étaient des nombres entiers,
// U et V sont des copies des valeurs de A et B,
// et qui ont été converties en nombres à virgule (22 deviendrait simplement 22.0000000)
float Resultat;
Resultat = U / V; // on effectue la division
return Resultat; /// on renvoie le résultat
}
Dans ce programme, les principales fonctionnalités de la programmation impérative sont utilisées : des variables de type nombre entier, nombre à virgule, chaßne de caractÚres, fonction calculant un résultat à partir de paramÚtres, fonction effectuant une tùche telle qu'afficher un message à l'écran, instruction if permettant d'exécuter un code ou un autre en fonction de la valeur de telle ou telle variable.
Dans un programme informatique typique, on trouvera suivant les langages des boucles while ou for qui permettent d'exécuter un morceau de code en boucle ou simplement un certain nombre de fois, des new pour l'allocation dynamique de données (par exemple des tableaux), et trÚs souvent des éléments de programmation objet permettant de structurer différemment le code et de créer des types de données personnalisés, ou encore des exceptions pour gérer certains cas d'erreurs plus facilement.
On remarque que pour effectuer une tĂąche trĂšs simple, le code informatique peut ĂȘtre trĂšs laborieux, et encore ici on ne traite pas les erreurs (si l'utilisateur tape un mot au lieu d'un nombre), et l'affichage est minimaliste. C'est pourquoi les langages de programmation n'ont jamais cessĂ© d'Ă©voluer, dans le but d'aider le programmeur qui souhaite rĂ©aliser des programmes rapides Ă s'exĂ©cuter, sans dysfonctionnements, et surtout simples Ă Ă©crire, du moins le plus possible.
Développement Logiciel
[modifier | modifier le code]Il est aussi focalisĂ© sur le rĂŽle des communautĂ©s en ligne (Stack Overflow, Reddit, forums d'utilisateurs spĂ©cialisĂ©s). Elles favorisent lâentraide, la transmission du savoir et la construction dâune culture professionnelle partagĂ©e. Selon Gabriella Coleman[6], ces communautĂ©s bĂątissent une Ă©thique propre aux dĂ©veloppeurs, centrĂ©e sur l'autonomie, la transparence et la crĂ©ation libre. Le dĂ©veloppement logiciel est Ă©galement influencĂ© par des enjeux sociaux et culturels. Les pratiques de dĂ©veloppement sont souvent le reflet de relations de pouvoir, de normes implicites ou d'exclusions : par exemple, la sous-reprĂ©sentation des femmes et des minoritĂ©s dans les Ă©quipes de dĂ©veloppement est un problĂšme structurel, attestĂ© entre autres par Mar Hicks[4]. Des initiatives telles que les programmes de diversitĂ© dans la tech ou les projets d'inclusion open source cherchent Ă diminuer ces Ă©carts.
Aspects sociaux et culturels
[modifier | modifier le code]Bien que souvent perçue comme une activitĂ© purement technique, la programmation informatique sâinscrit dans des dynamiques sociales, culturelles, Ă©conomiques et politiques complexes. Elle influence la sociĂ©tĂ© tout autant quâelle en est le produit. Plusieurs courants en sciences humaines et sociales, tels que les sciences and technology studies (STS), les humanitĂ©s numĂ©riques ou la sociologie de lâinformatique, permettent de mieux comprendre ces dimensions.
1. Ăvolution sociale du mĂ©tier et inclusion Historiquement, la programmation a tout d'abord Ă©tĂ© un travail fĂ©minisĂ©, avant d'ĂȘtre Ă la majoritĂ© masculine Ă partir du moment oĂč son prestige est devenu important. Mar Hicks[4], dĂ©crit la maniĂšre selon laquelle les femmes ont lentement Ă©tĂ© effacĂ©es de leur carriĂšre informatique au Royaume-Uni. Janet Abbate[5], trace Ă©galement le processus dans l'Ă©mergence du rĂŽle des femmes dans l'avĂšnement des premiers programmes aux Ătats-Unis.
2. Biais éthiques et algorithmiques Les logiciels ne sont pas neutres : décisions prises lors de leur conception peuvent entraßner des formes de discrimination. Quelques études, comme Gender Shades[3], ont démontré que les systÚmes faciaux de reconnaissance étaient bien moins précis sur les femmes et les personnes racisées. Cathy O'Neil[11], met en lumiÚre qu'ils ont la capacité d'exacerber les inégalités sociales.
3. Open source communautĂ©s et apprentissage collectif La programmation est aussi inscrite dans des dynamiques communautaires. Des millions de dĂ©veloppeurs partagent des savoirs, collaborent Ă des projets collectifs et rĂ©duisent des standards sur des plateformes comme GitHub, Stack Overflow ou Reddit. Gabriella Coleman, dans Coding Freedom (2013)[6], dĂ©crivant ces communautĂ©s, les dĂ©crit comme des lieux oĂč se forgent des identitĂ©s, des valeurs Ă©thiques et des formes de rĂ©sistance Ă l'Ă©conomie propriĂ©taire.
4. Platform power and digital capitalism Les grandes entreprises du numérique dominent de plus en plus les activités logicielles. Shoshana Zuboff décrit dans The Age of Surveillance Capitalism[2] comment ces acteurs utilisent les informations personnelles dans des espaces logiciels diffusés partout. Nick Srnicek explore dans Platform Capitalism[12] les régimes économiques basés sur l'exploitation algorithmique.
5. Programmation et culture digitale Le code est également un vecteur culturel employé dans l'art génératif, le design interactif ou la musique numérique. Lev Manovich, dans Software Takes Command[1], propose une lecture de la culture contemporaine modelée par les logiciels. Casey Reas et Ben Fry, programmeurs de "Processing: A Programming Handbook for Visual Designers and Artists"[13], ont démocratisé le code en outil artistique.
Phases
[modifier | modifier le code]Conception
[modifier | modifier le code]La phase de conception dĂ©finit le but du programme. Si on fait une rapide analyse fonctionnelle d'un programme, on dĂ©termine essentiellement les donnĂ©es qu'il va traiter (donnĂ©es d'entrĂ©e), la mĂ©thode employĂ©e (appelĂ©e l'algorithme), et le rĂ©sultat (donnĂ©es de sortie). Les donnĂ©es d'entrĂ©e et de sortie peuvent ĂȘtre de nature trĂšs diverse. On peut dĂ©crire la mĂ©thode employĂ©e pour accomplir le but d'un programme Ă l'aide d'un algorithme. La programmation procĂ©durale et fonctionnelle est basĂ©e sur l'algorithmique. On retrouve en gĂ©nĂ©ral les mĂȘmes fonctionnalitĂ©s de base. On peut donc considĂ©rer que la programmation est le processus de traduction d'un algorithmique en un programme qui exĂ©cute cet algorithmique. Il existe deux mĂ©thodes principales pour concevoir un programme. La conception algorithmique consiste Ă construire le programme autour de l'algorithme qui est censĂ© permettre d'obtenir le bon rĂ©sultat. La conception procĂ©durale consiste Ă trouver une suite d'actions Ă rĂ©aliser pour arriver au but. La conception procĂ©durale est la plus utilisĂ©e. Lorsque le but est connu et que la mĂ©thode pour arriver au but est claire, on entre dans la conception dĂ©taillĂ©e. La conception dĂ©taillĂ©e est la spĂ©cification des donnĂ©es d'entrĂ©e, du rĂ©sultat Ă obtenir, et l'algorithme avec toutes les instructions nĂ©cessaires.
Programmation impérative
[modifier | modifier le code]- "Si"
Si prédicatAlors faire ceciSinon faire cela
- "Tant que"
Tant que prédicatFaire ...
- "Pour"
Pour variable allant de borne inférieure à borne supérieureFaire ...
- "Pour" (variante)
Pour variable dans conteneurfaire ...
Implémentation
[modifier | modifier le code]Une fois l'algorithme défini, l'étape suivante est de coder le programme. Le codage dépend de l'architecture sur laquelle va s'exécuter le programme, de compromis temps-mémoire, et d'autres contraintes. Ces contraintes vont déterminer quel langage de programmation utiliser pour « convertir » l'algorithme en code source.
Transformation du code source
[modifier | modifier le code]Le code source n'est (presque) jamais utilisable tel quel. Il est généralement écrit dans un langage "de haut niveau", compréhensible pour l'homme, mais pas pour la machine.
Compilation
[modifier | modifier le code]Certains langages sont ce qu'on appelle des langages compilés. En toute généralité, la compilation est l'opération qui consiste à transformer un langage source en un langage cible. Dans le cas d'un programme, le compilateur va transformer tout le texte représentant le code source du programme, en code compréhensible pour la machine, appelé code machine.
Dans le cas de langages dits compilĂ©s, ce qui est exĂ©cutĂ© est le rĂ©sultat de la compilation. Une fois effectuĂ©e, l'exĂ©cutable obtenu peut ĂȘtre utilisĂ© sans le code source.
Il faut Ă©galement noter que le rĂ©sultat de la compilation n'est pas forcĂ©ment du code machine correspondant Ă la machine rĂ©elle, mais peut ĂȘtre du code compris par une machine virtuelle (c'est-Ă -dire un programme simulant une machine), auquel cas on parlera de bytecode. C'est par exemple le cas en Java. L'avantage est que, de cette façon, un programme peut fonctionner sur n'importe quelle machine rĂ©elle, du moment que la machine virtuelle existe pour celle-ci.
Dans le cas d'une requĂȘte SQL, la requĂȘte est compilĂ©e en une expression utilisant les opĂ©rateurs de l'algĂšbre relationnelle. C'est cette expression qui est Ă©valuĂ©e par le systĂšme de gestion de bases de donnĂ©es.
Interprétation
[modifier | modifier le code]D'autres langages ne nĂ©cessitent pas de phase spĂ©ciale de compilation. La mĂ©thode employĂ©e pour exĂ©cuter le programme est alors diffĂ©rente. La phase de compilation est la plupart du temps incluse dans celle dâexĂ©cution. On dit de ce programme qu'il interprĂšte le code source. Par exemple, Python ou Perl sont des langages interprĂ©tĂ©s.
Avantages, inconvénients
[modifier | modifier le code]Les avantages gĂ©nĂ©ralement retenus pour l'utilisation de langages « compilĂ©s », est qu'ils sont plus rapides Ă l'exĂ©cution que des langages interprĂ©tĂ©s, car l'interprĂšte doit ĂȘtre lancĂ© Ă chaque exĂ©cution du programme, ce qui mobilise systĂ©matiquement les ressources.
Traditionnellement, les langages interprĂ©tĂ©s offrent en revanche une certaine portabilitĂ© (la capacitĂ© Ă utiliser le code source sur diffĂ©rentes plates-formes), ainsi qu'une facilitĂ© pour l'Ă©criture du code. En effet, il n'est pas nĂ©cessaire de passer par la phase de compilation pour tester le code source. Il n'est pas non plus nĂ©cessaire de disposer d'un autre programme (debugger) afin dâĂŽter les bugs du programme, c'est lâinterprĂ©teur qui permet d'afficher directement le contenu des variables du programme.
Appellation impropre
[modifier | modifier le code]Il faut noter qu'on parle abusivement de langages compilĂ©s ou interprĂ©tĂ©s. En effet, le caractĂšre compilĂ© ou interprĂ©tĂ© ne dĂ©pend pas du langage, qui n'est finalement qu'une grammaire et une certaine sĂ©mantique. D'ailleurs, certains langages peuvent ĂȘtre utilisĂ©s interprĂ©tĂ©s ou compilĂ©s. Par exemple, il est trĂšs courant d'utiliser Ruby avec un interprĂšte, mais il existe Ă©galement des compilateurs pour ce langage[14]. On notera toutefois, qu'il peut ĂȘtre important de prĂ©ciser comment le code source est exĂ©cutĂ©. En effet, rares sont les organismes qui proposent Ă la fois un compilateur et un interprĂ©teur, les rĂ©sultats du programme peuvent diffĂ©rer Ă l'exĂ©cution, mĂȘme si la norme du langage est clairement dĂ©finie.
Néanmoins, l'usage qu'on fait des langages est généralement fixé.
Test du programme
[modifier | modifier le code]C'est l'une des étapes les plus importantes de la création d'un programme. En principe, tout programmeur se doit de vérifier chaque partie d'un programme, de le tester. Il existe différents types de test. On peut citer en particulier :
Il convient de noter qu'il est parfois possible de vérifier un programme informatique, c'est-à -dire prouver, de maniÚre plus ou moins automatique, qu'il assure certaines propriétés.
Pratiques
[modifier | modifier le code]- Algorithmique
- Gestion de versions
- Optimisation de code
- Programmation systĂšme
- Refactoring
- Test d'intégration
- Test unitaire
Paradigmes
[modifier | modifier le code]Un paradigme est un style fondamental de programmation, dĂ©finissant la maniĂšre dont les programmes doivent ĂȘtre formulĂ©s.
Un paradigme est la façon dont sont traitĂ©es les solutions aux problĂšmes et un style fondamental de programmation, dĂ©finissant la maniĂšre dont les programmes doivent ĂȘtre formulĂ©s. Chaque paradigme amĂšne sa philosophie de la programmation ; une fois qu'une solution a Ă©tĂ© imaginĂ©e par un programmeur selon un certain paradigme, un langage de programmation qui suit ce paradigme permettra de l'exprimer.
Programmation impérative
[modifier | modifier le code]Le paradigme impĂ©ratif est le plus rĂ©pandu, les opĂ©rations sont une suite dâinstructions exĂ©cutĂ©es par l'ordinateur pour modifier l'Ă©tat du programme.
Programmation procédurale
[modifier | modifier le code]La programmation procĂ©durale est un sous-ensemble de la programmation impĂ©rative. Elle introduit la notion de routine ou fonction qui est une sorte de factorisation de code, chaque procĂ©dure peut ĂȘtre appelĂ©e Ă nâimporte quelle Ă©tape du programme. Ce paradigme permet aussi de supprimer les instructions goto[15],[16],[17]
Ce paradigme est trÚs répandu, il est présent dans des langages comme le C, le COBOL ou le FORTRAN.
Programmation structurée
[modifier | modifier le code]Apparue dans les annĂ©es 70, la programmation structurĂ©e est un sous-ensemble de la programmation impĂ©rative. Elle est nĂ©e avec les travaux de Nicklaus Wirth pour son Algol W et l'article fondateur de Dijkstra dans Communications of the ACM, visant Ă supprimer lâinstruction goto.
Tous les langages procĂ©duraux peuvent faire de la programmation structurĂ©e, mais certains comme le FORTRAN s'y prĂȘtent trĂšs mal.
Programmation déclarative
[modifier | modifier le code]En programmation dĂ©clarative, le programme est indĂ©pendant de lâĂ©tat de la machine, il sâaffranchit donc de tout effet de bord et un appel Ă une mĂȘme fonction produira toujours le mĂȘme rĂ©sultat.
Le programme sâĂ©crit non pas comme une suite dâinstruction pour rĂ©soudre un problĂšme mais (contrairement Ă la programmation impĂ©rative) comme la solution au problĂšme.
Programmation fonctionnelle
[modifier | modifier le code]La programmation fonctionnelle se base sur plusieurs principes comme : lâimmutabilitĂ©, les fonctions pures (qui ne dĂ©pendent pas de lâĂ©tat de la machine) et les lambda-calcul.
Aujourdâhui, nombreux sont les langages qui offrent une approche fonctionnelle au programmeur. Certains comme LISP ou Scala sont intrinsĂšquement fonctionnels. Dâautres comme JavaScript, Java ou PHP ont ajoutĂ© cette possibilitĂ© par la suite.
Programmation logique
[modifier | modifier le code]La programmation logique consiste Ă exprimer les problĂšmes et les algorithmes sous forme de prĂ©dicats Ă lâaide d'une base de faits, d'une base de rĂšgles et d'un moteur d'infĂ©rence.
Programmation orientée objet
[modifier | modifier le code]La programmation orientée objet (abrégé POO) consiste en la définition et l'interaction de briques logicielles appelées objets ; ces objets représentent un concept, une idée. Chaque objet contient des attributs et des méthodes en rapport avec un sujet.
Programmation orientée prototype
[modifier | modifier le code]La programmation orientĂ©e prototype est un sous ensemble de la programmation orientĂ©e objet. Dans ce paradigme, chaque objet est créé Ă partir dâun prototype qui est lui-mĂȘme un objet. Le prototype a donc une existence physique en mĂ©moire et est mutable contrairement aux classes.
Le JavaScript, le Lua ou le Self sont des exemples de langages utilisant ce paradigme.
Programmation orientée classe
[modifier | modifier le code]La programmation orientĂ©e classe est basĂ©e sur la notion de classes. Une classe est statique, câest la reprĂ©sentation abstraite de lâobjet, câest Ă ce niveau que se passe lâhĂ©ritage. Tout objet est donc lâinstance dâune classe.
Les langages Ă classes peuvent ĂȘtre sous forme fonctionnelle (CLOS) comme sous forme impĂ©rative (C++, Java), voir les deux (Python, OCaml).
Autres paradigmes
[modifier | modifier le code]- Programmation concurrente
- Programmation orientée aspect
- Programmation orientée composant
- Programmation par contrat
- Programmation par contraintes
- Programmation par intention
- Programmation réactive
Notes et références
[modifier | modifier le code]- Lev Manovich, Software Takes Command, Bloomsbury Academic, , 272 p. (ISBN 9781623566722, lire en ligne).
- Shoshana Zuboff, The Age of Surveillance Capitalism, PublicAffairs, , 704 p. (ISBN 9781610395700, lire en ligne).
- Joy Buolamwini et Timnit Gebru, « Gender Shades: Intersectional Accuracy Disparities in Commercial Gender Classification », Conference on Fairness, Accountability and Transparency,â (lire en ligne).
- Mar Hicks, Programmed Inequality: How Britain Discarded Women Technologists and Lost Its Edge in Computing, MIT Press, , 352 p. (ISBN 9780262535182, lire en ligne).
- Janet Abbate, Recoding Gender: Womenâs Changing Participation in Computing, MIT Press, , 264 p. (ISBN 9780262018067, lire en ligne).
- Gabriella Coleman, Coding Freedom: The Ethics and Aesthetics of Hacking, Princeton University Press, , 268 p. (ISBN 9780691144610, lire en ligne).
- â « ModĂšle : MĂ©tier original de Jacquard », sur MusĂ©e des arts et mĂ©tiers (consultĂ© le ).
- â (en-US) « IBM100 - The IBM Punched Card », sur www-03.ibm.com, (consultĂ© le ).
- â (en) Alan Turing, On Computable Numbers, with an Application to the Entscheidungsproblem : Proceedings of the London Mathematical Society, London Mathematical Society, (DOI 10.1112/PLMS/S2-42.1.230, lire en ligne) et « [idem] : A Correction », Proc. London Math. Soc., 2e sĂ©rie, vol. 43,â , p. 544-546 (DOI 10.1112/plms/s2-43.6.544, lire en ligne).
- â Christopher Kelty, Two Bits: The Cultural Significance of Free Software, Duke University Press, , 400 p. (ISBN 9780822342649, lire en ligne).
- â Cathy OâNeil, Weapons of Math Destruction: How Big Data Increases Inequality and Threatens Democracy, Crown Publishing Group, , 259 p. (ISBN 9780553418811, lire en ligne).
- â Nick Srnicek, Platform Capitalism, Polity Press, , 120 p. (ISBN 9781509504879, lire en ligne).
- â Casey Reas et Ben Fry, Processing: A Programming Handbook for Visual Designers and Artists, MIT Press, , 720 p. (ISBN 9780262028288, lire en ligne).
- â (en) XRuby.
- â Texte original dans E. W Dijkstra, « Go To Statement Considered Harmful », Communications of the ACM, vol. 11, no 3,â , p. 147-14 (lire en ligne).
- â « Go To Statement Considered Harmful » [PDF], sur University of Texas.
- â « Programmation procĂ©durale », sur www.enib.fr (consultĂ© le ).
Voir aussi
[modifier | modifier le code]Articles connexes
[modifier | modifier le code]- Ăconomie d'Ă©nergie d'un programme informatique
- Paradigme (programmation)
- Style de programmation
- Chronologie des langages de programmation
- Liste de langages de programmation
- Programmation web
- Forme de Backus-Naur (BNF), une grammaire de description de langage
- Google Code Jam, un concours international annuel de programmation trÚs prisé des mordus d'algorithmique et de programmation
- Kata (programmation)
- Ăditeur de texte
- Code créatif
Liens externes
[modifier | modifier le code]- Notices dans des dictionnaires ou encyclopédies généralistes :
- Ressource relative Ă l'audiovisuel :

