Cours sur les systèmes d’exploitation

Tout informaticien sait que les systèmes d’exploitation forment une couche logicielle importante pour le bon fonctionnement d’un ordinateur. Pour bien comprendre le bon fonctionnement des ordinateurs, Il faut bien comprendre la distinction entre logiciel et matériel. Un système d’exploitation est du logiciel, mais différent des logiciels normaux. Les systèmes d’exploitation sont différents des applications normales, Par exemple, un système d’exploitation ne peut pas être un jeu vidéo, ou un lecteur audio, ou, un éditeur de texte. Les systèmes d’exploitation, comme Microsoft Windows, Linux, ou MacOS, forment une couche logicielle intermédiaire entre le hardware et entre les applications. Ça simplifie d’une manière significative aux applications l’utilisation du matériel. Ça permet aussi aux différentes applications de cohabiter en symbiose sur le même système. Ça donne aussi aux utilisateurs les mécanismes et les outils pour contrôler leurs propres machines. 

Cours sur les Systèmes d’exploitation

On peut encore continuer à énumérer les différents rôles d’un système d’exploitation. Mais il faut savoir que le rôle des systèmes d’exploitation est primordial en informatique. Sur la vidéo en haut de la chaîne Youtube Lectures for sleep & study, un excellent cours sur les systèmes d’exploitation est présenté. L’aspect abordé sur cette vidéo est l’aspect académique, ça veut dire que ça parle du côté technique interne des systèmes d’exploitation. Ça permet principalement aux étudiants en informatique de comprendre comment réellement un système d’exploitation fonctionne de l’intérieur. 

Guru99, L’immense portail de tutoriels en informatique

Je viens de découvrir ce site web Guru99 presque par hasard. Par la magie de l’internet, j’ai fait la connaissance de l’un des administrateurs de ce site web, en raison que nous proposons presque le même continu sur le Net. Après avoir fait un bref détour sur le site, j’ai pu constater que c’était un site énorme, et pour lui rendre justice, je dois clairement le qualifier de portail au lieu de sites web. Il contient énormément de tutoriel, fait par différents enseignants, Incluant différents thèmes. D’ailleurs, je n’arrive même pas à inclure tout le contenu dans cet article, ainsi je vais lister ici-bas les partis qui me semblent les plus intéressantes :

www.guru99.com

Langages de programmation :

Diverses ressources :

Bases de données :



Apprendre l’électronique avec Arduino

Personnellement, je trouve la plateforme Aduino, l’un des meilleurs moyens pour permettre aux étudiants et aux initiés de faire une introduction aux systèmes embarqués. Pour faire simple, les systèmes embarqués sont des systèmes qui nécessitent des connaissances en électronique pour construire la plateforme physique, et en informatique pour programmer la plateforme. Ainsi, pour pouvoir faire du système embarqué, il faut au minimum avoir des connaissances dans les 2 disciplines.

Cours approfondi sur Arduino

J’ai déjà à plusieurs reprises écrit sur Arduino. Mais cette fois-ci, je suis tombé sur une vidéo très approfondie sur le sujet. Parce que, Premièrement, la vidéo ne nécessite de l’étudiant aucune connaissance préalable en informatique et en électronique. Et Deuxièmement, ce qui est le plus intéressant, c’est que l’étudiant n’est pas obligé d’avoir une carte Arduino matérielle pour pouvoir suivre ce cours. Car on retrouve sur la vidéo une référence à un simulateur qui arrive à faire la simulation d’Arduino et de l’électronique avec en plus une superbe interface bien agréable. C’est le simulateur online tinkercad.

La vidéo en question est celle de la chaîne YouTube du site web éducatif www.freecodecamp.org, et comme vu précédemment dans d’autres blogs, c’est un excellent site plein de nombreux cours et tutoriels en informatique.

Collection GitHub de ressources et de cours en informatique

L’un de mes étudiants m’a envoyé un lien d’un dépôt GitHub contenant une très grande collection de ressources sous format vidéo, de cours, de tutoriels, ou de conférences…etc., répertoriés et organisé en plusieurs catégories. J’ai un peu parcouru la liste de ces vidéos et j’ai remarqué que ce dépôt GitHub met en catalogue des cours provenant d’universités parmi les meilleurs mondes.

La liste des catégories ou des domaines que le dépôt recense et comme suite :

La complexité d’un algorithme

Pour concevoir des logiciels bien optimisés, il est souvent nécessaire de pouvoir distinguer les algorithmes optimaux des algorithmes trop gourmands en ressources. D’où l’entrée en jeu de l’étude de la complexité d’un algorithme, qui devient primordiale pour reconnaître son optimalité dans le monde réel. En d’autres mots, ça permet de prédire le comportement d’un algorithme avec un nombre très élevé de données.

Pour avoir une compréhension de c’est quoi la complexité d’un algorithme, appelez aussi le grand-O (Big-O en anglais), on va imaginer un exemple simple, supposons qu’un algorithme nécessite une seconde pour calculer 10 données, sa complexité est monotone (O(n)) s’il lui faudrait 10 secondes pour finir 100 données. Par contre si c’est un algorithme optimal il lui faudrait moins de temps. Ou inversement si c’est un algorithme gourmand il lui faudrait plus. La complexité permet plus ou moins de prédire ce temps. 

Notion du Big-O (par www.geeksforgeeks.org)

À vrai dire, l’étude de la complexité est une méthode mathématique relativement difficile à appréhender à première vue. La principale raison est que cette méthode ne ressemble à aucun domaine mathématique vu auparavant dans le cursus de l’étudiant. On peut grossièrement la qualifier comme un point d’intersection entre le calcul arithmétique et le calcul des limites dans l’analyse mathématique. D’une part, malgré que le but de la méthode soit le calcul du temps nécessaire pour l’exécution en rapport avec les données exercées sur l’algorithme, elle ne va pas faire un calcul arithmétique exacte de ce temps comme on avait vu sur l’exemple, mais elle va plutôt nous fournir une approximation. Et d’autre part la méthode tend à évaluer le temps pour un nombre très grand de données, et s’appuyer sur des procédés mathématiques qui sont similaires au calcul des limites, comme par exemple négliger les fonctions les moins rapides (comme par exemple : 2X2 + 4X +1 tend vers X2). Mais en même temps, ce n’est pas un calcul de limite. La complexité va réellement nous retourner une fonction parmi les fonctions illustrées sur le graphe en haut. Cette fonction va nous donner une estimation de la rapidité en complexité de l’algorithme en rapport avec le nombre de données. La vidéo en bas de la chaîne YouTube du site web éducatif www.freecodecamp.org illustre cette notion de complexité sous format d’un cours de courte durée pour appréhender plus ou moins cette notion du Big-O. 

Cours sur la complexité d’algorithme

Apprendre le Python

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. 

Cours en Python

Cours sur l’assembleur ARM

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.

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

Comment parler académiquement

Je suis tombé sur une excellente vidéo faite par un enseignant en MIT (La chaîne de MIT sur YouTube), dont laquelle il fait des explications et des conseils aux étudiants et aux enseignants pour comment communiquer académiquement. Académiquement, ça veut dire dans le cadre de l’éducation, ça inclut l’enseignement pour les enseignants et l’exposition pour les étudiants.

Parler académiquement

J’ai trouvé la vidéo très intéressante, même qu’il faut bien se mettre dans l’esprit que ce type de contenu n’est pas de la science exacte, malgré que vous allez voir l’utilisation d’une équation dans la vidéo, ça reste toujours des avis subjectifs et une perception personnel. Quand même le fait d’avoir un aperçu sur la communication académique selon la vision d’une personne avec une longue expérience et surtout à très haut niveau, reste très très enrichissant.

Introduction aux structures de données

Encore un autre cours sur les structures de données, d’autre part c’est très important, le cours sur la vidéo en bas est très court, la vidéo ne dure que 3 heures avec un survol sur les principales structures de données. Pour rappel, cette matière éducative traite les différentes manières d’organiser et d’arranger les données dans la mémoire pour une utilisation optimale dans la programmation, il existe plusieurs structures, chaque une d’elles a ses avantages et ses inconvénients en dépend de la nature du problème et de l’algorithme utilisé.

Cours sur les structures de données

L’auteur au début de la vidéo fait une bonne introduction sur la notion de la complexité (big O), il continue ensuite en séquence par donner de bonnes explications sur les différentes structures, sans pour autant aborder leurs implémentations et programmation, les structures abordées en question sont ; les tableaux, les vecteurs (tableaux à taille variable, appelés dans la vidéo ArrayList), les piles, les files, les listes chaînées, les listes doublement chaînées, les maps (appelés dans la vidéo dictionary), les arbres avec trois variantes, les arbres binaires de recherches, les tries (arbres pour stocker les mots d’un dictionnaire), les tas (appelés dans la vidéo heap), en terminant avec les graphes.

La vidéo est celle de la chaîne Youtube FreeCodeComp.org, la chaîne appartient au site-web éducatif du même nom, la chaîne dispose d’un nombre important de vidéos didactiques et tutoriel de très bonnes qualités sur différents aspects de l’informatique.