100 conférences vidéo sur la programmation

image


Camarades ingénieurs, c’est la quatrième année que je commence à enseigner à l’ Institut polytechnique de Kiev . Pendant ce temps, j'ai accumulé un grand nombre d'exemples de code et de matériel, environ 90 conférences . Je dois dire que pendant toute la durée de mon activité professionnelle (et cela fait 24 ans d'écriture de code presque quotidiennement), je n'ai jamais élevé mon niveau de programmation, comme ces dernières années, en travaillant avec les étudiants. Si auparavant, il me semblait qu'écrire brièvement, difficilement et de façon imposante était la hauteur de compétence, maintenant je me suis rendu compte que les étudiants devraient comprendre mon code après une explication minimale, sinon cela ne fonctionnera pas. Je suis arrivé à la conclusion que cette capacité peut et doit être étendue non seulement au code de formation, mais à tout le code de travail. De plus, le code de formation ne devrait pas différer de manière significative du code de travail, car nous enseignons aux futurs ingénieurs comment fabriquer de vrais systèmes, pas de formation. Et après de nombreuses demandes, j'ai décidé d'enregistrer toutes les conférences sous forme de screencasts, qui immédiatement après la conférence sont envoyées sur YouTube. Pour cette année universitaire, je prévois d'enregistrer 100 conférences, dont 23 ont déjà été publiées , du matériel pour 67 autres conférences et 10 nouvelles conférences sont encore en préparation.


Concept de cours


Vous savez tous que dans notre industrie, la formation fondamentale en ingénierie pose des problèmes importants:


  • les cours universitaires sont souvent dépassés et laissent beaucoup à désirer,
  • la terminologie généralement acceptée n'est pas formée (dans les litiges, nous appelons souvent les mêmes choses des mots différents et des choses différentes avec les mêmes mots), cela nous déroute,
  • des articles et des vidéos sur Internet peuvent facilement être publiés par quiconque pense que ses qualifications sont suffisantes pour cela,
  • Dans la programmation, l' accumulation d'expérience est entravée par la sortie rapide des gens de la spécialité, et même les idées fondamentales sont répétées de manière cyclique, mais ceux qui ont acquis de l'expérience lors du cycle précédent ne sont probablement plus en train de pratiquer et ne peuvent pas dire à leurs jeunes collègues où se trouvent le râteau et les goulots d'étranglement.

Construire un cours basé sur JavaScript est certainement une entreprise expérimentale, mais ce langage ne sera certainement pas superflu pour quiconque dans l'informatique moderne. Les développeurs JavaScript eux-mêmes ont souvent une faible formation d'ingénieur de base et un manque de connaissances fondamentales en structures de données, algorithmes, abstractions de base, modèles, architecture, paradigmes et techniques de programmation. La plupart du code qui est maintenant écrit dans l'industrie est simplement jeté peu de temps après sa création, puis il est réécrit et jeté à nouveau. En général, la qualité et les connaissances sont rarement requises, sauf lors des entretiens. Il est préférable de créer du code de faible qualité et de le maintenir, ou de jeter le code et de vendre plus de temps pour le réécrire. De plus, notre industrie est complètement dissociée de la science, il y a des mérites importants pour les spécialistes du marketing, car nous programmons déjà pas dans des langages de programmation et non dans des abstractions, mais nous programmons dans des frameworks et des bibliothèques, dans lesquels nous nous sommes «embarqués» dans un bel emballage. Nous assemblons tout à partir de cubes, souvent sans aucune compréhension scientifique, et pouvons rarement répondre à la question de savoir pourquoi nous faisons cela et pas autrement. Tout en parties a déjà été écrit il y a longtemps, tout peut être trouvé sur Internet, mais il s'est avéré que l'une ne se moule pas avec l'autre, c'est-à-dire en partie, mais ensemble cela ne fonctionne pas. Lier des morceaux de code séparés est beaucoup plus difficile que de les faire individuellement. Cela se produit précisément en raison de l'absence d'une approche systématique, d'une scission terminologique et d'une désynchronisation conceptuelle des spécialistes. Seul ce qui est idéologiquement compatible fonctionnera ensemble, qui est basé sur une théorie générale et des normes générales dérivées de cette théorie. J'espère qu'avec ce cours, je ferai au moins un petit pas vers un tel consensus important pour l'industrie.


Tous les supports de cours sont disponibles gratuitement sur github , et les conférences sont ouvertes, elles peuvent être suivies gratuitement. Chaque semaine, j'enregistre 4 conférences. Nous organisons plus de séminaires et d'ateliers, mais ils ne sont pas enregistrés.


Structure du cours


  • Concepts de base : abstractions logicielles, variables, opérateurs, types de données, tableaux, structures, types scalaires et de référence, mappages;
  • Concepts clés : fonctions, contextes et portée, classes et objets, prototypes, méthodes, lambdas, fonctions pures, effets secondaires, fermetures, utilisation partielle, curry, composition, fonctions d'ordre supérieur, rappels, wrappers, décorateurs, impuretés, événements, interface , singleton, itérateurs, objets fonctionnels, foncteurs, monades, gestion de fichiers, threads, sockets, mémorisation, héritage, générateurs, programmation asynchrone, chining, modules et dépendances, gestion des erreurs, usines et pools, temporisateurs, expressions régulières;
  • Matériaux de support : git, systèmes de contrôle de version et gestionnaires de packages, travail avec la console, tests, intégration continue, journalisation, linter, optimisation et performances, lutte contre les fuites de mémoire, classes cachées, fonctions monomorphes, génériques, garbage collection, gestion de la mémoire;
  • Structures de données : collections, tableaux et tableaux typés, tampons, listes, pile, file d'attente, déc, arbres binaires et hiérarchiques, arbres multidimensionnels, rotations et équilibrage des branches, ensembles, hashmaps, graphiques, listes étendues, file d'attente asynchrone, automates, itération des structures de données et recherche;
  • Concepts étendus : symboles, proxies, différences, futurs et promesses, lentilles, transducteurs, asynchrone / attente, collecteurs de données, composition asynchrone, adaptateurs asynchrones, itérateurs asynchrones, introspection, réflexion, échafaudage, inversion de contrôle et injection de dépendance, bacs à sable, architecture en couches approche par composants, couche d'accès aux données, projection de données, surveillance du système de fichiers, architecture client-serveur et à trois liaisons, clustering et équilibrage, conception de protocole, surcharge de module dynamique, métadonnées, din liaison mécanique, interaction interprocessus;
  • Exemples de code et d'utilisation intégrée des technologies: feuilles de calcul en direct, chat sur les sockets Web, implémentation du langage de requête de graphes, bibliothèque alternative de métasynchronisation des abstractions asynchrones, comparaison de l'implémentation des mêmes tâches sur différents paradigmes, comparaison des styles de programmation fonctionnels, exemples de structure d'application, routage des gestionnaires dans node.js applications, isolation de code dans des bacs à sable, objets transactionnels;
  • Paradigmes de programmation : impératif, structurel et non structurel, procédural, orienté objet, prototype, fonctionnel, logique, déclaratif, asynchrone, réactif, événementiel, automatique, généralisé, programmation basée sur les données, multi-paradigme, métaprogrammation.

Les références


Le calendrier des conférences est disponible en deux groupes mitap: HowProgrammingWorks (ce sont des conférences sur la programmation à l'aide d'exemples JavaScript) et NodeUA (ce sont des conférences sur Node.js) et j'exhorte tous ceux qui veulent assister à des conférences à s'inscrire en personne. L'entrée est gratuite pour tout le monde, mais plus simple sur le plan organisationnel pour estimer le nombre d'étudiants. Tout au long de l'histoire, j'ai eu des cas et 600 personnes et 2 personnes, et la participation est imprévisible.


Toutes les vidéos enregistrées apparaissent le même jour (10-20 minutes après la conférence) sur la chaîne youtube .


Les conférences sont regroupées en deux listes de lecture: programmation et JavaScript et Node.js.


Je place des liens vers des conférences et du matériel dans deux canaux de télégramme: programmation et JavaScript, et Node.js et d'autres sujets plus complexes .


Il existe deux groupes de télégrammes pour la discussion et les questions: programmation et JavaScript et Node.js.


Mon compte github , les référentiels de formation de HowProgrammingWorks et notre bibliothèque communautaire .


Conclusion


J'attends des suggestions pour compléter le cours par de nouveaux sujets, j'espère une contre-introduction aux exemples de code, y compris la traduction d'exemples dans d'autres langues. Vos commentaires aideront à améliorer le cours.

Source: https://habr.com/ru/post/fr427799/


All Articles