Généralités Introduction à lʼinformatique Lʼinformatique peut se définir comme lʼensemble des sciences et des techniques qui portent sur lʼordinateur et le traitement par lʼordinateur dʼinformations quantifiables de tout type. Aho et Ullman ont une autre vision : pour eux, cʼest la science de la mécanisation de lʼabstraction.1 En informatique, on cherche à résoudre au moyen de lʼordinateur des problèmes modélisés puis reconstruits sous une forme qui permet un traitement automatique sur lʼordinateur. En pratique — mais seulement en pratique ! — lʼinformatique est indissociable de lʼordinateur. Lʼinformatique Lʼordinateur Les grands systèmes Les serveurs Sciences et techniques Les sciences informatiques sʼintéressent aux aspects théoriques de lʼinformatique, cʼest-à-dire à des problèmes comme la calculabilité, lʼexactitude ou la faculté de représenter un objet réel par un modèle qui peut être traité par ordinateur. Par exemple : • lʼordinateur peut-il exécuter nʼimporte quelle tâche ? Sinon, peut-on déterminer ce qui est calculable et ce qui ne lʼest pas ? • Peut-on prouver que telle ou telle façon de résoudre un problème informatique est correcte ? Si oui, comment ? Les techniques informatiques (information technology ou IT), elles, décrivent les applications de ces connaissances théoriques dans toutes sortes de domaines. Certaines ne concernent que les professionnels de lʼinformatique, comme celle-ci : • quels sont les moyens de résoudre un problème de programmation donné ? Parmi ces moyens, quel est le meilleur du point de vue de la lisibilité ? Et du point de vue des performances ? Dʼautres intéressent tous les utilisateurs dʼordinateurs, quʼils soient ou non informaticiens. Par exemple : • quelle logique de dialogue faut-il mettre en place pour que les applications bureautiques comme le tableur ou le traitement de texte soient aussi simples dʼemploi que possible ? La notion dʼordinateur Lʼélément central de la définition de lʼinformatique est lʼordinateur. Cʼest un processeur dʼinformations, une machine à traiter des informations. Lʼordinateur est une machine unique en son genre, car il ne gère que des objets abstraits. 1 Alfred V. Aho et Jeffrey d. Ullman, Foundations of Computer Science, Computer Science Press, New York, 1992, p. 1. Introduction à lʼinformatique 1 http://www.jaquet.org, octobre 2009 Il travaille en trois étapes : lʼinterprétation, lʼexécution et la transmission des résultats. Lʼétape de lʼinterprétation correspond à la compréhension chez lʼêtre humain, comme dans le fait de savoir lire lʼinstruction « introduire le ticket dans la position indiquée sur le schéma » et de donner un sens à ces mots. Lʼétape de lʼexécution correspond à la mise en oeuvre, comme dans lʼaction dʼintroduire le ticket de la manière indiquée. Lʼétape de la transmission des résultats correspond à la communication, comme dans le message « reprenez votre ticket ». Techniquement, un ordinateur peut se définir comme une machine dotée de quatre caractéristiques : la programmabilité, le traitement dʼinformations, le traitement numérique et la construction électronique. La programmabilité est la capacité de lʼordinateur de traiter une suite de plusieurs instructions. Le traitement dʼinformation signifie que lʼordinateur travaille sur des informations (en notant quʼelles doivent être existantes ; un ordinateur ne peut pas en créer). Le traitement numérique signifie que lʼordinateur gère des informations discrètes, non continues. La construction électronique renvoie au fait que les ordinateurs actuels sont électroniques. La programmabilité et le traitement dʼinformations sont les deux caractéristiques essentielles de lʼordinateur. Sans moyens de suivre les instructions dʼun programme et de traiter des informations, un ordinateur ne pourrait rien faire dʼutile. Les deux autres caractéristiques sont moins fondamentales. Le fait quʼun ordinateur soit numérique ne tient quʼà la difficulté de concevoir un ordinateur analogique qui offre un bon rapport efficacité-prix. Quant au fait quʼil soit électronique, cʼest sans grand intérêt, dans la mesure où la technique de construction importe peu ; cʼest la logique de fonctionnement qui compte. Ainsi, au XIXe siècle, le mathématicien anglais Babbage a conçu un ordinateur mécanique, et, dans les années 1940, lʼAllemand Zuse a construit un ordinateur électromécanique. Actuellement, des chercheurs travaillent sur les techniques optiques. Chaque fois, il sʼagit pourtant clairement dʼun ordinateur. Bien quʼil ait été conçu vers 1830, lʼAnalytical Engine de Babbage pourrait faire tourner les programmes que nous utilisons aujourdʼhui. Simplement, il le ferait beaucoup plus lentement. La notion dʼalgorithme La notion dʼalgorithme est centrale en informatique, mais on la rencontre dans tous les domaines dʼactivité humaine : on coud une robe selon lʼalgorithme fourni par des instructions de travail, sur la base dʼun patron ; on construit un modèle réduit en suivant les instructions dʼassemblage ; on exécute une sonate en se conformant à une partition.2 On appelle processeur lʼagent qui exécute un algorithme — un processeur peut donc être une personne, un animal, une plante, une machine, etc. 2 Les Goldschlager et Andrew Lister, Computer Science, Prentice Hall, New York, 1988, p. 2. Introduction à lʼinformatique 2 http://www.jaquet.org, octobre 2009 Lʼalgorithme décrit une méthode de résolution dʼun problème, sous la forme dʼune suite dʼétapes décrite par des règles. Cette suite dʼétapes est : • non ambiguë ; • ordonnée ; • finie. On rencontre des algorithmes partout où des problèmes solubles existent, mais il en existe de bons et de mauvais. Un exemple dans la vie courante est celui de la serveuse à qui on a commandé quatre cafés et un thé, qui revient avec les boissons et qui demande quatre fois « un café, pour qui ? » avant de terminer en donnant le thé, alors que le meilleur algorithme aurait évidemment voulu que la serveuse se contente de la question « le thé, cʼest pour qui ? » avant de servir leur café aux autres personnes. Le chemin suivi par lʼalgorithme peut aussi être difficile à trouver. Cʼest le cas du paradoxe du barbier, selon lequel il y a, dans un certain village, un barbier qui rase tous les hommes qui ne se rasent pas eux-mêmes et seulement ceux-là. La question est : le barbier se rase-t-il lui-même ? Puisque tout homme du village nʼest rasé par le barbier que sʼil ne se rase pas lui-même, on peut en déduire que le barbier ne se rase lui-même que sʼil ne se rase pas lui-même, ce qui est incohérent. Comment résoudre ce paradoxe ? On peut montrer quʼil y confusion de niveau, que le barbier ne peut être vu ni comme un élément de la classe des hommes qui se rasent eux-mêmes ni comme un élément de celle des hommes qui ne se rasent pas eux-mêmes, car les éléments de ces classes forment les objets sur lesquels il agit en tant que sujet. Il se situe donc à un niveau audessus du leur. En fait, il ne peut pas exister de barbier qui rase tous les hommes qui ne se rasent pas eux-mêmes et seulement ceux-là. Fréquemment, il nʼexiste tout simplement pas dʼalgorithme pour résoudre un problème. Se trouvent dans ce cas les innombrables questions qui se posent dans des termes étrangers à lʼalgorithmique : la mer est-elle plus belle que la montagne ? Y a-t-il des guerres justes ? Que se passera-t-il demain ? Même dans les domaines techniques, il existe des problèmes impossibles à résoudre. Il y a, par exemple, en mathématique, le dixième problème dʼHilbert, qui date de 1900 : existe-t-il un algorithme qui permet de décider si une équation diophantienne admet ou non des solutions en nombres entiers ? (en simplifiant, une équation diophantienne est un polynôme dont la somme des termes est égale à zéro et dont les coefficients et les exposants sont des nombres entiers ; x = 0 en constitue un exemple ; ax2 - 3y2 - 1 = 0 un autre). Actuellement, on ne sait toujours pas si cet algorithme existe. Algorithmes universels Voici un exemple dʼalgorithme universel, cʼest-à-dire dʼalgorithme applicable partout et toujours : Préparation du thé à la menthe Faire bouillir un litre dʼeau Mettre 3 cuillères à soupe de thé vert dans une théière de ¾ de litre. Verser un décilitre dʼeau bouillie dans la théière. Laisser repose 30 secondes. Jeter le thé obtenu. Introduction à lʼinformatique 3 http://www.jaquet.org, octobre 2009 Remplir la théière dʼeau bouillie. Chauffer à petit feu jusquʼà ce que les feuilles de thé montent à la surface. Ne pas laisser bouillir. Retirer la théière du feu. Froisser une poignée de menthe fraîche et lʼajouter dans la théière. Ajouter du sucre selon goût (par exemple seize morceaux). Cet algorithme a un caractère universel dans le sens où il peut être exécuté correctement sur nʼimporte quel moyen de chauffage en état de fonctionnement. Une remarque : la condition « en état de fonctionnement » est évidente pour un être humain, mais il nʼen va pas de même pour un ordinateur. Rien ne va de soi pour une machine, et une des difficultés de lʼinformatique consiste à gérer tous les cas susceptibles de conduire à une situation dʼerreur. On dit dʼailleurs que, sʼil y a une possibilité dʼerreur, quelquʼun la trouvera. Algorithmes non universels Un algorithme qui nʼest pas applicable en général nʼest pas universel. Dans certains cas, il sʼagit dʼune bévue, comme dans lʼinstruction Cuire au four sur position 3 où « position 3 » ne veut rien dire pour les personnes qui nʼutilisent pas la même cuisinière. Dans dʼautres cas, la non-universalité est volontaire et constitue un moindre mal, comme dans le cas réel que voici : un administrateur de système informatique souhaitait installer sur les postes de travail une certaine combinaison de produits formée dʼun système dʼexploitation et dʼun ensemble de progiciels de bureautique comprenant une messagerie. La méthode devait être la suivante : 1. Installer le système dʼexploitation 2. Installer le logiciel dʼapplication. Mais cela ne fonctionnait pas. Il y avait un problème dʼincompatibilité provoqué par la messagerie, cela sans quʼon sache dʼoù il venait, ce qui ne permettait pas de résoudre le problème dʼune manière systématique. Lʼadministrateur a donc travaillé par essais et erreurs, ce qui a abouti à lʼalgorithme suivant : 1. Installer le système dʼexploitation 2. Installer la version précédente de la messagerie 3. Installer par dessus la nouvelle version de la messagerie 4. Installer le logiciel dʼapplication en désactivant lʼinstallation de la messagerie. Cette approche tient du bricolage et nʼest pas satisfaisante pour lʼesprit, mais on est assez souvent obligé dʼy recourir en informatique. La notion dʼinformation Dans le sens courant du terme, une information peut être définie comme tout ce qui est porté à notre connaissance. « La réunion a lieu à dix heures » est une information. Toutefois, les scientifiques ont une vision différente de lʼinformation : ils ne sʼattachent pas à sa signification, mais à sa transmission (cf. notamment les travaux de D. McKay, C.E. Shannon, W. Weaver et N. Wiener). Une information se définit comme ce qui est transmis par un signal. Cʼest Introduction à lʼinformatique 4 http://www.jaquet.org, octobre 2009 une définition un peu bizarre, du genre de « le chien, cʼest si la bête aboie », mais elle présente lʼintérêt de faire abstraction de la signification des informations. Dans un ordinateur, tout se réduit à des impulsions électriques et à deux états : ouvert et fermé. On symbolise ces deux états par les chiffres 0 et 1. Par exemple, les sept caractères qui composent lʼexpression « un chat » se représentent en code ASCII par la séquence suivante de nombres binaires : 1110101110111001000001100011110100011000011110100 Il est important de comprendre que le contenu de cette suite de bits échappe totalement à la machine. Elle nʼen voit que la forme. Par exemple, les chaînes de caractères « un chat » et « un terroriste » sont exactement pareilles pour un ordinateur. Lʼêtre humain et quelques rares animaux sont seuls capables de voir les différences sémantiques entre les mots. Cʼest, soit dit en passant, la raison pour laquelle la notion dʼ« intelligence artificielle » est une idiotie. Croire à lʼintelligence artificielle, cʼest la même chose que de sʼimaginer quʼune chaîne Hi-Fi a le sens musical. La notion de donnée (data ou datum) est considérée ici comme synonyme de celle dʼinformation. Avant les années 60, les spécialistes des théories de lʼinformation estimaient souvent que lʼinformation était une forme structurée de la donnée, mais cette distinction nʼétait pas opératoire parce que ce qui est vu comme une donnée dans un contexte particulier peut se percevoir comme une information dans un autre contexte. La distinction entre les deux notions nʼa pas de lien avec la nature de lʼobjet observé, mais avec le regard de lʼobservateur. En informatique, une information ou une donnée peut se définir comme tout ensemble de bits manipulable par lʼordinateur et compréhensible pour lʼêtre humain. Elle est formalisée de manière à permettre au système informatique qui lʼabrite de la traiter, de la stocker et de la transmettre. La notion de système informatique désigne lʼensemble formé de lʼordinateur, des périphériques et du logiciel. Principes architecturaux Un système informatique a une architecture, cʼest-à-dire une apparence fonctionnelle. Ce que nous, utilisateurs finals et utilisateurs informaticiens, voyons dʼun système informatique est son architecture. Une bonne architecture de système présente certaines caractéristiques.3 1. La cohérence (consistency) veut que la même logique sʼapplique partout, ce qui veut dire que, si on connaît une partie du système, le reste peut être déduit. Par exemple, lʼaccès à une fonction donnée doit être identique dans tous les programmes dʼapplication. Si la combinaison de touches Ctrl-i a toujours pour résultat de mettre le texte en italique, quel que soit le programme utilisé, la cohérence est respectée. 2. Lʼorthogonalité (orthogonality) prévoit que deux fonctions logiquement indépendantes doivent être séparées dans leur fonctionnement. Par exemple, le fait que le bouton Arrêter ne sʼaffiche 3 G. A. Blaaw et F. P Brooks, Computer Architecture, Technical University of Twente, Twente, 1985. Introduction à lʼinformatique 5 http://www.jaquet.org, octobre 2009 pas sur lʼécran dʼouverture de session de Windows 7 si on est en mode « Verrouillé » et quʼil réapparaisse si on clique sur Changer dʼutilisateur constitue une violation de ce principe. 3. La propriété (propriety) veut que les fonctions dʼun système soient cohérentes avec ses objectifs. 4. La parsimonie (parsimony) dérive de la propriété. Un système doit comprendre uniquement les fonctions cohérentes avec ses objectifs. 5. La transparence (transparency) dérive également de la propriété. Elle prévoit que les détails de mise en œuvre doivent être masqués dans la mesure du possible. Par exemple, sous Unix, toutes les entités se présentent comme des fichiers, y compris les périphériques. Cʼest une application du principe de transparence (et de celui de cohérence). 6. La généralité (generality) consiste à éviter de placer des barrières inutiles dans les fonctions. Le matériel et le logiciel Le matériel (hardware) réunit lʼensemble des composants physiques dʼun système informatique, cʼest-à-dire tout ce quʼon peut voir et toucher : lʼordinateur, les périphériques et le petit matériel (câbles, supports de données, papier pour les imprimantes, etc.). Selon la définition de lʼISO (International Standards Organisation), le logiciel (software) est constitué des programmes, des procédures, des règles et de la documentation informatique. Cʼest une création intellectuelle indépendante du matériel. LʼISO a une vision très large de ce quʼest le logiciel. Par exemple, le mode dʼemploi dʼun traitement de texte, une procédure concernant la sauvegarde des données ou un principe organisationnel concernant le choix des mots de passe en font partie. Les données font-elles partie du logiciel ? La réponse dépend du sens quʼon donne aux mots. Une donnée au sens large est une représentation quelconque qui utilise des signes et à laquelle on peut donner une signification, ce qui veut dire que les programmes, les procédures, les règles et la documentation en font partie, et que le logiciel est un sous-ensemble des données. Mais, en informatique, le terme de données sʼemploie souvent dans un sens plus restreint, qui ne sʼapplique quʼaux informations traitées par les programmes, cʼest-à-dire, par exemple, aux caractères gérés par un système de traitement de texte, aux écritures traitées par un programme de comptabilité ou aux formes vectorielles traitées par une application graphique. Dans ce sens restreint, les données traitées sont gérées par le système informatique. Elles ne font pas partie du logiciel, mais elles sont stockées sur la mémoire de la machine. Les données constituent la raison dʼêtre même des systèmes informatiques. Cʼest pour les traiter que lʼordinateur a été conçu, et toutes les tâches quʼil effectue se ramènent à des traitements de données. On distingue deux grandes catégories de logiciel : le logiciel de base et le logiciel dʼapplication. 1. Le logiciel de base se compose des programmes qui concernent le système informatique ou lʼactivité professionnelle des informaticiens. Introduction à lʼinformatique 6 http://www.jaquet.org, octobre 2009 2. Le logiciel dʼapplication regroupe les programmes qui concernent les activités des utilisateurs finals, cʼest-à-dire des utilisateurs non informaticiens. Il existe deux types dʼapplications : • les programmes spécifiques, qui sont faits sur mesure pour un client ; • les progiciels, que lʼon trouve prêts à lʼemploi dans le commerce. Un progiciel sʼutilise sans modification et de manière autonome. Il comprend une documentation et un service après-vente. Des produits comme Word ou Photoshop sont des progiciels. Par contre, Linux, Windows ou un antivirus ne sont pas des progiciels parce quʼils font partie du logiciel de base et non du logiciel dʼapplication. Le système dʼexploitation Le système dʼexploitation (operating system, OS) fournit les moyens de fonctionnement de lʼordinateur en gérant la succession des tâches dans les processeurs, le partage de la mémoire entre les tâches, les échanges avec les périphériques, lʼorganisation des fichiers, le dialogue avec lʼutilisateur, etc. Introduction à lʼinformatique 7 http://www.jaquet.org, octobre 2009 Le cœur du système dʼexploitation sʼappelle le noyau (kernel). Il sʼoccupe des trois tâches fondamentales du système dʼexploitation : la gestion des processeurs centraux, de la mémoire et des entrées-sorties. Ce sont les trois tâches indispensables, celles qui sont présentes dans tous les systèmes dʼexploitation. 1. La gestion des processeurs centraux concerne lʼordonnancement des tâches (quels programmes sont traités, pendant combien de temps, selon quelle méthode de roulement, etc.). 2. La gestion de la mémoire porte sur lʼallocation de mémoire à chaque programme en exécution (stockage des programmes et des données). 3. La gestion des entrées-sorties concerne les échanges entre lʼunité centrale et les périphériques. En règle générale, le noyau travaille en mode superviseur, ce qui signifie quʼil a tout pouvoir sur lʼordinateur. Le reste du logiciel travaille en mode utilisateur, ce qui veut dire quʼil ne peut pas faire ce quʼil veut. Par exemple, une directive dʼallocation de mémoire doit être émise en mode superviseur pour être exécutée. Autour du noyau, il y a la superstructure. Elle regroupe généralement deux tâches : la gestion des fichiers et lʼinterface avec lʼutilisateur. 4. La gestion des fichiers concerne la structure du stockage des fichiers sur les mémoires externes (disques durs, clés USB, CD, DVD, etc.). Sous Windows, cʼest Explorer qui permet à lʼutilisateur de gérer ses fichiers, et, sous Mac OS, cʼest le Finder. 5. La gestion de lʼinterface avec lʼutilisateur porte sur la logique de dialogue avec lʼutilisateur. Il y a trois possibiités : lʼinterface par commandes ou CLI (Command Language Interface), lʼinterface par menus et lʼinterface graphique ou GUI (Graphical User Interface). Les trois logiques sʼemploient en parallèle. Les systèmes dʼexploitation les plus connus du grand public sont ceux de la famille Windows. Sur les postes de travail, ce sont XP, Vista et Windows 7, et, sur les petits et moyens serveurs, 2003 et 2008. Lʼautre grande famille de systèmes dʼexploitation est celle de Unix. En font notamment partie les systèmes dʼexploitation Solaris, HP-UX, Linux et BSD. Ils sʼemploient peu sur les postes de travail et beaucoup sur les serveurs de toute taille. Linux est le système dʼexploitation de la plupart des superordinateurs. Un grand ordinateur Unix coûte plusieurs millions dʼeuros. Il est capable de traiter des millions de transactions par jour pour des milliers dʼutilisateurs simultanés. Il existe dʼautres systèmes dʼexploitation, mais ils sont beaucoup moins répandus que Windows et Unix. Lʼexemple le plus connu est z/OS, le dernier environnement IBM de la famille MVS. Les programmes de service Aussi appelés utilitaires (utility programs), les programmes de service sont complémentaires du système dʼexploitation. Ils fournissent des services quʼon considère comme non essentiels, raison Introduction à lʼinformatique 8 http://www.jaquet.org, octobre 2009 pour laquelle on ne les place pas dans le système dʼexploitation. Toutefois, les systèmes dʼexploitation tendent à les absorber. Par exemple, les navigateurs web étaient considérés comme des programmes de service, mais on commence à les voir comme des parties intégrantes du système dʼexploitation. Parmi les programmes de service, certains sʼemploient sur les serveurs. Cʼest le cas, notamment, des programmes de sauvegarde et des utilitaires de gestion des données. Dʼautres sʼutilisent sur les postes de travail, comme les programmes antispyware et antispam. Dʼautres encore, comme les antivirus, concernent aussi bien les serveurs que les postes de travail. Les programmes de services se différencient des programmes dʼapplication par le fait quʼils ne concernent pas le métier des utilisateurs. Ils concernent le système informatique et fournissent des services généraux. Les langages de programmation Les langages de programmation sont des ensembles artificiels de règles et de signes qui permettent aux êtres humains de faire exécuter des tâches par les ordinateurs. Il existe deux familles de langages : les langages interprétés et les langages compilés. 1. Avec les langages interprétés, on écrit un programme dans le langage choisi (par exemple, Python ou Ruby) et on le laisse sous cette forme, qui sʼappelle le code source, et qui est lisible pour lʼêtre humain. Pour lʼexécuter, il faut disposer dʼun interpréteur, un logiciel dont la fonction consiste à lire le code source, ligne après ligne, et à traduire chaque commande en langage-machine, qui est le seul langage que lʼordinateur peut traiter. 2. Avec les langages compilés, on commence aussi par écrire le programme en code source, mais on passe ensuite le source dans un logiciel appelé compilateur, qui le transforme en code exécutable. Cette forme de code est illisible pour lʼêtre humain, mais lʼordinateur peut traiter le programme qui en résulte sans lʼaide dʼun interpréteur. Voici quelques langages importants : • Fortran (1957), très utilisé en informatique scientifique jusquʼà aujourdʼhui. Les prévisions météo sont très souvent faites en Fortran. • Lisp (1958), un langage au formalisme inhabituel, qui garde un cercle dʼutilisateurs. Sous le nom dʼAutoLisp, cʼest toujours le langage principal du logiciel de dessin technique AutoCAD. • Cobol (1960), le langage le plus utilisé en gestion jusquʼaux années 1990. Il reste de nombreuses applications en Cobol. • Basic (1963), un langage populaire mais mal conçu (la numérotation des lignes de code et la commande GOTO sont deux des idées les plus mauvaises de lʼhistoire de lʼinformatique). Il en existe une forme débarrassée de ces tares : Visual Basic. • C (1972), le langage le plus populaire dans les années 1990. Il est remplacé par le C++, mais beaucoup de programmeurs utilisent le C++ comme si cʼétait du C. • C++ (1983), toujours très utilisé dans lʼindustrie du logiciel. • Perl (1987), répandu dans le monde du web. Introduction à lʼinformatique 9 http://www.jaquet.org, octobre 2009 • Java (1995). Cʼest le langage le plus populaire actuellement parce quʼil est universel : il fonctionne sur pratiquement toutes les plates-formes informatiques (Microsoft, Mac OS, Linux, etc.) ainsi que sur dʼautres types de systèmes (téléphones, électronique grand public, etc.). • Javascript (1995), répandu dans le monde du web. Malgré son nom, ce langage nʼa rien à voir avec Java et il ne lui ressemble pas du tout. • PHP (1995), également répandu dans le monde du web. • C# (2001), prononcé C sharp. Cʼest le langage que Microsoft a mis au point pour succéder au C et au C++. Il nʼest guère utilisé en dehors du monde Windows, mais cʼest le langage central de « .NET », lʼenvironnement de programmation de Microsoft. Aujourdʼhui, PHP et Javascript sont les deux langages principaux du web. Java et C# sont les deux langages de programmation généralistes les plus populaires. Tous deux sont dérivés du C++ et la transition de lʼun à lʼautre est facile. En dehors de ces « quatre grands », il existe des centaines de langages de programmation. Parmi les plus intéressants, il y a Python (http://www.python.org) et Ruby (http://www.ruby-lang.org). Ils sont tous deux utilisables librement. Pour donner une idée de ces deux langages, voici un petit programme qui demande à lʼutilisateur de donner une température fahrenheit, qui la convertit en centigrade et qui affiche le résultat. En Python : # Conversion d’une temperature fahrenheit en temperature centigrade fahr = int(input(‟Temperature fahrenheit ? “)) centigr = (fahr - 32) * 5 / 9 print ‟Temperature centigrade : “ + repr(round(centigr)) En Ruby : 4 # Conversion d’une temperature fahrenheit en temperature centigrade puts ‟Temperature fahrenheit ? “ fahr = gets.to_i centigr = (fahr - 32) * 5 / 9 puts ‟Temperature centigrade : “ + centigr.to_s À la première ligne, le signe dièse annonce un commentaire. Le mot puts désigne ce quʼon appelle en programmation une méthode, cʼest-à-dire une action. Cette action est « afficher la chaîne de caractères qui suit » (puts est lʼabréviation de put string). Les mots fahr et centigr sont des variables. Une variable a un nom qui permet de la manipuler et un contenu variable qui permet de faire des opérations dessus — ici, de transformer une valeur fahrenheit en une valeur centigrade. 4 Pour plus dʼinformations, voir le document intitulé Apprendre à programmer avec Ruby. Introduction à lʼinformatique 10 http://www.jaquet.org, octobre 2009 Le mot gets désigne la méthode « lire la chaîne de caractères entrée par lʼutilisateur » (get string). Cette chaîne de caractères est transformée en nombre entier au moyen de la méthode to_i (to integer) avant dʼêtre placée dans la variable fahr. Le calcul a lieu dans la ligne centigr = (fahr - 32) * 5 / 9. À la fin, la méthode puts est reprise pour afficher le message « Température centigrade » et la valeur de la variable numérique centigr transformée en chaîne de caractères par la méthode to_s (to string). Ces changements de type sont nécessités par le programme : pour pouvoir effectuer des calculs sur des variables, il faut quʼelles soient numériques, mais, pour quʼon puisse les afficher accolées à un message, il faut quʼelles soient comme lui de type chaîne de caractères. Sinon, lʼinterpréteur va se plaindre quʼil y a type mismatch, disparité de types de données. Les SGBD Les SGBD (systèmes de gestion de bases de données) ou DBMS (database management systems) gèrent des bases de données, cʼest-à-dire des ensembles structurés dʼinformations qui forment le réservoir principal de données informatiques des organisations. Les SGBD ont quatre fonctions de base : ils permettent de définir une base de données, de la créer, de lʼutiliser et de lʼadministrer. La plupart comprennent un langage appelé SQL (prononcé seequel). Parmi les principaux produits du marché, on peut citer Oracle, DB/2, Sybase, Access, SQL Server, PostgreSQL, MySQL et SQLite. PostgreSQL, MySQL et SQLite sont dʼun type particulier : ils font partie du monde open source, où le code source dʼun programme est mis à la disposition de tous pour que lʼévolution du logiciel soit le fruit de la collaboration de toutes les personnes intéressées, et non des seuls employés de la firme qui édite le programme. On parle aussi de logiciel libre. Selon lʼOpen Source Initiative (http://www.opensource.org), le logiciel open source doit se conformer à trois principes : • il peut être distribué librement, sans aucune restriction ; • le code source est distribué avec le programme exécutable de telle manière que le destinataire puisse le modifier et lʼaméliorer ; • la licence dʼutilisation peut exiger que la version modifiée du programme porte un nom différent que la version originale. Le logiciel open source est souvent gratuit, mais pas forcément. Le système dʼexploitation Linux a été réalisé selon ce modèle et il en a largement été de même avec Unix dans les années 1980. Les applications La bureautique concerne le travail de bureau, notamment le traitement de textes, de tableaux financiers, de graphiques et de présentations. Introduction à lʼinformatique 11 http://www.jaquet.org, octobre 2009 Microsoft Office domine le marché dans ce domaine, mais il existe aussi une suite bureautique open source gratuite, OpenOffice.org (http://www.openoffice.org). Les programmes de gestion servent à gérer la comptabilité, la facturation, les stocks, les salaires, etc. Le plus connu est SAP, un progiciel de gestion intégré qui permet de gérer lʼinformatique dʼune moyenne ou grande organisation. Il rassemble une quinzaine de modules (dʼoù le qualificatif « intégré ») et recouvre lʼessentiel des activités de gestion. Selon le nombre dʼutilisateurs, le prix des licences de ce genre de programmes varie entre une centaine de milliers dʼeuros et plusieurs millions par année et le coût de mise en place est environ cinq fois plus élevé que le prix annuel des licences. Les programmes scientifiques sʼemploient pour des tâches comme les analyses statistiques ou la dynamique des flux. Ils fonctionnent le plus souvent sous un système dʼexploitation de la famille Unix. La météo est un exemple dʼapplication scientifique. La télématique (telematics) peut se définir comme lʼensemble des services de nature ou dʼorigine informatique pouvant être fournis à travers des réseaux de télécommunication (définition du Journal officiel, 17/1/1982). Lʼinternet en constitue lʼexemple type. Les applications sont nombreuses : téléachat, telebanking, formation à distance (e-learning), etc. Les tables de caractères Un ordinateur ne sait gérer que des impulsions électriques et ses composants fondamentaux, les transistors, ne connaissent que deux états : ouvert ou fermé, 0 ou 1. Toutes les données traitées par un ordinateur doivent donc être représentées par des 0 et des 1 — toutes, sans exception : lettres, chiffres, caractères de ponctuation, photos en couleur, etc. De plus, il faut éviter que les textes envoyés se transforment en suites incompréhensibles de bits à lʼarrivée. Cʼest pourquoi lʼAmerican Standards Association a créé une table de caractères appelée ASCII (prononcé aski) en 1963. Elle utilise 7 bits, ce qui veut dire quʼelle permet de définir 27 signes. Ils sont numérotés de 0 à 127. À bientôt 50 ans, elle reste utilisée aujourdʼhui, notamment en téléinformatique. Les 32 premiers signes et le dernier dʼentre eux sont des caractères de commande (control characters), mais ils ne sʼemploient pas tous. Parmi les plus importants, il y a : 0 null utilisé par beaucoup de langages de programmation pour signaler la fin dʼune chaîne de caractères 4 end of transmission 10 line feed fin de ligne, symbolisé par « \n » dans beaucoup de langages de programmation 27 escape interruption (aussi appelé « échappement »), symbolisé par « \e » 127 delete effacement ou écrasement du caractère qui suit le curseur fin de session dans un shell Unix (Ctrl-D) Introduction à lʼinformatique 12 http://www.jaquet.org, octobre 2009 Les chiffres 0 à 9 sont représentés par les caractères 48 à 57, les lettres majuscules par les caractères 65 à 90 et les lettres minuscules par les caractères 97 à 122. Le dièse est le 35, lʼarrobe le 64 et la barre oblique inversée (le backslash) le 92. Comme la table ASCII nʼutilise que 7 bits, elle ne permet pas de représenter les lettres accentuées. Les tables ISO-8859 résolvent ce problème en codant les caractères sur 8 bits, ce qui donne 256 possibilités, et elles sont compatibles avec le codage ASCII — leur 128 premiers caractères sont ceux de la table ASCII. La table 8859 la plus répandue est la 8859-1, aussi appelée Latin-1 ou Occidental. Toutefois, la meilleure solution consiste à utiliser une seule table comprenant tous les caractères de toutes les langues, sous toutes leurs formes (en arabe, par exemple, un caractère peut sʼécrire de trois façons différentes selon quʼil se trouve au début, au milieu ou à la fin dʼun mot). Cette solution, cʼest Unicode. Il y a trois codages Unicode principaux. Avec quatre milliards de possibilités, le jeu UTF-32 contient tous les caractères imaginables, mais il utilise 32 bits par caractère, ce qui veut dire que, chez nous, un fichier occupe quatre fois plus de place que nécessaire. UTF-16 nʼemploie que 16 bits par caractère, mais il reste inutilement grand en Occident. UTF-8 est compact, lui, mais il complique le travail du logiciel qui traite le texte : les caractères les plus communs sont stockés sur 8 bits, ceux un peu moins répandus sur 16 et les plus rares sur 24 voire 32 bits. UTF-16 est le codage par défaut de Windows et Mac OS tandis que cʼest UTF-8 qui sʼemploie le plus dans le monde Linux. Sur le web (cʼest-à-dire sur les navigateurs), le codage le plus utilisé est UTF-8, suivi par ISO-8859-1 et ASCII. Voici comment on active le codage UTF-8 sur une page web : <meta http-equiv=‟Content-Type“ content=‟text/html; charset=utf-8“ /> Cʼest grâce au fait quʼun traitement de texte est compatible avec Unicode quʼon peut, par exemple, écrire le mot « Japon » en japonais avec la même facilité quʼen français : 日本. Introduction à lʼinformatique 13 http://www.jaquet.org, octobre 2009