L’interview du créateur du C++

Non dans un but de l’embellir, le langage C++ est un des langages proéminent dans le paysage de l’informatique moderne. C’est un langage souvent enseigné dans les instituts et universités, et souvent prédominants dans certains secteurs industriels, comme les systèmes embarqués, les jeux vidéo, la robotique, l’automobile, l’aéronautique, et beaucoup d’autres.

La vidéo en bas est l’interview du créateur du langage C++, c’est le danois Bjarne Stroustrup, par le célèbre académicien Lex Fridman sur sa chaîne Youtube de Podcast. Il a commencé la conception du langage dans le début des années 80 dans les laboratoires Bell Labs aux États-Unis. Il explique sur la vidéo comment il s’est inspiré du langage orienté objet Simula, et comment l’introduction de la Programmation Orientée Objet a fait un bond historique énorme sur la courbe d’évolution des langages de programmation.

Interview de Bjarne Stroustrup

La principale innovation derrière le langage C++ et la programmation orientée objet est de donner au programmeur la faculté et la flexibilité de créer ses propres types (appelés Classes), et la personnification de l’interaction entre leurs éléments (appelés Objets), ainsi permettre aux programmeurs de créer leurs propres opérations (appelés Méthodes). Ce qui était au préalable fixe ou limité dans les précédents  langages de programmation. Le C++ apporte aussi l’Héritage et le Polymorphisme. Le premier permet de réduire la définition et inter-lier les différents types créés. Et le 2e permet de choisir automatiquement l’opération adéquate et spécifique au type impliqué dans l’opération.

La partie à mon sens, la plus intéressante de l’interview, est lorsque Bjarne Stroustrup explique sa philosophie et sa vision directrice lors de la création du langage, c’est ce qui appelle zero-overhead, c’est mis en-avant sur la vidéo en bas. Son critère était qu’un mécanisme ou une abstraction pour qu’elle soit intégrée au langage, elle ne doit ajouter aucune ou zéro surcharge aux performances du programme. Comme par exemple pour les Classes, Il est toujours possible de recréer un concept similaire dans le langage C, mais d’un point de vue de programmation c’est plus facile de le faire en C++, et c’est surtout équivalent du point de vue de performance. C’est de même pour les Templates ou la programmation Générique. Bjarne Stroustrup a aussi fait l’explication d’un nouveau mécanisme appelé Concept, qui pour faire simple, permet aux programmeurs d’imposer des contraintes sur les opérations possibles sur les nouveaux types créés. Comme par exemple, on ne peut pas faire des opérations arithmétiques sur un type de chaînes de caractères. 

Le principe du zero overhead

Introduction au jeu de Go

Le jeu de Go est un jeu de table comme les jeux d’échecs ou le jeu de dames. Peu connu mondialement mais très populaire en Asie de l’Est, notamment au Japon, en Corée du Sud, et en Chine. À l’instar des jeux d’échecs, c’est un jeu très technique qui demande beaucoup de réflexion. Comme vous allez voir sur la vidéo, ses règles sont très simples mais la quantité de stratégies qui peuvent en découler de ces règles est sans limite. Comme les jeux d’échecs, le jeu de Go baigne dans une culture propre à lui. Il possède une communauté et un nombre énorme d’adeptes, avec des associations, des clubs, des centres de formation, des livres, des cours… etc. Les joueurs haut niveau qui participent aux compétitions mondiales, sont généralement intensément entraînés dès leur plus jeune âge.

How to play Go

Beaucoup de personnes pensent que le jeu de Go est plus technique que le jeu d’échecs, mais réellement, il est difficile de présenter des arguments suffisamment solides dans une activité purement intellectuelle. En tout cas, deux événements historiques à retenir pour ces deux jeux. C’est la défaite de Garry Kasparov, le top mondial des échecs, en 1997 face à l’IA de IBM Deep Blue. Depuis, l’intelligence artificielle est jugée plus forte dans ce jeu que l’être humain. Et aussi plus récemment, en 2016, le champion du monde du jeu de Go Lee Sedol, a perdu face à l’intelligence artificielle de Google AlphaGo. Ce qui démontre la supériorité de l’intelligence artificielle face à l’humain dans ce genre d’exercice intellectuel. 

Tutoriels dans différents langages de programmation

Les informaticiens en général doivent consommer une énorme quantité de tutoriels pour se sentir à l’aise face à l’énorme quantité de technologies informatiques qui existent de nos jours, et il n’y a pas plus bénéfique qu’un bon site-web bien structuré et plein de tutoriels sur différents langages et différentes technologies. Le site-web en question est www.w3schools.com, avec une liste, comme vous allez le voir en bas, énorme de langages de programmation. Chaque tutoriel est bien organisé en plusieurs parties, avec pour chaque langage son compilateur online dédié permettant de tester le code étudié directement sur le navigateur. Les tutoriels sont complémentés, pour certains langages, par une base substantielle d’exercices et de quiz, certains langages disposent aussi de fiches de références pour rassembler toutes les ressources du langage dans une seule fiche, il y a aussi des cours en vidéo, mais ces derniers sont pour la plupart payants.

Voici une liste non exhaustive des tutoriels les plus intéressants :

Introduction à Linux

Moi autant qu’enseignant, je ne sais pas si on va le répéter assez souvent pour nos étudiants, mais apprendre Linux est très important, surtout pour un étudiant en informatique, l’étudiant doit impérativement à un moment ou à un autre l’utiliser. Malgré que Microsoft Windows et Apple MacOS sont les systèmes d’exploitation les plus utilisés sur les ordinateurs de bureau et les portables de nos jours, mais à part ça, dans tous les autres secteurs, c’est l’OS (Operating System ou système d’exploitation en Anglais) GNU Linux qui prédomine de loin les autres systèmes, ça inclut les serveurs, le , les supercalculateurs, les systèmes embarqués, l’IoT (Internet of Things)…etc. La vidéo en bas est celle de la chaîne Youtube éducative FreeCodeCamp.org, c’est une excellente vidéo d’introduction aux bases du système d’exploitation Linux, surtout qu’elle se focalise sur le Terminal (ou les commandes textuelles) plutôt que sur l’interface graphique du système.

Apprendre Linux

Différence entre CPU et GPU

Le CPU (Central Processing Unit) est communément ce qu’on appel processeur, et GPU (Graphical Processing Unit) est le processeur spécifique de la carte graphique. La principale différence entre les deux, c’est le CPU est un processeur générique, et théoriquement il peut exécuter n’importe quel algorithme, de l’autre côté le GPU est spécifique pour le rendu graphique et la 3D, il n’est pas générique mais il est très puisant, beaucoup plus puisant que le processeur pour les rendus graphiques. La vidéo en bas est celle de la chaîne YouTube Computerphile est la différence entre ces deux unités de calcul est plus détaillée.

CPU vs GPU

Il existe quelques types d’applications qui sont adaptées pour l’exécution sur GPU, et il même possible d’exécuter ces types de programmes qui ne sont pas graphiques sur le GPU, cette manière de programmer s’inclut dans l’appellation connue sous GPGPU (General Purpose GPU), dans laquelle le programme en question est exécute sur le GPU et pas sur le CPU. Pour le faire, les constructeurs de cartes graphiques comme Nvidia et AMD fournissent des API (des bibliothèques) aux programmeurs leurs permettant la déportation de leurs programmes du CPU vers le GPU. C’est sûr que pas tous les programmes sont adaptés pour l’exécution sur GPU, les plus adaptés sont généralement les programmes hautement parallélisables, comme par exemple la Crypto-monnaie, l’Imagerie, la Simulation Physique, une partie de l’Intelligence Artificiel…etc.