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.

Introduction à la programmation dynamique

La programmation dynamique, à ne pas confondre avec la programmation dynamique de la mémoire, qui implique l’utilisation de new et malloc pour créer et détruire à volonté des variables dans la mémoire dynamique. La programmation dynamique quant à elle est dans un niveau d’abstraction plus élevé, ça veut dire que le langage de programmation choisi ou la manière d’implémenter les programmes ça relève du détail et ce n’est plus si important, mais c’est plutôt la manière de résoudre les problèmes qui compte. La programmation dynamique a une réputation d’être difficile à apprendre et à enseigner, d’ailleurs il vaut mieux bien maîtriser les techniques de programmation dans un langage donné pour se lancer dans celle-ci, et même dans les cursus d’enseignement en informatique celle-ci est généralement enseignée en deuxième cycle, s’assurant que l’étudiant a une maîtrise approfondie des techniques de programmation. La vidéo en bas donne une bonne introduction et explication de ce qu’est précisément la programmation dynamique.

Introduction à la programmation dynamique

L’exemple typique pour faire apprendre la programmation dynamique est sans doute la célèbre suite de Fibonacci, et à partir de la vidéo on peut voir que cette suite est utilisée pour nous donner une idée globale de ce qu’est la programmation dynamique, l’idée est que la programmation dynamique est une manière d’optimiser l’exécution d’un programme pour une famille de problèmes bien particulaire, des problèmes qui sont généralement de nature récursive, dans lesquels il existerait de la répétition dans le calcul si la récursivité est faite d’une manière cru et sans optimisation. Deux techniques sont utilisées dans la programmation dynamique, qui sont la méthode de haut en bas et la méthode de bas en haut. Il existe aussi un bon article sur le sujet (voici son lien) qui donne une bonne introduction sur le domaine. Il est aussi important de rappeler que toujours la même règle qui s’applique pour l’apprentissage de n’importe quelle discipline réputée difficile, c’est de s’exercer et de faire beaucoup d’exercices.

Classement des 10 meilleurs langages de programmation en 2020

C’est toujours compliqué de dire qu’un langage est mieux qu’un autre, ou qu’un langage est mauvais, mais généralement les informaticiens se référent à deux métriques pour comparer les langages, la première est le domaine d’utilisation, il y a des langages qui sont bons pour certaines applications mais qui sont mauvais pour d’autres, il n’existe pas de langage parfait pour tous les domaines, par exemple le C est relativement bas niveau, il est ainsi bon pour les systèmes d’exploitation et les systèmes embarqués, le C++ est réputé pour sa robustesse est son efficacité pour les systèmes complexes, le Python est pour ça par plus simple à apprendre et optimal pour le scripting et le datascience, le JavaScript pour le web…etc.

Et la deuxième métrique est l’appréciation intellectuelle pour certaines mécaniques dans certains langages en comparaison à d’autres. Sur un niveau personnel le programmeur peut se trouver à apprécier un langage qu’un autre, il lui paraît plus simple et plus intuitif à utiliser et les mécaniques que le langage offre sont plus adaptés au déroulement de son processus intellectuel de programmation que d’autres.

Top 10 meilleurs langages de programmation pour 2020

Ainsi faire un classement pour les langages de programmation d’une façon neutre est très difficile, l’auteur de la vidéo en haut s’est donc référé à un site qui fait d’une manière automatique l’extraction de statistique d’utilisation des langages sur GitHub, étant donné qu’actuellement c’est le dépôt de code source le plus important au monde, avoir un aperçu sur les statistiques d’utilisation permet d’avoir un aperçu global sur les tendances d’utilisation des langages. Le site en question est GitHut, vous pouvez le consulter et voir l’évolution des langages même sur les années précédentes.

Le classement est comme suite :

  1. JavaScript
  2. Python
  3. Java
  4. Golang
  5. C++
  6. TypeScript
  7. Ruby
  8. PHP
  9. C#
  10. C

L’inventeur du C++

Un petit mot de l’inventeur de l’un des plus célèbres langages de programmation qui est le C++. La vidéo suivante est une interview de Bjarne Stroustrup l’inventeur et le concepteur du C++. À travers les questions posées, Bjarne Stroustrup expose sa vision et les motifs qui l’ont poussé à créer le C++, il met aussi en évidence le point fort du langage par rapport aux autres, qui est sa robustesse par le fait qu’un programme écrit dans ce langage peut tenir des dizaines d’années sans anomalie ou avoir besoin de l’entretenir ou de le changer.

La récursivité comme solution pour le jeu du Sudoku

Le jeu du Sudoku est un jeu de puzzle populaire sur certains journaux et magazines, il est représenté sur l’image en bas, globalement il se constitue d’une grille de 9×9 cases partiellement remplies par des chiffres de 1 à 9, la grille est aussi subdivisée en 3×3 carré de 3×3 chiffres, le joueur doit remplir le reste des cases vides restantes en respectant la règle qu’il ne doit pas y avoir de répétition d’un chiffre sur une colonne, sur une ligne ou sur le carré 3×3.

Une grille vide de Sudoku

Les règles sont simples mais le casse-tête demande beaucoup de temps à l’humain pour le résoudre, et pourtant c’est déconcertant comment un programme d’une poignée de lignes de code arrive à résoudre le problème sur ordinateur en une fraction de seconde, dans la vidéo qui suit l’enseignant s’exulte de la magie de la récursivité, et c’est d’autant plus vrai que la récursivité est une technique de programmation réputée difficile à apprendre mais très efficace une fois maîtrisée. Il n’était par rare dans les examens d’algorithmique que j’ai eu à corriger de tomber sur des problèmes difficiles à résoudre par les méthodes conventionnelles (par boucles et tests) alors qu’ils devenaient très simples en récursivité.

résoudre le sudoku par récursivité

Cheat-sheet pour le langage C

Personnellement le langage C avec le langage C++ sont mes deux langages de programmation préférés, et je suis très ravi que ça soit les principaux langages enseignés au sein de l’université. Lorsque j’étais étudiant je me rappelle avoir eu la fausse idée sur la relation entre le langage C et le langage C++, je pensais que le C++ est une évolution du C et qu’une fois le langage C++ maîtrisé je n’aurais plus besoin d’utiliser le langage C, alors qu’avec le temps je me suis aperçu que malgré que le C++ hérite beaucoup du langage C, ce sont deux langages très différents, le C est surtout un langage procédural structuré autour de la fonction, très populaire dans les domaines comme les systèmes embarqués (systèmes avec des ressources réduites) et les systèmes d’exploitation, d’ailleurs le noyau Linux est en grande partie écrit à base de C. En contrepartie le langage C++ est un langage orienté objet, plutôt populaire pour les applications complexes avec des exigences de performances et de robustesse, comme les programmes de simulation (ou programmes à calcul intensif), les programmes de contrôle industriel, les moteurs de jeux vidéos, les compilateurs…etc.

Lien du Cheat-sheet du langage C

Le lien ci-dessus est celui du cheat sheet pour le langage C, à vrai dire c’est plutôt un résumé sur le langage C avec de petites explications, des exemples…etc. C’est un excellent article pour se mémoriser rapidement tous les principaux concepts du langage, néanmoins ce n’est pas le meilleur pour débutant pour apprendre le langage à partir de zéro.

Cours sur les structures de données

La vidéo suivante concerne les structures de données, c’est une très bonne vidéo dans le domaine de l’algorithmique, celle-ci est produite par un ingénieur de Google du nom de William Fiset (voici sa chaine Youtube). La vidéo prend en tout plus de 8 heures, parcourant les concepts et les modèles de structures de données les plus connus d’une façon croissante, du plus simple commençant par les tableaux aux plus complexes terminant par les files à priorité indexées.

Structures de données

Dans sa globalité, la narration est très bonne, comme toutes les vidéos de la chaine Youtube du site FreeCodeCamp.org d’ailleurs. Le narrateur aborde ces concepts qui sont le plus souvent complexes, d’une façon structurée avec un rythme constant et soutenu d’accroissement de difficulté de telle sorte que l’auditeur arrive à suivre sans difficulté. Néanmoins ça reste de l’algorithmique et ça demande toujours des pauses pour des temps de réflexion.

Le langage utilisé pour l’implémentation de ces concepts est le Java, et personnellement j’ai trouvé ça désolant, le langage C ou C++ aurait été plus approprié à mon avis, sachant que ces deux langages permettent d’accentuer l’analyse sur les notions comme les pointeurs et la gestion dynamique de la mémoire qui sont cachés et faite d’une manière automatique par Java.

Il est aussi important de dire que la vidéo représente effectivement un parcours relativement approfondi sur les structures de données, mais pour bien maîtriser ces concepts, elle ne peut en aucun cas replacer la pratique par plusieurs exercices et l’implémentation réel de plusieurs programmes sur machine, et surtout faire face à de vraies erreurs de programmation et avoir à faire potentiellement du débogage sur les programmes, qui sont très bénéfiques pour ce genre de concepts.

Le compilateur online OnlineGDB.com

Le site web OnlineGDB.com, est l’un des plus connu service sur le cloud qui permet d’offrir un compilateur et un environnement de développement (IDE) aux programmeurs pour une vaste gamme de langage de programmation dont: C, C++, Java, Python, C#, PHP, Ruby, VB, Perl, Swift, Prolog, Javascript, Pascal, HTML, CSS,…etc. il permet de faire l’édition de texte, la compilation, l’édition de liens, l’exécution, le débogage,…etc. Ainsi que la sauvegarde online, le partage de code source, le téléchargement des sources…etc.

description de OnlineGDB.com

Au final, on peut dire que ce service online permet d’offrir un environnement de développement simpliste pour un énorme éventail de langages de programmation, c’est pratique pour faire des tests de langages ou faire des programmes de taille réduite pour les étudiants, mais ne peut en aucun cas rivaliser avec un vrai environnement de développement qui est généralement beaucoup plus riche et adapté pour les gros projets.

500+ exercices en Algorithmique et Structure de Données

Exercices en Algorithmique et Structure de Données

Il est bien connu lors du processus d’apprentissage en informatique, que pour bien assimiler les deux modules fondamentaux; Algorithmique et Structure de Données, et Conception Hardware, qu’il faut bien s’exercer et résoudre différents types de problèmes. le site Techie Delight répertorie pas moins de 500 problèmes dans l’Algorithmique et Structure de Données couvrant différentes facettes du module, comme: les tableaux, les matrices, les chaînes de caractères, les listes chaînées, les files, les piles, les arbres, les arbres binaires, les tas, les graphes, la récursivité, les algorithmes de manipulation de bits, de tri, de hachage, la programmation dynamique…etc. Le site inclut des aspects avancés de la programmation, maîtrisant les 500+ exercices apporte une énorme expérience dans le domaine.

www.techiedelight.com