Langages informatiques

Message 1, par Elzen

§ Posté le 11/03/2013 à 0h 25m 47

Profitons du fait que je semble être dans une période de blogage plus ou moins active (en espérant que ça dure ^^"), et revenons nous occuper d'un peu de vulgarisation informatique. En l'occurrence, je voudrais vous parler aujourd'hui des différents « langages » que nous utilisons.

Comme leur nom l'indique, ces langages, comme les langages humains, nous servent à communiquer ; mais c'est avec l'ordinateur et ce qu'il contient que nous communiquons ainsi. Seulement, la machine, il y a plusieurs manières de communiquer avec elle, selon ce que l'on veut lui faire faire. Il y a donc plusieurs sortes de langages différents, comme nous allons le voir.


Mais d'abord, qu'est-ce qu'un langage, au juste ? C'est difficile à définir(1). Cependant, on peut au minimum préciser comment c'est constitué : un langage contient une structure syntaxique particulière, et ses différents éléments portent une valeur sémantique. Ça permet déjà de déterminer ce qui est un langage et ce qui ne l'est pas, nous en verrons un exemple un peu plus bas.

Comme pas mal de nos langages humains, les langages informatiques sont donc des suites de signes et de mots ordonnés d'une certaine manière (la syntaxe, c'est le bon ordre d'enchaînement de ces différents éléments), afin de donner un sens particulier (c'est la sémantique). Nous verrons quelques rapides exemples un peu plus bas.


En pratique, la machine elle-même ne comprend en fait qu'une seule forme de langage (comme évoqué rapidement dans cet article) : soit du courant passe, soit il ne passe pas (c'est donc un langage binaire, puisqu'à deux mots, mais lisez l'autre article si cette appellation ne vous est pas familière). Pour communiquer réellement avec la machine, il faut donc que les messages qu'on lui envoie arrivent sous forme binaire.


Les vrais programmeurs codent en binaire


Bon, bien sûr, envoyer directement des suites de zéros et de uns, pour nous humains, ce n'est pas ce qu'il y a de plus pratique. Nous écrivons donc dans des langages un peu plus intelligibles (enfin, pour certains d'entre eux…), qu'il faut ensuite traduire pour la machine. Je simplifie un peu, mais cette traduction peut se faire de deux manières : soit d'un coup, séparément, soit à la volée.

Pour vous donner une idée, le premier cas, c'est comme quand un livre intéressant sort en langue anglaise, et qu'on veut le traduire pour le public francophone : quelqu'un va prendre le temps de lire le livre en anglais, de rédiger un livre en français qui raconte la même histoire, et on pourra ensuite utiliser le résultat de cette opération comme on veut. En informatique, le programme qui réalise cette opération s'appelle un compilateur (et le premier d'entre eux fut conçu par Grace Hopper).

Dans le second cas, c'est comme quand un étranger fait un discours à la télévision, et qu'un interprète vient, pour le publique francophone qui ne parle pas la langue en question, parler en même temps que le premier pour expliquer en français ce qu'il est en train de dire. L'opération est même tellement similaire que le programme porte presque le même nom : c'est un interpréteur.

Dans les deux cas, le travail consiste donc à lire du code humainement compréhensible, et à le transformer en quelque chose qui l'est moins ; mais dans le premier cas, le résultat de l'opération sera enregistré dans un fichier à part sur le disque, alors que dans le second, il sera directement envoyé à la machine sans être mémorisé.


Ceci étant dit, passons maintenant aux différents types de langages que l'on rencontre.


Les langages de requêtes


Je commence par eux, parce que ce sont ceux que ceux que l'individu lambda manipule le plus souvent. Chaque fois que vous faites une recherche sur votre moteur de recherche favori, vous exprimez en fait une requête, dans un langage particulier spécifique à ce moteur.

Bon, sur un moteur de recherche classique, en général, ces langages sont assez simples, d'un premier abord : taper quelque chose en français ou en anglais, généralement, ça marche ; mais il y a parfois aussi moyen d'utiliser une syntaxe particulière qui peut rendre la recherche plus efficace. Je ne détaille pas, cependant, regardez si celui que vous utilisez ne vous propose pas un peu de documentation.


Certains langages de requêtes sont un peu plus complexes. Parmi eux, le plus célèbre est le langage SQL (pour « Standard Query Language », soit « langage standard de requêtes »), qui est notamment très utilisé dans le domaine des bases de données, et qui permet de réaliser des requêtes assez précise. Mais cet article est destiné à vous parler des langages en général ; je ne développerai donc pas plus son cas particulier.

Par principe, les langages de requêtes ne sont pas vraiment faits pour être compilés ; mais le logiciel auquel vous exprimez cette requête va les interpréter pour produire le résultat désiré.


Les langages de mise en forme


Ceux-là aussi sont assez fréquemment manipulés par l'ensemble des gens, mais pas forcément de manière consciente : quand vous utilisez un outil de traitement de texte, ou un tableur (comme ce que vous avez dans LibreOffice et quelques autres), le logiciel va enregistrer vos fichiers en utilisant un langage de mise en forme, même si l'éditeur vous permet de ne pas voir directement ce langage.

Si vous fréquentez quelques forums, vous avez peut-être déjà eu l'occasion de manipuler vous-mêmes le langage BBCode (qui est, notamment, disponible ici-même, pour vous permettre de formater vos commentaires 😉 ), qui est également un langage de mise en forme.


En fait, on peut faire deux catégories au sein de ces langages, et je viens de vous donner un exemple de chaque : l'OpenDocument, utilisé en bureautique, permet d'enregistrer des documents complets (le texte, mais aussi des méta-données, comme un titre et ce genre de choses), quand le BBCode, utilisé sur les forums, ne concerne que des fractions de documents (ça sert à formater le texte, mais sans se préoccuper de ce qu'il y a autour).

Cependant, dans un cas comme dans l'autre, ces langages sont souvent des langages à balises, c'est-à-dire que les mots spécifiques utilisés s'insèrent dans le texte et, comme les balises dans une courses d'orientation, servent au logiciel d'affichage à se repérer dans ce texte, pour lui permettre de donner le bon style au bon endroit.

La syntaxe prend ici une certaine importance : en BBCode, si vous ouvrez une balise (un « [i] », pour mettre en italique, par exemple), il faut ensuite la fermer (avec un « [/i] ») pour que le texte retrouve son aspect normal (selon le logiciel qu'il y a derrière, si vous ne fermez pas la balise, ça peut soit mettre tout le texte en italique jusqu'à la fin, soit ne rien mettre du tout en italique). Ce genre de choses vaut, à peu près de la même façon, pour les autres langages à balises.


Parmi les langages de mises en forme, on peut notamment citer le langage HTML(2), conçu pour être lu par les navigateurs web, et donc que vous rencontrez assez fréquemment, même si vous ne vous en rendez pas forcément compte.

Le HTML est lui-même, comme je vous l'ai signalé dans l'article dont je viens de donner le lien, une forme particulière du XML. Pour autant, le XML lui-même (c'est l'exemple dont je vous parlais au début) n'est lui-même pas un langage, dans la mesure où il ne contient aucune forme sémantique : il s'agit uniquement d'une syntaxe (ça indique comment faire les balises, sans préciser quelles balises existent et quel sens elles ont).

Les différents langages qui utilisent la syntaxe XML(3), comme le HTML, mais aussi le SVG (un format permettant de réaliser des images vectorielles, c'est-à-dire que l'on peut zoomer indéfiniment sans qu'il y ait de pixellisation), ajoutent la partie sémantique manquante en définissant quelles sont les balises qui vont pouvoir être utilisées et à quoi elles correspondent.


La plupart des langages de mise en forme sont conçus pour être interprétés par le logiciel qui se charge de l'affichage des pages (l'outil de traitement de texte pour l'OpenDocument, le navigateur web pour le HTML, ou une visionneuse pour le SVG ou le PDF) ; mais on parle également de compilation dans certains cas : pour le langage LaTeX(4) (qui est très utilisé, notamment, pour la rédaction d'articles scientifiques), on n'utilise pas d'interpréteur permettant de voir l'apparence du document en cours de route, mais on parle de compilation pour désigner l'étape générant un document PDF à partir du code source en LaTeX.


Les langages de programmation


Ceux-là, la plupart des gens ne les utilisent pas… et c'est dommage, parce que ça leur permettrait peut-être d'un peu mieux comprendre la machine et ce qui s'y passe.


Ces langages sont ceux qui permettent réellement de communiquer avec la machine et de lui donner des instructions précises. Ce sont ceux pour lesquels la syntaxe est la plus importante : pour les deux sortes précédentes de langages, l'interpréteur utilisé peut éventuellement essayer de s'arranger avec les erreurs de syntaxe pour afficher quelque chose même si le truc est très mal rédigé (votre navigateur web fait ça à peu près tout le temps, vu le nombre de sites qui ne sont pas bien aux normes) ; pour un langage de programmation, c'est plus compliqué, et généralement(5), si la syntaxe n'est pas bonne, vous vous retrouvez avec une erreur sur les bras.

Car, comme je le dis souvent à mes élèves, la machine est bête : l'intelligence est censée se trouver chez les humains qui la manipulent.


Il existe des langages de programmation plus ou moins faciles à comprendre, comme je l'ai dit. Les langages classiques sont, au niveau de la forme, quasiment lisible en anglais de base (en anglais, parce que le développement de l'informatique a été en grande partie dominé par le royaume unis et les USA). Ce qui ne veut pas dire qu'il soit facile de comprendre tout ce qu'on y lit (surtout si le code n'est pas assez commenté…), mais qu'il est tout de même possible, en s'accrochant un peu, d'y arriver.

Par exemple, parmi les instructions de base, on trouve le if/else (soit « si/sinon », en français). Vous exprimez « if (condition): (instructions); else: (instructions) », et la machine va comprendre qu'elle doit évaluer la condition logique, et que si celle-ci se trouve être vraie, il faut réaliser le premier jeu d'instructions ; tandis que si elle est fausse, il faut réaliser le second.

Vous avez également des « boucles », telles que la boucle while (« tant que ») : vous exprimez « while (condition): (instructions) », et la machine comprend qu'elle doit vérifier la condition logique, effectuer le jeu d'instructions si elle est vraie, puis ré-évaluer la condition, et si elle est encore vraie, ré-effectuer le jeu d'instructions, puis ré-évaluer, et ainsi de suite, pendant potentiellement assez longtemps.

Si vous voulez en apprendre un peu plus, le Python est un langage de programmation assez simple à prendre en main (à mon humble avis, c'est actuellement l'un des meilleurs pour débuter, même s'il n'est tout de même pas parfait, et que certaines choses seraient améliorables à ce niveau). Ce livre très bien conçu pourra vous y aider.


D'autres langages sont bien plus complexes. Parfois volontairement : les programmeurs aiment parfois s'amuser en cherchant les idées les plus étranges qui soient. Il existe, par exemple, un langage de programmation appelé Shakespeare Programming Language, dont le principe est de rédiger un programme qui ressemblerait à une pièce de Will Shakespeare.

Dans le genre, on peut également citer le Brainfuck, qui permet de réaliser beaucoup de choses à partir de combinaisons de huit caractères, chacun correspondant à une instruction de bas niveau ; le Whitespace, qui n'utilise que des caractères « blancs » (c'est-à-dire des espaces ou des tabulations) ; ou encore le Piet, un langage de programmation qui utilise des images comme code source.

Bien sûr, les plus fantaisistes de ces langages ne sont pas vraiment utilisés en pratique. Leur intérêt, vous diraient mes camarades du Topic des Codeurs (dont certains d'entre eux ont travaillé sur divers interpréteurs Brainfuck) réside dans le fait qu'on apprend énormément de choses sur la façon dont fonctionne la programmation en réalisant un logiciel capable de comprendre ces langages.


Mais revenons à des langages plus classiques, et plus utilisés. Je vous ai déjà parlé du Lisp et du C dans mon article rendant hommage à leurs concepteurs respectifs ; on peut également citer le Haskell, le Ruby, et beaucoup d'autres.

Il existe aussi des langages de scripts, qui peuvent éventuellement servir à concevoir des programmes complexes, mais qui sont surtout utilisés pour automatiser certaines actions, avec ou sans traitements de données intermédiaires.

Ce sont le cas des différents shells que vous rencontrez en ouvrant un terminal (sous un système GNU/Linux, c'est souvent le Bash que vous trouverez par défaut, mais il en existe d'autres). Quoique vous puissiez faire à peu près tout ce dont vous pourriez avoir besoin par des interfaces graphiques, ouvrir un terminal et apprendre un peu à utiliser le shell qui s'y trouve peut vous faire apprendre beaucoup de choses, et parfois vous faciliter pas mal la vie ; je ne peux donc que vous encourager à le faire.


Je vais m'arrêter ici pour cet article, désirant rester pour l'instant dans les généralités, mais, comme dans une conférence, je vais maintenant vous demander si vous avez des questions ; en fonction des précisions que vous me demanderez, je rédigerai peut-être d'autres articles pour détailler sur un point plus particulier 😉


Message 2, par grim7reaper

§ Posté le 11/03/2013 à 9h 20m 07

Si dans la note 5 tu fais allusion à Ariane 5, en fait le problème venait d'un module d’Ariane 4 qui a été réutilisé tel quel.

Or, les contraintes et les valeurs limites des variables n’étaient pas les mêmes…

Conséquence : un overflow qui a dégénéré.

Cf. Wikipédia ou, pour ceux qui n’ont pas confiance en Wikipédia, le rapport officiel (section 2.1 CHAIN OF TECHNICAL EVENTS).

Donc rien à voir avec une erreur de syntaxe ;)

Message 3, par Elzen

§ Posté le 11/03/2013 à 11h 02m 54

Okay, autant pour moi ^^


J'me disais bien que c'était flou, comme souvenir. Je vire la note, du coup.


Edit : enfin, je ne suis pas sûr que ce soit à ça que je pensais ; mais comme je ne suis pas capable de dire quoi précisément, il vaut mieux que je laisse barré.

Message 4, par curiosus

§ Posté le 11/03/2013 à 17h 10m 52

Question d'un "Vieux"

Lors de mes études à l'INSA de Lyon (promo Oppenheimer) nous avons appris à programmer en Fortran

Est il encore utilisé ?

ou appartient il à l'histoire de l'informatique?

Message 5, par Elzen

§ Posté le 11/03/2013 à 17h 42m 24

Tu peux avoir une estimation de l'utilisation des différents langages de programmation sur ce site.


Il me semble que le Fortran est dans la même situation que le COBOL : il n'est plus utilisé pour des projets nouveaux, mais quand même encore présent en raison des programmes lancés à l'époque et toujours en activité parce que trop sensibles à remplacer (pour COBOL, une bonne partie des données bancaires sont gérées comme ça).


Donc, il appartient à l'histoire de l'informatique, mais une histoire qui peine un peu à se refermer.

Message 6, par grim7reaper

§ Posté le 17/03/2013 à 15h 09m 19

Citation (curiosus)

Question d'un "Vieux"

Lors de mes études à l'INSA de Lyon (promo Oppenheimer) nous avons appris à programmer en Fortran

Est il encore utilisé ?

ou appartient il à l'histoire de l'informatique?

Oui, il est encore utilisé.

J’ai eu des cours de Fortran lors de mes études, et actuellement je bosse sur un modèle qui est écrit en Fortran.

Après comme l’a dit Elzen, je ne sais pas si beaucoup de nouveaux développement se font en Fortran. Il y en a, c’est quasiment sûr, mais je pense que le C++ doit être en train de prendre le dessus (tout comme Java essaye de remplacer le Cobol).

Mais le Fortran est encore là, bien vivant et il ne va pas disparaître de sitôt.


Citation (Elzen)

Tu peux avoir une estimation de l'utilisation des différents langages de programmation sur ce site.

Houlà, Tiobe c’est à prendre avec des pince-monseigneur.

Vu comme ils produisent leurs stat’…


Double post car je me rappelle plus comment éditer mon message.

Message 7, par Elzen

§ Posté le 17/03/2013 à 15h 21m 43

C'est fusionné ; et en fait, il n'y a pas trop moyen de le faire (sauf, comme je le fais, en allant modifier les fichiers par SSh, mais tu n'as présentement pas les droits). Je rajouterai peut-être l'option plus tard, mais pour le moment, 'flemme.


Et pour le site en question, j'avais trouvé ça, me semble-t-il, sur le topic des codeurs, dans lequel je n'avais pas remarqué cette réponse de ta part. Effectivement… tu aurais mieux à proposer ?

Message 8, par grim7reaper

§ Posté le 17/03/2013 à 18h 06m 42

Citation (Elzen)

C'est fusionné ; et en fait, il n'y a pas trop moyen de le faire (sauf, comme je le fais, en allant modifier les fichiers par SSh, mais tu n'as présentement pas les droits). Je rajouterai peut-être l'option plus tard, mais pour le moment, 'flemme.

Ok.

C’est pas non plus critique comme fonctionnalité donc prends ton temps.


Citation (Elzen)

tu aurais mieux à proposer ?

Malheureusement, non :/

Il y a aussi l’indice PYPL qui se veut plus pertinent que TIOBE mais qui, selon moi, n’est pas non plus spécialement fiable.

Après, une solution serait de regarde le nombre de projet réalisé avec le langage X sur github, launchpad, sourceforge, …

Mais là encore, c’est biaisé car on ne tient compte que de ce qui est Open Source.

Donc au final, ça me semble difficile de savoir dans quelle mesure un langage est utilisé. En croisant les différentes sources, on peut sûrement avoir une idée assez fiable de ce qui est utilisé le plus fréquemment, de là à les ordonner comme le fait TIOBE et PYPL c’est un peu plus sujet à caution de mon point de vue.

Message 9, par Iota

§ Posté le 26/07/2013 à 18h 05m 00

Pour apporter ma pierre à l'édifice, Fortran est encore utilisé à certains endroits.


De ce que je connais, c'est encore utilisé dans la recherche, en partie parce que beaucoup de chercheurs n'ont appris que ça et ne savent utiliser que ça (inertie de groupe, quand tu nous tiens...), et ça ne m'étonnerait pas que de nouveaux codes soient encore écrits dans ce langage. Il suffit de voir que la dernière "version" de Fortran date de 2008.


D'un certain point de vue, c'est dommage parce qu'il y a des langages plus agréables, mais d'un autre, il reste totalement adapté pour écrire un gros code de simulation qui doit être performant, et pour être performant, un langage plutôt bas niveau (par rapport à des langages comme Python ou Haskell, que tu cites, où l'on a notamment pas besoin de se préoccuper de la gestion de la mémoire) c'est pratique (je ne dis pas que c'est nécessaire, les compilateurs ont fait pas mal de progrès dans ce qui est d'optimiser à la place du programmeur, même si c'est pas la panacée). De ce que j'en vois, ça risque de prendre pas mal de temps avant que les gens (et les labos) se mettent à coder dans un autre langage, même s'il y a (heureusement !) de l'espoir.

(Suite au décès inopiné de mon précédent serveur, je profite de mettre en place une nouvelle machine pour essayer de refaire un outil de blog digne de ce nom. J'en profiterai d'ailleurs aussi pour repasser un peu sur certains articles, qui commencent à être particulièrement datés. En attendant, le système de commentaires de ce blog n'est plus fonctionnel, et a donc été désactivé. Désolé ! Vous pouvez néanmoins me contacter si besoin par mail (« mon login at ma machine, comme les gens normaux »), ou d'ailleurs par n'importe quel autre moyen. En espérant remettre les choses en place assez vite, tout plein de datalove sur vous !)