100 Videovorträge zum Thema Programmierung

Bild


Genossen Ingenieure, es ist das vierte Jahr, seit ich am Kiewer Polytechnischen Institut unterrichte . In dieser Zeit habe ich eine Vielzahl von Codebeispielen und Materialien gesammelt, etwa 90 Vorträge . Ich muss sagen, dass ich während des gesamten Zeitraums meiner beruflichen Tätigkeit (und dies sind fast 24 Jahre, in denen ich fast täglich Code schreibe) mein Programmierniveau nie erhöht habe, wie in den letzten Jahren, als ich mit Studenten gearbeitet habe. Wenn es mir früher so vorkam, als ob kurzes, schwieriges und imposantes Schreiben die Höhe der Fähigkeiten war, wurde mir jetzt klar, dass die Schüler meinen Code nach minimaler Erklärung verstehen sollten, sonst funktioniert es nicht. Ich bin zu dem Schluss gekommen, dass diese Fähigkeit nicht nur auf den Trainingscode, sondern auf den gesamten Arbeitscode ausgedehnt werden kann und sollte. Darüber hinaus sollte sich der Schulungscode nicht wesentlich vom Arbeitscode unterscheiden, da wir zukünftigen Ingenieuren beibringen, wie man echte Systeme herstellt, nicht solche. Und nach zahlreichen Anfragen habe ich beschlossen, alle Vorträge in Form von Screencasts aufzuzeichnen, die unmittelbar nach dem Vortrag an YouTube gesendet werden. Für dieses akademische Jahr plane ich die Aufnahme von 100 Vorlesungen, von denen 23 bereits veröffentlicht wurden. Materialien für weitere 67 Vorlesungen und 10 neue Vorlesungen sind noch in Vorbereitung.


Kurskonzept


Sie alle wissen, dass es in unserer Branche erhebliche Probleme mit der grundlegenden Ingenieurausbildung gibt:


  • Universitätskurse sind oft veraltet und lassen zu wünschen übrig,
  • Eine allgemein akzeptierte Terminologie wird nicht gebildet (in Streitigkeiten nennen wir oft die gleichen Dinge verschiedene Wörter und verschiedene Dinge mit den gleichen Wörtern), wir werden dadurch verwirrt,
  • Artikel und Videos im Internet können leicht von jedem veröffentlicht werden, der die Idee hat, dass seine Qualifikationen dafür ausreichen.
  • Beim Programmieren wird die Anhäufung von Erfahrungen durch den schnellen Ausstieg von Personen aus dem Fachgebiet behindert , und selbst die grundlegenden Ideen werden zyklisch wiederholt, aber diejenigen, die in der vorherigen Runde Erfahrungen gesammelt haben, üben höchstwahrscheinlich nicht mehr und können jüngeren Kollegen nicht sagen, wo der Rechen und die Engpässe liegen.

Das Erstellen eines auf JavaScript basierenden Kurses ist sicherlich ein experimentelles Unterfangen, aber diese Sprache wird für niemanden in der modernen IT überflüssig sein. JavaScript-Entwickler selbst verfügen häufig über eine schlechte technische Grundausbildung und einen Mangel an Grundkenntnissen in Datenstrukturen, Algorithmen, grundlegenden Abstraktionen, Mustern, Architekturen, Paradigmen und Programmiertechniken. Der größte Teil des Codes, der jetzt in der Branche geschrieben wird, wird kurz nach der Erstellung einfach weggeworfen, dann neu geschrieben und wieder weggeworfen. Im Allgemeinen werden Qualität und Wissen nur in Interviews benötigt. Es ist am besten, Code von geringer Qualität zu erstellen und zu pflegen oder den Code wegzuwerfen und mehr Zeit für das erneute Schreiben zu verkaufen. Darüber hinaus ist unsere Branche völlig von der Wissenschaft getrennt, es gibt bedeutende Vorteile von Vermarktern, da wir bereits nicht in Programmiersprachen und nicht in Abstraktionen programmieren, sondern in Frameworks und Bibliotheken, in die wir in einem schönen Wrapper „hineingekommen“ sind. Wir setzen alles aus Würfeln zusammen, oft ohne wissenschaftliches Verständnis, und können selten die Frage beantworten, warum wir dies tun und nicht anders. Alles in Teilen wurde schon vor langer Zeit geschrieben, alles ist im Internet zu finden, aber es stellte sich heraus, dass das eine nicht mit dem anderen zusammenpasst, das heißt, in Teilen ist es das, aber zusammen funktioniert es nicht. Das Verknüpfen getrennter Codeteile ist viel schwieriger als das individuelle Ausführen. Dies geschieht gerade aufgrund des Fehlens eines systematischen Ansatzes, der terminologischen Aufteilung und der konzeptionellen Desynchronisation von Spezialisten. Nur das, was ideologisch verträglich ist, wird zusammenarbeiten, was auf einer allgemeinen Theorie und allgemeinen Standards basiert, die aus dieser Theorie abgeleitet sind. Ich hoffe, dass ich mit diesem Kurs zumindest einen kleinen Schritt in Richtung eines für die Branche wichtigen Konsenses machen werde.


Alle Kursmaterialien sind auf Github frei verfügbar und die Vorlesungen sind offen, sie können kostenlos besucht werden. Jede Woche nehme ich 4 Vorträge auf. Wir halten mehr Seminare und Workshops ab, die jedoch nicht aufgezeichnet werden.


Kursstruktur


  • Grundlegende Konzepte : Software-Abstraktionen, Variablen, Operatoren, Datentypen, Arrays, Strukturen, Skalar- und Referenztypen, Zuordnungen;
  • Schlüsselkonzepte : Funktionen, Kontexte und Umfang, Klassen und Objekte, Prototypen, Methoden, Lambdas, reine Funktionen, Nebenwirkungen, Verschlüsse, teilweise Verwendung, Currying, Komposition, Funktionen höherer Ordnung, Rückrufe, Wrapper, Dekorateure, Verunreinigungen, Ereignisse, Schnittstelle , Singleton, Iteratoren, Funktionsobjekte, Funktoren, Monaden, Dateiverwaltung, Threads, Sockets, Memoisierung, Vererbung, Generatoren, asynchrone Programmierung, Chining, Module und Abhängigkeiten, Fehlerbehandlung, Fabriken und Pools, Timer, reguläre Ausdrücke;
  • Unterstützende Materialien : Git, Versionskontrollsysteme und Paketmanager, Arbeiten mit der Konsole, Testen, kontinuierliche Integration, Protokollierung, Linter, Optimierung und Leistung, Bekämpfung von Speicherlecks, versteckten Klassen, monomorphen Funktionen, Generika, Speicherbereinigung, Speicherverwaltung;
  • Datenstrukturen : Sammlungen, Arrays und typisierte Arrays, Puffer, Listen, Stapel-, Warteschlangen-, Dez-, binäre und hierarchische Bäume, mehrdimensionale Bäume, Rotationen und Ausgleich von Zweigen, Mengen, Hashmaps, Diagrammen, erweiterten Listen, asynchronen Warteschlangen, Automaten, iterierenden Datenstrukturen und suchen;
  • Erweiterte Konzepte : Symbole, Proxies, Unterschiede, Zukünfte und Versprechen, Linsen, Wandler, Async / Warten, Datensammler, asynchrone Komposition, asynchrone Adapter, asynchrone Iteratoren, Introspektion, Reflexion, Gerüstbau, Kontrollinversion und Abhängigkeitsinjektion, Sandkästen, Schichtarchitektur Komponentenansatz, Datenzugriffsschicht, Datenprojektion, Dateisystemüberwachung, Client-Server- und Drei-Link-Architektur, Clustering und Balancing, Protokolldesign, dynamische Modulüberlastung, Metadaten, Din mische Bindung, Interprozessinteraktion;
  • Beispiele für Code und den integrierten Einsatz von Technologien: Live-Tabellenkalkulationen, Chat in Web-Sockets, Implementierung der Grafikabfragesprache, alternative Bibliothek für Metasynchronität asynchroner Abstraktionen, Vergleich der Implementierung derselben Aufgaben in verschiedenen Paradigmen, Vergleich funktionaler Programmierstile, Beispiele für die Anwendungsstruktur, Routing von Handlern in node.js. Anwendungen, Code-Isolation in Sandboxen, Transaktionsobjekte;
  • Programmierparadigmen : imperative, strukturelle und nicht strukturelle, prozedurale, objektorientierte, prototypische, funktionale, logische, deklarative, asynchrone, reaktive, ereignisgesteuerte, automatische, verallgemeinerte, datengesteuerte Programmierung, Multiparadigma, Metaprogrammierung.

Referenzen


Der Vorlesungskalender ist in zwei Mitap-Gruppen verfügbar: HowProgrammingWorks (dies sind Vorlesungen zum Programmieren mit JavaScript-Beispielen) und NodeUA (dies sind Vorlesungen auf Node.js). Ich fordere alle, die Vorlesungen besuchen möchten , auf, sich persönlich anzumelden. Der Eintritt ist für alle frei, aber organisatorisch einfacher, die Anzahl der Studenten zu schätzen. Im Laufe der Geschichte hatte ich Fälle und 600 Personen und 2 Personen, und die Wahlbeteiligung ist unvorhersehbar.


Alle aufgenommenen Videos erscheinen am selben Tag (10-20 Minuten nach der Vorlesung) auf dem Youtube-Kanal .


Die Vorträge sind in zwei Wiedergabelisten unterteilt: Programmierung und JavaScript sowie Node.js.


Ich platziere Links zu Vorträgen und Materialien in zwei Telegrammkanälen: Programmierung und JavaScript sowie Node.js und andere komplexere Themen .


Es gibt zwei Telegrammgruppen für Diskussionen und Fragen: Programmierung und JavaScript sowie Node.js.


Mein Github- Konto, Schulungs-Repositories bei HowProgrammingWorks und unsere Community- Bibliothek.


Fazit


Ich warte auf Vorschläge, um den Kurs mit neuen Themen zu ergänzen. Ich hoffe auf eine Gegeneinführung in Codebeispiele, einschließlich der Übersetzung von Beispielen in andere Sprachen. Ihr Feedback wird dazu beitragen, den Kurs zu verbessern.

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


All Articles