Savoir programmer pour mieux comprendre le monde : quelques exemples

Cet article s’adresse à tout le monde, que vous ayez déjà fait de la programmation informatique ou non. Il vise à expliquer, par des exemples, pourquoi je défends l’idée qu’avoir fait de la programmation informatique permet de mieux comprendre certains enjeux sociaux. Cet article assume que l’informatique fait partie de nos vies au point où il serait difficile de faire sans, voire impossible (ou en tout cas, revenir en arrière demanderait un temps d’adaptation). Et c’est bien vrai : qui ne rencontrerait pas d’embûches à être parachuté en 1910, demain matin ? Sans sa carte de crédit, son téléphone et un wifi à chaque coin de rue ?

Il est assez aisé de comprendre l’impact de l’informatique dans certaines sphères. Nous n’avons pas de difficulté à imaginer la catastrophe que représenterait le piratage des systèmes informatiques de Wall Street. Mais au-delà de ça, se prononcer de façon réaliste sur ce scénario catastrophe demande peut-être une certaine expertise : est-ce qu’un tel piratage est possible ? Dans quelles conditions est-ce possible ? Qui peut bien parvenir à cela ? Pouvons-nous faire quelque chose pour participer à prévenir cela ? D’abord, mettons une chose au clair : oui, on peut faire quelque chose pour participer à prévenir cela, mais c’est un peu comme n’importe quel grand problème social ou planétaire (ex. : une famine) : il y a peu d’actions individuelles directes que l’on peut poser, mais on peut participer en exerçant notre rôle de citoyen : s’informer, s’exprimer et agir localement.

Je suggère que de plus en plus d’enjeux sociaux intègrent une dimension technologique qui peut être mieux comprise par une connaissance de la programmation informatique. Plus encore, dans certains cas, cette dimension me semble parfois croître au point de devenir une barrière à la compréhension de l’enjeu. Voici un schéma, conçu pour l’occasion, qui illustre cette idée : schema_enjeu

Voici donc quatre enjeux (ou sujets d’actualité) dont la compréhension gagne en profondeur pour des programmeuses ou programmeurs.

Une bonne blague

Commençons notre exploration par une bonne blague qui fait rigoler les programmeurs et programmeuses. Au Québec, nous avons vu apparaître les radars photos sur la route en 2009. Ils étaient déjà présents ailleurs, en Europe par exemple. Le système est simple : en cas d’excès de vitesse, un appareil prend une photo puis un programme parvient à lire la plaque d’immatriculation pour émettre un constat d’infraction au propriétaire. Qu’arriverait-il si l’on décorait sa voiture ainsi ? :
i_voiture-sql-description

Cette instruction, dans un contexte particulier, permettrait en fait de supprimer un paquet de données de l’ordinateur qui tente de décoder les plaques d’immatriculation. On a vu circuler ce genre de photos plusieurs fois, et je n’ai pas connaissance que ça ait fonctionné pour vrai. Toutefois, ça fait rigoler spontanément quiconque a déjà travaillé avec le langage SQL, parce que c’est techniquement possible.

En fait, cette blague repose sur la présomption que l’ordinateur, après avoir lu ce qui se trouve sur la voiture, fera une recherche dans la base de données, du genre :

SELECT nomDuProprietaire FROM proprietaires WHERE plaqueImmatriculation = 'INSÉRER LA PLAQUE ICI';

Lire : “Récupérer le nom du propriétaire dont la plaque est […] “

Or, si la plaque est :

ABC123'; DELETE DATABASE immatriculation; --

On obtiendrait :

SELECT nomDuProprietaire FROM proprietaires WHERE plaqueImmatriculation = 'ABC123'; DROP DATABASE immatriculation; --';

Il n’est pas nécessaire de comprendre tout ce “charabia” si cela ne vous dit rien. Mais vous pouvez comprendre l’idée essentielle : en gros, ça supprimerait toutes les données d’immatriculation de tout le monde.

Bon, ça fait rigoler, mais nous sommes quand même curieux de savoir si les gens qui ont développé ces logiciels ont pris des mesures de sécurité pour nous protéger (pas que pour cet exemple, les possibilités d’attaques sont pratiquement infinies). La question de la légitimité des constats d’infraction émis par des radars photos revient de temps à autre dans l’actualité, par exemple lors du dépôt de deux demandes de recours collectifs de la part de conducteurs ayant obtenu des infractions. Or, je soutiens ainsi qu’une connaissance, même rudimentaire, de la programmation informatique permet d’ajouter une dimension technologique à notre compréhension de l’enjeu.

Dans ce cas-ci, voici des apports possibles de la programmation informatique :

  • La connnaissance du langage SQL permet de repérer des vulnérabilités possibles du système de radars photos.
  • La connaissance de la programmation orientée objet aide à identifier rapidement des acteurs impliqués dans différents contextes. Passage d’une voiture : voiture, conducteur, appareil photo, radar, flash). Installation des radars photos : gouvernement, ministère des Transports, compagnies privées, travaux routiers, endroits à cibler.
  • La familiarité avec le développement itératif aide à saisir le déploiement progressif sur le territoire sur plusieurs années.

Intel Management Engine

Depuis environ 2006, la plupart des processeurs produits par la compagnie Intel sont équipés du logiciel Intel Management Engine. Le processeur est l’élément central d’un ordinateur à travers lequel tout, absolument tout, doit passer. Le Intel Management Engine est un logiciel placé directement dans le processeur qui peut avoir accès à toutes les composantes de l’ordinateur (ex. : le disque dur, la caméra, les réseaux, etc.). Il peut fonctionner même lorsque l’alimentation de votre ordinateur est réduite (lorsqu’il est en veille) et peut accéder aux wifi auxquels vous vous connectez. Exemple un peu alarmiste, mais qui fait réfléchir : ce logiciel est tellement au coeur de l’ordinateur qu’il a à la fois accès à votre caméra et à la petite lumière qui s’allume lorsqu’elle capte des images et peut agir sur les deux à votre insu (je n’affirme pas que c’est le cas, et je n’ai aucun moyen de le savoir). À la base, ce logiciel a été développé pour faciliter la vie des administrateurs informatiques. Ça peut s’avérer très utile pour faire des mises à jour sur plusieurs ordinateurs, par exemple.

Ce logiciel est propriétaire, c’est-à-dire que personne, sauf la compagnie Intel, ne peut voir comment il est conçu et ce qu’il fait réellement. Si on parvient à le désinstaller, le processeur cesse de fonctionner. Sans tomber dans le conspirationnisme et considérant qu’Intel est une des deux compagnies productrices de la presque totalité des processeurs au monde, il est tout à fait légitime de se questionner : qu’arriverait-il si ce logiciel était piraté ? Est-ce que cela pourrait servir d’arme politique, sachant qu’il peut (techniquement) agir sur tous nos téléphones portables et ordinateurs ?

Encore une fois, continuons d’utiliser nos ordinateurs et ne versons pas dans la paranoïa. Mais soyons tout de même conscients de ces enjeux et tentons de les éclairer pour se rassurer.

Au sujet du Intel Management Engine, voir Intel & ME, and why we should get rid of ME (en anglais) ainsi que la page d’Intel à ce sujet.

Voitures intelligentes

Self-parking_PriusLa question des voitures intelligentes pose de nouvelles questions éthiques. Outre celles qui concernent la prise de décisions mettant des vies en jeu par un ordinateur, nous devons considérer les questions éthiques liées au fonctionnement de ces ordinateurs. Il a toujours été possible de s’affairer à inspecter soi-même sa voiture et à tenter d’en comprendre le fonctionnement. Ceux qui le désirent peuvent cultiver leurs connaissances en mécanique et les utiliser pour comprendre comment fonctionne la machine qu’ils utilisent quotidiennement. Avec de nouveaux systèmes informatiques qui peuvent agir sur toutes les fonctions de la voiture, on devrait peut-être pouvoir faire de même : si je veux comprendre le système de freinage de ma voiture, pourquoi ne pourrais-je pas inspecter, si je le désire, le logiciel qui permet de contrôler les freins ? Est-il juste qu’une marque de voiture ait un système de détections de collisions plus efficace en raison de son logiciel plus avancé ? Est-ce là une question de simple concurrence ou un véritable enjeu démocratique ? Toutes ces questions sont légitimes. Personnellement, je crois me les poser en parce que j’ai de l’expérience en programmation informatique.

J’avance l’idée qu’avoir fait de la programmation informatique permettrait d’adopter une position plus éclairée face à ces enjeux. Programmer, ça se résume souvent à résoudre des bogues, mais surtout à être conscient que rien ne se fait par magie. Plus ça a l’air d’être magique, plus des gens y ont travaillé et ont imaginé les nombreux cas de figures possibles. Sans vouloir programmer lui-même sa voiture, un ou une programmeuse pourrait chercher à avoir une compréhension globale de la façon dont sa voiture détecte les piétons qui traversent la rue avant d’en faire l’achat. Juste pour voir si ça peut effectivement faire le travail au moins aussi bien qu’un être humain. Ça permet d’être un consommateur un peu plus responsable.

Couper Internet dans tout le pays pour éviter la tricherie à un examen

Voilà une dépêche du 1er juin 2017 qui semble assez loufoque, mais qui est vraie : L’Éthiopie suspend la connexion à Internet sur l’ensemble de son territoire pour prévenir les fuites à des examens officiels. Aux grands maux les grands moyens, non ? Je vois deux aspects intéressants à cette histoire : l’aspect politique, et toute la question des libertés individuelles, et l’aspect technique. Ce dernier point peut être mieux éclairé si l’on a déjà eu à programmer à l’aide de réseaux informatiques. Attention ici : pas besoin d’avoir eu à gérer le parc informatique du gouvernement pendant des années. Quiconque a l’habitude de connecter des appareils entre eux et de les faire interagir, peut développer une certaine compréhension des relations entre les appareils informatiques. Par exemple, on voit de plus en plus d’activités d’informatique et de robotique dans les écoles, ce qui peut habituer les élèves à développer une conscience des systèmes.

À l’échelle planétaire, le même principe est appliqué : différents appareils, entreprises, gouvernements et agences internationales sont impliqués dans le fonctionnement d’Internet et interagissent entre eux. Qui, au fond, décide si nous avons le droit de naviguer sur Internet ou non ? Un gouvernement a-t-il les moyens techniques de couper Internet sur son territoire ? Ces questions ne sont pas sans rappeler le débat en cours aux États-Unis sur la question de la neutralité de l’Internet, concept selon lequel tout le monde devrait avoir accès au même réseau sans aucune discrimination, notamment sur la capacité de payer.

En conclusion

Je m’arrête ici, préférant laisser les idées incomplètes plutôt que confuses. Apprendre la programmation informatique me semble un moyen idéal d’améliorer sa compréhension de plusieurs enjeux pour lesquels la dimension technologique est inévitable. Les exemples que j’ai donnés ont dépassé le stade des brèves technologiques qui n’intéressent que les geeks : ils illustrent de véritables enjeux sociaux qui nous concernent tous. Reste à voir si on pourrait être déroutés en réinterprétant certains enjeux, comme des conflits internationaux par exemple, en ajoutant cette dimension technologique. J’ai le sentiment que oui, mais j’ai encore de la difficulté à mettre des mots sur cette intuition.