Que vous soyez informaticien ou pas, à un moment ou un autre dans votre vie vous aurez à faire face à ce qu’on appelle les adresses IP. Les adresses IP impliquent le plus souvent votre réseau informatique à l’intérieur de la maison et la connexion à Internet. Ils sont généralement vus par le commun des mortels comme des nombres magiques et incompréhensibles. Mais en réalité c’est tout autre, il suffit de les représenter sous format binaire pour qu’ils deviennent très simples à utiliser.
Par définition une adresse IP est une adresse unique donnée à une machine dans un réseau informatique. Ils sont utilisés pour identifier les différentes machines et de pouvoir simplifier la communication entre elles. Ajouter à cela, le masque sous-réseau qui est un mécanisme qui permet de structurer, de hiérarchiser, et de subdiviser un grand réseau en plusieurs petits réseaux plus maniables et plus organisés. La vidéo en bas de la chaîne YouTube PowerCert est une excellente vidéo pédagogique pour faire comprendre la notion l’adresse IP pour un utilisateur lambda.
Sans exagération ni de subjectivité, actuellement le langage Python et l’un des langages les plus utilisés en informatique. C’est un langage plutôt orienté vers les applications de bureau, les serveurs web, le calcul scientifique, script et automatisation des tâches, l’intelligence artificielle, data science…etc. D’un point de vue pédagogique, on peut clairement distinguer deux écoles de formation de programmation. L’école classique, comprenant entre autres le langage C et C++. C’est l’école dans la manière de formation se focalise sur une compréhension bas-niveau de la programmation, l’étudiant généralement, assimile en profondeur le fonctionnement de la machine. En contrepartie, il lui est très difficile de réaliser une application complète et finie. La deuxième école se focalise sur un apprentissage haut-niveau, et ça implique généralement le langage Python ou Javascript. Dans lesquels les concepts de programmation sont étudiés d’une manière générique, mais avec l’accès à un arsenal d’outils prêts à être utilisés à la volée. Avec cette dernière école, il devient plus facile de concevoir des applications complètes et prêtes à être utilisées, même si elles sont le plus souvent des applications ballonnées et peu optimisées. La vidéo en bas présente un cours très structuré, et très abordable pour les débutants concernant le langage Python. Ça a été réalisé par l’académicien Mosh Hamedani, possédant une chaîne YouTube et ainsi site web CodeWithMosh.com avec plusieurs vidéos et cours pour apprendre différents langages de programmation.
L’algorithme de Huffman et l’un des algorithmes les plus connus dans le domaine de la compression de données comme ceux utilisés dans Winzip ou Winrar, il représente principalement l’un des premiers algorithmes de compression textuel. Le plus drôle dans la naissance de cet algorithme est qu’il a été inventé par Huffman lorsqu’il était encore étudiant à MIT, leur enseignant à cette époque leur a donné le choix de choisir entre faire l’examen ou de rédiger un rapport sur un sujet donné, Huffman a choisi d’écrire le rapport qui a ensuite en 1952 produit ce célèbre algorithme de compression.
L’algorithme se base sur le principe de donner un code binaire réduit pour les caractères les plus répandus dans un texte, et inversement de données un code plus long pour les caractères les moins fréquents. D’autre part, l’algorithme de Huffman, permet indirectement de conceptualiser les principes de la théorie de l’information créer par Shannon, une partie de la théorie stipule que l’information la plus importante est celle qui a la probabilité ou (la fréquence) la plus basse, et inversement, l’information la moins importante possède la probabilité la plus élevée dans un texte ou un bloc de données.
Compression par l’encodage de Huffman.
On peut clairement distinguer sur la vidéo en haut l’utilisation d’un arbre binaire, qui permet principalement la synthèse des codes binaires pour chaque caractère. Cet arbre va être créé, premièrement, en affectant la fréquence d’apparition de chaque caractère dans le texte, où chaque caractère va représenter les feuilles de l’arbre, les feuilles avec les fréquences les plus basses vont composer les nœuds avec une fréquence égale à la somme des fréquences des 2 feuilles, d’une manière récursive et ascendante les nouveaux nœuds créent dans l’arbre vont aussi être créés par la somme des 2 nœuds (ou feuilles) avec la plus basse fréquence, jusqu’à ce que tout l’arbre soit construit.
L’algorithme de Huffman.
Cet algorithme est très important à maîtriser pour les étudiants en informatique, ça permet premièrement de comprendre les principes de la compression, et deuxièmement, d’assimiler les concepts de la théorie de l’information. La première vidéo en haut et celle de l’excellente chaîne YouTube de Tom Scott, une chaîne principalement destinée à la science. Et la deuxième vidéo pour mieux expliquer la création de l’arbre de l’algorithme de Huffman.
Tout le monde en parle, il n’y a pas longtemps des ingénieurs de Google ont fait l’annonce d’un nouveau langage qui pourrait remplacer le langage C++. Pour rappel, le langage C++ est un langage très reconnu, depuis très longtemps il est ancré dans la production de plusieurs types de logiciels. C’est un langage réputé pour sa robustesse et sa rapidité, il est particulièrement populaire dans des logiciels comme les systèmes d’exploitation, les gestionnaires de base de données, les moteurs de jeux vidéo, les systèmes embarqués, la commande industrielle…etc. Malheureusement comme tout autre langage, il possède quelques défauts intrinsèques à ses objectifs de performance et de rapidité, les deux principaux défauts sont, son manque de sécurité comparé aux autres langages, puisqu’il permet d’offrir un accès direct aux entrailles de la machine. Et deuxièmement, le bagage technique que le langage a accumulé à travers les années de sa longue vie, ce qui le rend charger avec des fonctionnalités qui sont devenues aujourd’hui obsolètes, mais le langage doit les conserver pour des soucis de rétrocompatibilité avec les anciennes applications.
Justement, le langage de programmation proposé par Google nommé Carbone, propose des solutions pour ces deux problèmes mentionnés, plus d’autres améliorations qui sont inspirées des autres langages modernes. En réalité, les ingénieurs de Google, d’après leur déclaration, ne visent pas à remplacer le C++, mais plutôt de proposer une alternative plus flexible et plus sécurisée pour les besoins de la production logicielle moderne, visant même à avoir une interopérabilité bidirectionnelle avec le code du langage C++. L’annonce du langage Carbone s’est faite dans laconférence internationale du langage C++ à Toronto, Canada. Le visionnage de la présentation est disponible sur la vidéo en bas. Il est clair que le langage est encore dans la phase expérimentale, mais les ingénieurs sont suffisamment avancés pour proposer une nouvelle syntaxe pour le langage, que vous pouvez même tester à travers une démo sur le site de compilation online Compiler Explorer. L’un des points positifs du langage Carbone est d’embrasser une approche de développement open source beaucoup plus flexible que la standardisation ISO du C++, d’ailleurs le dépôt github et un serveur Discordsont déjà mis à la disposition à quiconque veut participer à son développement.
On a souvent tendance à l’oublier mais il faut se rappeler que le but initial de l’informatique dans les années 60 et 70 était l’automatiser des tâches administratives répétitives et ennuyeuses pour les employés des entreprises, de nos jours l’informatique a un tout autre visage, puisqu’un PC, une tablette ou un smartphone sont généralement utilisés pour communiquer, naviguer sur internet, voir des vidéos, lire les news, réviser ses cours…etc. Mine de rien, l’informatique reste toujours aujourd’hui le meilleur moyen d’automatiser les tâches administratives, et c’est surtout plus facile avec ce qu’on appelle le langage Python.
Le langage Python est un langage réputé pour sa facilité d’appréhension et sa versatilité, contrairement aux langages C/C++ qui sont souvent évoqués dans ce blog, le python touche plusieurs horizons, avec premièrement tout d’abord les applications normales de bureau, les applications web, et plus récemment les applications mobiles, il est aussi très convoité pour l’intelligence artificielle et le data science, et pour ce qui nous concerne dans cet article l’automatisation des tâches informatiques. Le python et le langage idéal pour automatiser les tâches comme lire les données des fichiers Excel, de les transcrire sur une page web, d’extraire les tables des sites web, de générer des rapports automatiques de données, faire l’agrégation de plusieurs sources de données, l’extraction et génération automatique de l’information des fichiers PDF…etc. La vidéo en bas de la chaîne YouTube du site web éducatif www.freecodecamp.org est un cours de courte durée pour maitriser les capacités d’automatisation proposées par Python.
Le terme automate désigne le concept mathématique d’automates finis (en Anglais Finite-State Machines), ce sont des outils formels mathématiques qui sont le plus souvent utilisés comme des outils pour la conception et la réalisation des machines ou appareils automatiques. Pour notre cas, à l’université, ils sont extensivement enseignés en électronique numérique, ils permettent premièrement de donner une définition théorique pour ce qu’on appelle en électronique les circuits séquentiels, c’est une définition qui va englober tous les circuits numériques actuels, que ça soit processeurs, cartes graphiques, chipsets, mémoires, cartes réseau…etc. Mais aussi, comme c’était le cas pour ses origines, étant un moyen simple et efficace pour la création des appareils automatiques utilisés tous les jours dans notre vie quotidienne, comme les distributeurs automatiques de boissons, les parcomètres (machines de paiement de parking), les ascenseurs, les distributeurs de tickets de file d’attente, les portes électriques, les vitres électriques dans les voitures…etc. En sachant en réalité que la plupart des machines automatique modernes ont transité technologiquement vers ce qu’on appelle les Microcontrôleurs, qui sont des mini-ordinateurs très réduits, ou les System-on-Chip (ou SoC), qui sont aussi des ordinateurs réduits mais beaucoup plus évolués et puissants que les microcontrôleurs. La vidéo en bas de la chaîne YouTube Computerphile donne un aperçu éducatif de comme un automate est sensé fonctionner.
Avant d’entamer cette question de différence entre programmeur et codeur, il est important de présenter la personne de Lamport. Lesli Lamport est un scientifique mathématicien informaticien très connu, considéré parmi les chercheurs les plus influents dans les sciences de l’information, il a même été récompensé du titre Turing Award en 2013 (l’équivalent du prix Nobel en informatique) et plusieurs autres titres. Il est surtout connu pour le développement dans les années 80 de la première version de LaTeX, un logiciel de traitement de texte très répondu, au même titre que Microsoft Word, avec comme axe d’orientation le formatage automatique du texte. Lamport est surtout très bien connu académiquement par 3 algorithmes très populaires dans les cours universitaires spécifiques au domaine des Systèmes Distribués, qui sont l’Horloge de Lamport, la Cohérence séquentielle, et la Tolérance aux fautes Byzantines. Il travail actuellement chez Microsoft. Le site personnel de Lesli Lamport est accessible en suivant cette adresse www.lamport.org.
La différence entre programmeur et codeur
En résumé sur la vidéo en haut, « la différence entre programmeur et codeur, c’est comme la différence entre l’écriture (L’écriture littéraire) et taper sur une machine à écrire », c’est l’expression de Lamport lui-même. C’est une différence énorme, essentiellement une personne doit d’abord apprendre à programmer avant de coder.
Le langage assembleur est souvent considéré par les informaticiens comme un langage difficile, la première raison c’est qu’il existe plusieurs langages assembleurs très différents les uns des autres, en réalité chaque à processeur possède son propre assembleur. En plus ce sont des langages de bas niveau, très proches du langage machine binaire, ça exige du programmeur une compréhension technique du fonctionnement du processeur et de l’architecture de la machine. Mine de rien le langage assembleur est très populaire dans le domaine des systèmes embarqués, là où il faut bien optimiser son code et le rendre le plus rapide possible. La conception des pilotes des systèmes d’exploitation exige aussi souvent l’utilisation de l’assembleur en raison des spécificités intrinsèques de chaque matériel. Sans oublier de mentionner aussi l’existence des extensions et fonctionnalités uniques pour chaque processeur qui ne sont généralement exploitables qu’à travers l’assembleur, comme par exemple les extensions du processeur Intel Pentium, comme MMX, SSE, et AVX, ou celle des processeurs AMD, l’extension 3Dnow. L’utilisation de l’assembleur est aussi très favorable pour les microcontrôleurs, ces petits microprocesseurs qui sont le plus souvent inclus à l’intérieur des appareils électroniques.
L’assembleur du processeur ARM
Le cours sur la vidéo en haut concerne le processeur ARM, C’est un processeur très connu, d’ailleurs ils embarquent la quasi-totalité des téléphones portables actuels. La vidéo de la chaîne Youtube freeCodeCamp.org relate une bonne explication de la partie théorique complémentée par de la programmation dans la partie pratique.
Pour commencer, on va tout d’abord comprendre c’est quoi la loi de Moore ? Véritablement, ce n’est pas une loi à proprement dit, mais disons une spéculation ou une observation faite par Gordon Moore, le cofondateur de la firme d’Intel, dans laquelle il stipule que le nombre de transistors ou la densité des transistors dans une surface donnée des circuits intégrés doublerait tous les deux ans. Cette observation est souvent mise en avant pour démonter l’évolution plutôt spectaculaire de la technologie des circuits intégrés sur plus de 40 ans. Malheureusement, ces dernières années cette loi n’est pas à la rigueur comme pour les années précédentes, et sa courbe d’évolution tend à régresser. Plus encore, la vidéo de la chaîne Youtube Computerphile en bas, prouve que la limite physique est plutôt proche, puisque la trace sur silicium (silicon en Anglais) va plutôt atteindre une largeur proche de l’atome, et dans ce cas c’est plus les lois de la physique électronique classique qui vont être utilisées mais les lois de la physique quantique, ce qui va totalement changer la donne.
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.