Langage de programmation

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Langage de programmation JavaScript.

En informatique, un langage de programmation est une notation conventionnelle destinée à formuler des algorithmes et produire des programmes informatiques qui les appliquent. D'une manière similaire à une langue naturelle, un langage de programmation est composé d'un alphabet, d'un vocabulaire, de règles de grammaire, et de significations[1],[2].

Les langages de programmation permettent de décrire d'une part les structures des données qui seront manipulées par l'appareil informatique, et d'autre part d'indiquer comment sont effectuées les manipulations, selon quels algorithmes. Ils servent de moyens de communication par lesquels le programmeur communique avec l'ordinateur, mais aussi avec d'autres programmeurs; les programmes étant d'ordinaire écrits, lus, compris et modifiés par une communauté[3].

Un langage de programmation est mis en œuvre par un traducteur automatique: compilateur ou interpréteur. Un compilateur est un programme informatique qui transforme dans un premier temps un code source écrit dans un langage de programmation donné en un code cible qui pourra être directement exécuté par un ordinateur, à savoir un programme en langage machine ou en code intermédiaire[2], tandis que l'interpréteur réalise cette traduction 'à la volée'.

Les langages de programmation offrent différentes possibilités d'abstraction, et une notation proche de l'algèbre, permettant de décrire de manière concise et facile à saisir les opérations de manipulation de données et l'évolution du déroulement du programme en fonction des situations. La possibilité d'écriture abstraite libère l'esprit du programmeur d'un travail superflu, notamment de prise en compte des spécificités du matériel informatique, et lui permet ainsi de se concentrer sur des problèmes plus avancés[2].

Chaque langage de programmation reflète un paradigme, un ensemble de notions qui orientent le travail de réflexion du programmeur, sa technique de programmation et sa manière d'exprimer le fruit de ses réflexions dans le langage choisi.

Les premiers langages de programmation ont été créés dans les années 1950. De nombreux concepts de l'informatique ont été lancés par un langage, avant d'être améliorés et étendus dans les langages suivants. La plupart du temps la conception d'un langage de programmation a été fortement influencée par l'expérience acquise avec les langages précédents[4].

Définition[modifier | modifier le code]

Article connexe : Turing-complet.

Sous un angle théorique, tout langage informatique peut être qualifié de langage de programmation s'il est Turing-complet c'est-à-dire qu'il permet de représenter toutes les fonctions calculables au sens de Turing et Church (en admettant néanmoins pour exception à la théorie que la mémoire des ordinateurs n'est pas un espace infini)[5].

Éléments du langage de programmation[modifier | modifier le code]

Un langage de programmation est construit à partir d'une grammaire formelle, qui inclut des symboles et des règles syntaxiques, auxquels on associe des règles sémantiques. Ces éléments sont plus ou moins complexes selon la capacité du langage. Les modes de fonctionnement et de définition de la complexité d'un langage de programmation sont généralement déterminé par leur appartenance à l'un des degrés de la Hiérarchie de Chomsky.

Les règles de syntaxe
Définies par une Grammaire formelle, elles régissent les différentes manières dont les éléments du langage peuvent être combinés pour obtenir des programmes[2]. La ponctuation (par exemple l'apposition d'un symbole ; en fin de ligne d'instruction d'un programme) relève de la syntaxe.
Le vocabulaire
Parmi les éléments du langage, le vocabulaire représente l'ensemble des instructions construites d’après des symboles. L'instruction peut être mnémotechnique ou uniquement symbolique comme quand elle est représentée par des symboles d'opérations tels que des opérateurs arithmétiques (« + » et « - ») ou booléens (&& pour le et logique par exemple). On parle aussi parfois de mot clé pour désigner une instruction (par abus de langage car le concept de mot clé ne recouvre par celui des symboles qui font pourtant eux aussi partie du vocabulaire).
La sémantique
Les règles de sémantique définissent le sens de chacune des phrases qui peuvent être construites dans le langage, en particulier quels seront les effets de la phrase lors de l'exécution du programme[2]. La science l’étudiant est la sémantique des langages de programmation.
L’alphabet
L'alphabet des langages de programmation est basé sur les normes courantes comme ASCII, qui comporte les lettres de A à Z sans accent, des chiffres et des symboles[6], ou Unicode pour la plupart des langages modernes (dans lesquels l'utilisation se limite en général aux chaînes de caractères littérales et aux commentaires, avec quelques exceptions notables comme C♯ qui autorisent également les identifiants unicode).

La plupart des langages de programmation peuvent prévoir des éléments de structure complémentaires, des méthodes procédurales, et des définitions temporaires et variables et des identifiants:

Les commentaires
Les commentaires sont des textes qui ne seront pas traduits. Ils peuvent être ajoutés dans les programmes pour y laisser des explications. Les commentaires sont délimités par des marques qui diffèrent d'un langage de programmation à l'autre tel que « -- », « /* » ou « // »[6].
Les identifiants
Les éléments constitutifs du programme, tels que les variables, les procédures, ou les types servent à organiser le programme et son fonctionnement. On peut ainsi, par exemple, diviser un programme en fonctions, ou lui donner une structure par objets : ces éléments de structure sont définis par des identifiants ou des procédures par mot clé selon le langage.

Utilisation[modifier | modifier le code]

Un langage de programmation offre un cadre pour élaborer des algorithmes et exprimer des diagrammes de flux[7],[6]. Il permet en particulier de décrire les structures des données qui seront manipulées par l'appareil informatique et quelles seront les manipulations. Un langage de programmation sert de moyen de communication avec l'ordinateur mais aussi entre programmeurs : les programmes étant d'ordinaire écrits, lus et modifiés par une équipe de programmeurs[3].

Un langage de programmation offre un ensemble de notions qui peuvent être utilisées comme primitives pour développer des algorithmes. Les programmeurs apprécient que le langage soit clair, simple, et unifié, qu'il y ait un minimum de notions qui peuvent être combinées selon des règles simples et régulières. Les qualités d'un langage de programmation influent sur la facilité avec laquelle les programmes pourront être écrits, testés, puis plus tard compris et modifiés[6].

Les langages de programmation offrent différentes possibilités d'abstraction, et une notation proche de l'algèbre, permettant de décrire de manière concise et facile à saisir les opérations de manipulation de données et l'évolution du déroulement du programme en fonction des situations. Cette possibilité d'écriture abstraite libère l'esprit du programmeur d'un travail superflu, et lui permet de se concentrer sur des problèmes plus avancés[2].

La facilité d'utilisation, la portabilité et la clarté sont des qualités appréciées des langages de programmation. La facilité d'utilisation, qui dépend de la syntaxe, du vocabulaire et des symboles, influence la lisibilité des programmes écrits dans ce langage et la durée d'apprentissage. La portabilité permet à un programme écrit pour être exécuté par une plateforme informatique donnée (un système d'exploitation) d'être transféré en vue d'être exécuté sur une autre plateforme[7].

Les programmeurs apprécient que la syntaxe permette d'exprimer la structure logique inhérente au programme. Un des soucis en programmation est d'éviter des pannes, qu'il soit possible de les détecter, les éviter et les rectifier; ceci est rendu possible par des mécanismes internes des langages de programmation. Des vérifications implicites sont parfois effectuées en vue de déceler des problèmes[7].

Les programmeurs apprécient qu'un langage de programmation soit en ligne avec les bonnes pratiques de programmation et d'ingénierie, qu'il encourage la structuration du programme, facilite la maintenance des programmes et qu'il dissuade voire interdise les mauvaises pratiques[7]. L'utilisation de l'instruction goto, par exemple, qui existe depuis les premiers langages de programmation, est considérée comme une mauvaise pratique. Son utilisation est déconseillée, voire impossible dans les langages de programmation récents[8].

L'alignement sur les standards industriels, la possibilité d'utiliser des fonctionnalités écrites dans un autre langage de programmation et l'exécution simultanée de plusieurs threads sont des possibilités appréciées des langages de programmation[7].

Notions courantes[modifier | modifier le code]

Un langage de programmation permet de décrire les structures des données qui seront manipulées par l'appareil informatique et quelles seront les manipulations. Il offre un ensemble de notions telles que les instructions, les variables, les types, et les procédures, qui peuvent être utilisées comme primitives pour développer des algorithmes[9].

Une instruction
Un ordre donné à un ordinateur[10].
Une variable
Un nom utilisé dans un programme pour faire référence à une donnée manipulée par programme.
Une constante
Un nom utilisé pour faire référence à une valeur permanente.
Une expression littérale
Une valeur mentionnée en toutes lettres dans le programme[9].
Un type
Chaque donnée a une classification, celle-ci influe sur la plage de valeurs possibles, les opérations qui peuvent être effectuées, et la représentation de la donnée sous forme de bits[9]. Chaque langage de programmation offre une gamme de types primitifs, incorporés dans le langage. Certains langages offrent la possibilité de créer des nouveaux types.
Les types de données primitifs courants sont les nombres entiers, les nombres réels, le booléen, les chaînes de caractères et les pointeurs.
Plus précisément, le type booléen est un type qui n'a que deux valeurs, vrai et faux, tandis que le type pointeur : une référence à une donnée, qui se trouve quelque part en mémoire[9].
Une structure de données
Une manière caractéristique d'organiser un ensemble de données en mémoire, qui influe sur les algorithmes utilisés pour les manipuler. Les structures courantes sont les tableaux, les enregistrements, les listes, les piles et les arbres[11].
Une déclaration
Une phrase de programme qui sert à renseigner au traducteur (compilateur, interpréteur, ...) les noms et les caractéristiques des éléments du programme tels que des variables, des procédures, de types[3]...
Des vérifications sont effectuées au moment de la compilation, ou au moment de l'exécution du programme, pour assurer que les opérations du programme sont possibles avec les types de données qui sont utilisés. Dans un langage fortement typé, chaque élément du programme a un type unique, connu et vérifié au moment de la compilation, ce qui permet de déceler des erreurs avant d'exécuter le programme[3].
Les procédures, fonctions, méthodes
Divers langages de programmation offrent la possibilité d'isoler un fragment de programme, et d'en faire une opération générale, paramétrable, susceptible d'être utilisée de façon répétée. Ces fragments sont appelés procédures, fonctions ou méthodes.
Les modules
Les langages de programmation peuvent également offrir la possibilité de découper un programme en plusieurs pièces appelées modules, chacune ayant un rôle déterminé, puis de combiner les pièces[3].
Les notions de procédure et de module sont destinées à faciliter la création de programmes complexes et volumineux en assistant la prise en charge de cette complexité. Ces fonctions permettent en particulier la modularité et l'abstraction[3].

Paradigmes[modifier | modifier le code]

Article détaillé : Paradigme (programmation).

Chaque langage de programmation reflète un paradigme de programmation. C'est un ensemble de notions qui oriente le travail de réflexion du programmeur et peut être utilisé pour obtenir une solution à un problème de programmation. Chaque paradigme amène une technique différente de programmation; une fois qu'une solution a été imaginée par le programmeur selon un certain paradigme, un langage de programmation qui suit ce paradigme permettra de l'exprimer[12].

Impératif

Le paradigme impératif ou procédural est basé sur l'idée d'une exécution étape par étape semblable à une recette de cuisine. Il est basé sur le principe de la machine de Von Neumann. Un ensemble de structures permet de contrôler l'ordre dans lequel sont exécutées les commandes qui décrivent les étapes. L'abstraction est réalisée à l'aide de procédures auxquelles sont transmises des données. Il existe une procédure principale, qui est la première à être exécutée, et qui peut faire appel à d'autre procédures pour effectuer certaines tâches ou certains calculs. Les langages de programmation C, Pascal, Fortran et COBOL sont en paradigme impératif[12].

Fonctionnel

Le paradigme fonctionnel est basé sur l'idée d'évaluer une formule, et d'utiliser le résultat pour autre chose, selon le modèle du lambda-calcul. Tous les traitements sont faits en évaluant des expressions et en faisant appel à des fonctions, et l'exécution étape par étape n'est pas possible dans le paradigme fonctionnel. Le résultat d'un calcul sert de matière première pour le calcul suivant, et ainsi de suite, jusqu'à ce que toutes les fonctions aient produit un résultat. ML et Lisp sont des langages de programmation en paradigme fonctionnel[12].

Logique

Le paradigme logique est basé sur l'idée de répondre à une question par des recherches sur un ensemble, en utilisant des axiomes, des demandes et des règles de déduction. L'exécution d'un programme est une cascade de recherches de données dans un ensemble, en faisant usage de règles de déduction. Les données obtenues, et associées à un autre ensemble de règles peuvent alors être utilisées dans le cadre d'une autre recherche. L'exécution du programme se fait par évaluation, le système effectue une recherche de toutes les affirmations qui, par déduction, correspondent à au moins un élément de l'ensemble. Le programmeur exprime les règles, et le système pilote le processus. Prolog est un langage de programmation en paradigme logique[12].

Orienté objet

Dans le paradigme orienté objet, chaque objet est une entité active, qui communique avec d'autres objets par échange de messages. Les échanges de message entre les objets simulent une évolution dans le temps d'un phénomène réel. Les procédures agissent sur les données et le tout est cloisonné dans des objets. Les objets sont groupés en classes ; les objets d'une même classe sont similaires du point de vue de leur structure et de leur comportement. La programmation consiste à décrire les classes. Les classes sont organisées selon une structure hiérarchique où il y a de l'héritage : de nouveaux objets peuvent être créés sur la base d'objets existants. Ce paradigme a été développé pour parer aux limitations de son prédécesseur, le paradigme procédural avec les très grands programmes, et surtout avec les programmes interactifs. Le paradigme orienté objet aide le programmeur à créer un modèle organisé du problème à traiter et à gérer les interactions. Il permet d'associer fortement les données avec des procédures adaptées pour réaliser des fonctions abstraites. Simula, Smalltalk, C++ et Java sont des langages de programmation en paradigme orienté objet.

Mise en œuvre[modifier | modifier le code]

L'utilisation d'un langage est rendue possible par un traducteur automatique. Un programme qui prend un texte écrit dans ce langage pour en faire quelque chose, en général soit :

Un compilateur
Un programme qui traduit le texte dans un langage qui permettra son exécution, tel le langage machine, le bytecode ou le langage assembleur.
Un interpréteur
Un programme qui exécute les instructions demandées. Il joue le même rôle qu'une machine qui reconnaîtrait ce langage.
Langage machine
Chaque appareil informatique a un ensemble d'instructions qui peuvent être utilisées pour effectuer des opérations. Les instructions permettent d'effectuer des calculs arithmétiques ou logiques, déplacer ou copier des données, ou bifurquer vers l'exécution d'autres instructions. Ces instructions sont enregistrées sous forme de séquences de bits, où chaque séquence correspond au code de l'opération à effectuer et aux opérandes, c'est-à-dire aux données concernées ; c'est le langage machine[13].

La traduction s'effectue en plusieurs étapes. En premier lieu le traducteur effectue une analyse lexicale où il identifie les éléments du langage utilisés dans le programme. Dans l'étape suivante, l'analyse syntaxique, le traducteur construit un diagramme en arbre qui reflète la manière dont les éléments du langage ont été combinés dans le programme, pour former des instructions. Puis lors de l'analyse sémantique le traducteur détermine s'il est possible de réaliser l'opération, et les instructions qui seront nécessaire dans le langage cible[14].

Dans le langage de programmation assembleur, des mots aide-mémoire (mnémonique) sont utilisés pour référer aux instructions de la machine. Les instructions diffèrent en fonction des constructeurs et il en va de même pour les mnémoniques. Un programme assembleur traduit chaque mnémonique en la séquence de bits correspondante[15].

Les langages de programmation fonctionnent souvent à l'aide d'un runtime.

Un runtime
Un runtime (traduction: exécuteur) est un ensemble de bibliothèques logicielles qui mettent en œuvre le langage de programmation, permettant d'effectuer des opérations simples tel que copier des données, voire les opérations beaucoup plus complexes[16].

Lors de la traduction d'un programme vers le langage machine les opérations simples sont traduites en les instructions correspondantes en langage machine tandis que les opérations complexes sont traduites en des utilisations des fonctions du runtime. Dans certains langages de programmation la totalité des instructions sont traduites en des utilisations du runtime[16] qui sert alors d'intermédiaire entre les possibilités offertes par la plateforme informatique et les constructions propre au langage de programmation[17].

Chaque langage de programmation a une manière conventionnelle de traduire l'exécution de procédures ou de fonctions, de placer les variables en mémoire et de transmettre des paramètres. Ces conventions sont appliquées par le runtime[18]. Les runtime servent également à mettre en œuvre certaines fonctionnalités avancées des langages de programmation[16].

Les langages de programmation sont couramment auto-implémentés, c'est-à-dire que le compilateur pour ce langage de programmation est mis en œuvre dans le langage lui-même. Exemple un compilateur pour le langage Pascal peut être écrit en langage Pascal[19].

Fonctionnalités avancées[modifier | modifier le code]

Les fonctionnalités avancées telles que le ramasse-miettes (anglais garbage collector), la manipulation des exceptions, des événements, ou des threads, ainsi que la liaison tardive et la réflexion sont mises en œuvre par les runtime des langages de programmation[16].

Un ramasse-miettes
Un mécanisme qui supprime les variables inutilisées et libère l'espace mémoire qui leur avait été réservé[20].
Une exception
Un fait inattendu, souvent accidentel, entraîne l'échec du déroulement normal du programme, et ce fait exceptionnel doit être pris en charge par le programme avant de pouvoir continuer. Certains langages de programmation permettent de provoquer délibérément l'arrêt du déroulement normal du programme[21].
Un événement
Une procédure qui va être exécutée lorsqu'une condition particulière est rencontrée. les événements sont notamment utilisés pour mettre en œuvre les interfaces graphique[22].
Un thread
Une suite d'instructions en train d'être exécutée. Les langages de programmation qui manipulent les threads permettent d'effectuer plusieurs tâches simultanément. Cette possibilité d'exécution simultanées, offerte par les systèmes d'exploitation, est également offerte en allégé par les runtime des langages de programmation[23].
La liaison tardive
Le procédé de liaison (anglais binding) consiste à associer chaque identifiant d'un programme avec l'emplacement de mémoire concerné. Cette opération peut être effectuée lors de la traduction du programme, au cours de l'exécution du programme ou juste avant[24], elle est dite tardive lorsque l'opération de liaison est effectuée très tard, juste avant que l'emplacement concerné ne soit utilisé[25].
La réflexion
La possibilité pour un programme d'obtenir des informations concernant ses propres caractéristiques. Des instructions du langage de programmation permettent à un programme d'obtenir des informations sur lui-même, et de les manipuler comme des données[26].

Historique[modifier | modifier le code]

Bien que la notion de programme apparaisse progressivement au cours de la deuxième moitié du XIXe siècle, les premiers langages de programmation n'apparaissent qu'autour de 1950. Chacun pouvant créer son propre langage, il est impossible de déterminer le nombre total de langages existant à l'heure actuelle.

Utilisations[modifier | modifier le code]

On peut aussi classer les langages de programmation en fonction de leur utilisation car beaucoup de langages sont spécialisés à une application ou à un domaine particulier.

Langages pour pages Web dynamiques[modifier | modifier le code]

Voir la catégorie : Langage pour pages Web dynamiques.

Ce type de langage est utilisé pour une plus grande interaction entre un client et un serveur.

Du côté du serveur Web, cela permet de produire des pages dont le contenu est généré à chaque affichage. Ces langages sont par ailleurs souvent couplés avec un langage pour communiquer avec des bases de données (exemple : PHP , LiveCode).

Côté client (en général le navigateur web), ces langages offrent la possibilité de réagir à certaines actions de l'utilisateur sans avoir à questionner le serveur. Par exemple, le JavaScript d'une page Web peut réagir aux saisies de l'utilisateur dans un formulaire (et vérifier le format des données).

Certains langages permettent de développer à la fois les aspects client et serveur. C'est le cas d'Ocsigen, de Hop ou bien encore du Server-Side JavaScript.

Langages de programmation théorique[modifier | modifier le code]

On désigne parfois par langage de programmation théorique les systèmes formels utilisés pour décrire de façon théorique le fonctionnement des ordinateurs. Ils ne servent pas à développer des applications mais à représenter des modèles et démontrer certaines de leurs propriétés.

On peut citer la machine de Turing et le λ-calcul de Church, qui datent tous les deux des années 1930, et donc antérieurs à l'invention de l'ordinateur. Le λ-calcul a par la suite servi de base théorique à la famille des langages de programmation fonctionnelle. Dans les années 1980, Robin Milner a mis au point le π-calcul pour modéliser les systèmes concurrents.

Pour rendre la programmation plus difficile[modifier | modifier le code]

Article détaillé : Langage de programmation exotique.

Les langages exotiques ont pour but de créer des grammaires complètes et fonctionnelles mais dans un paradigme éloigné des conventions. Beaucoup sont d'ailleurs considérés comme des blagues.

Ces langages sont généralement difficiles à mettre en pratique et donc rarement utilisés. Par exemple, le Piet permet de programmer à l'aide d'images matricielles.

On peut également citer le Brainfuck qui est un langage minimaliste et Turing-complet (8 instructions seulement). Il est prévu pour tourner sur une machine de Turing avec un compilateur de seulement 171 octets. Un extrême dans la difficulté à mettre en œuvre est sans doute le Malbolge, créé en 1998, si difficile à comprendre quand il est arrivé qu'il a fallu deux ans au premier programme Malbolge pour apparaître.

Langages spécialisés[modifier | modifier le code]

  • ABEL, langage pour la programmation électronique des PLD
  • CDuce, langage fonctionnel d'ordre supérieur pour la manipulation de documents au format XML.
  • Forme de Backus-Naur (BNF), formalisation des langages de programmation
  • PROMELA, langage de spécification de systèmes asynchrones
  • VRML, description de scènes en trois dimensions

Langages synchrones[modifier | modifier le code]

Langages de programmation synchrones pour les systèmes réactifs : Esterel, Lustre.

Langages à vocation pédagogique[modifier | modifier le code]

Les pseudo-codes (comme le Langage K) ont généralement un but uniquement pédagogique.

Logo est un langage fonctionnel simple à apprendre.

Dans les années 1990 c'est le langage BASIC qui était souvent conseillé pour débuter. Il avait cependant la réputation de favoriser la prise de mauvaises habitudes de programmation.

Le Processing est un langage simplifié qui s'appuie sur Java. Il permet un développement d'applications fenêtrées sur tout type d'ordinateur équipé de Java.

L'Arduino est un langage simplifié s'appuyant sur C/C++. Il permet un développement simple de projets électroniques à partir de carte Arduino (AVR).

L'ArduinoEDU est un langage encore plus simple, en français, pour les grands débutants s'appuyant sur le langage C/C++/Arduino. Il permet un développement très simple de projets électroniques à partir de cartes Arduino (AVR).

Langages pour l'électronique numérique[modifier | modifier le code]

  • Verilog, VHDL : langages de description matérielle, permettant de synthétiser de l'électronique numérique (descriptions de portes logiques) et d'en simuler le fonctionnement
  • SystemC, langage de description matérielle de plus haut niveau que les précédents et permettant une simulation plus rapide

Langages pour la statistique[modifier | modifier le code]

R, SAS et xLispStat sont à la fois un langage de statistiques et un logiciel.

Langages de programmation de Commande Numérique (C.N.)[modifier | modifier le code]

Une machine-outil automatisée, ou Commande Numérique (C.N.), a besoin d'un langage de programmation pour réaliser les opérations de tournage, ou de fraisage

Langages de programmation des automates programmables industriels (API)[modifier | modifier le code]

Langages de programmation audio[modifier | modifier le code]

Nyquist est un langage de synthèse et d'analyse sonore. Pure Data est un logiciel de création musicale graphique qui repose sur un langage de programmation procédural.

Popularité[modifier | modifier le code]

La popularité de chaque langage est difficilement quantifiable ; néanmoins il existe l'index TIOBE, calculé mensuellement, qui se base sur le nombre de formations/cours destinée aux ingénieurs et le nombre de revendeurs/free-lance spécialisés dans un langage de programmation. C'est une information parcellaire mais qui peut donner un ordre d'idée sur les tendances en matière de préférence des programmeurs.

Voir aussi[modifier | modifier le code]

Sur les autres projets Wikimedia :

Il existe une catégorie dédiée à ce sujet : Langage de programmation.

Articles connexes[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Notes et références[modifier | modifier le code]

  1. (en) Maurizio Gabbrielli et Simone Martini, Programming Languages: Principles and Paradigms, Springer,‎ 2010 [détail des éditions] (ISBN 9781848829138)
  2. a, b, c, d, e et f (en) Kenneth C. Louden et Kenneth A. Lambert, Programming Languages: Principles and Practices, Cengage Learning,‎ 2011 [détail des éditions] (ISBN 9781111529413)
  3. a, b, c, d, e et f (en) William Sims Bainbridge, Berkshire Encyclopedia of Human-computer Interaction, vol. 2, Berkshire Publishing Group LLC,‎ 1994 [détail des éditions] (lire en ligne)
  4. (en) David Anthony Watt et William Findlay, Programming Language Design Concepts, John Wiley & Sons,‎ 2004 (ISBN 9780470853207)
  5. Premiers pas vers une ontologie générale des programmes informatiques, Pascal Lando, Frédéric Fürst, Gilles Kassel et Anne Lapujade, "18es Journées Francophones d'Ingénierie des Connaissances, Grenoble : France (2007)", voir section 3.2 La première catégorie de langages informatiques est celle des langages informatiques généralistes (General purpose computer language), c’est-à-dire les langages Turing-complets ... Les langages de programmation (Programming Languages), ou langages de haut niveau, sont tous les langages généralistes
  6. a, b, c et d (en) Seema Kedar, Programming Paradigms And Methodology, Technical Publications,‎ 2002 [détail des éditions] (ISBN 9788184312966)
  7. a, b, c, d et e (en)I. T. L. Education Solutions Limited,Introduction To Information Technology,Pearson Education India - 2005,(ISBN 9788177581188)
  8. (en)R. J. Barlow et A. R. Barnett,Computing for Scientists: Principles of Programming with Fortran 90 and C++, John Wiley and Sons - 1998,(ISBN 9780471955962)
  9. a, b, c et d (en) Seema Kedar et Sanjay Thakare, Principles of Programming Languages, Technical Publications,‎ 2009 [détail des éditions] (ISBN 9788184315776)
  10. (en)ADA Programming, Tyrarex Press,(ISBN 9781449991999)
  11. (en)Krishnamurthy,Data Structures Using C,Tata McGraw-Hill Education - 2008,(ISBN 9780070669192)
  12. a, b, c et d (en) Jana, Java And Object-Oriented Programming Paradigm, PHI Learning Pvt. Ltd.,‎ 2008 [détail des éditions] (ISBN 9788120327757)
  13. (en) D.A. Godse et A.P. Godse, Computer Architecture & Organisation, Technical Publications,‎ 2007 (ISBN 8184317719)
  14. Dhamdhere, Systems Programming and Operating Systems, Tata McGraw-Hill Education,‎ 2011 (ISBN 9780074635797)
  15. (en)Tmh, Computer Science Vii (Tn), Tata McGraw-Hill Education, 2007,(ISBN 9780070668034)
  16. a, b, c et d (en)Michael L. Scott,Programming Language Pragmatics,Morgan Kaufmann - 2009,(ISBN 9780123745149)
  17. (en)Ian Griffiths, Matthew Adams,.Net Windows Forms in a Nutshell,O'Reilly Media, Inc. - 2003,(ISBN 9780596003388)
  18. (en)Raghavan,Prin Of Compiler Design,Tata McGraw-Hill Education - 2010,(ISBN 9780070144712)
  19. (en)Diomidis Spinellis et Georgios Gousios,Beautiful Architecture: Leading Thinkers Reveal the Hidden Beauty in Software Design,O'Reilly Media Inc. - 2009,(ISBN 9780596517984)
  20. (en)Chris Smith,Programming F#,O'Reilly Media, Inc. - 2009,(ISBN 9780596153649)
  21. (en)Jeff Friesen, Geoff Friesen,Java 2 by Example,Que Publishing - 2002,(ISBN 9780789725936)
  22. (en)Harold Davis,Visual Basic 6 Secrets,Harold Davis, 1998,(ISBN 9780764532238)
  23. (en)Brent B. Welch, Ken Jones, Jeffrey Hobbs,Practical Programming in Tcl and Tk,Prentice Hall Professional - 2003,(ISBN 9780130385604)
  24. (en)Sibsankar Haldar, Alex A. Aravind,Operating Systems,Pearson Education India - 2010,(ISBN 9788131730225)
  25. (en)Amit Singh,Mac OS X Internals: A Systems Approach,Addison-Wesley Professional - 2007,(ISBN 9780321278548)
  26. (en)Kishori Sharan,Harnessing Java 7: A Comprehensive Approach to Learning Java 7,Kishori Sharan - 2011,(ISBN 9781466244641)