100 video lectures on programming


    Comrades engineers, the fourth year has gone, as I undertook to teach at the Kiev Polytechnic Institute . During this time I have accumulated a huge number of examples of code and materials, approximately 90 lectures.. I must say that for the entire period of my professional activity (and this is 24 years of almost daily writing of code), I have never raised my level of programming as in recent years, working with students. If earlier it seemed to me that writing briefly, difficult and impressive is the height of skill, but now I realized that my code should be understood by students after minimal explanations, otherwise it is worthless. I came to the conclusion that this ability can and should be extended not only to the training code, but also to the entire working code. Moreover, the training code should not differ significantly from the working code, because we teach future engineers to make real systems, not training ones. After numerous requests, I decided to record all the lectures in the form of screencasts, which immediately after the end of the lecture are sent to YouTube.23 have already been published , materials for 67 more lectures and 10 new lectures are still being prepared.

    Course concept

    You all know that we in the industry have significant problems with fundamental engineering education:

    • University courses are often outdated and leave a lot to be desired,
    • generally accepted terminology is not formed (in disputes, we often call the same things different words and different things the same words), and from this we get confused,
    • articles and videos on the Internet can easily be released by anyone who has thought that his qualifications are sufficient for this,
    • in programming, the accumulation of experience is hindered by the rapid exit of people from the specialty, and in fact the fundamental ideas are cyclically repeated, but those who have gained experience in the previous round are no longer likely to practice and cannot tell younger colleagues where there are cracks and bottlenecks.

    Building a course based on JavaScript is certainly an experimental idea, but this language certainly will not be superfluous for anyone in modern IT. JavaScript developers themselves often experience poor basic engineering background and lack of fundamental knowledge of data structures, algorithms, basic abstractions, patterns, architecture, paradigms, and programming techniques. Most of the code that is being written now in the industry is simply thrown out shortly after creation, then rewritten again and again thrown away. In general, quality and knowledge are rarely required, except in interviews. It is most advantageous to make poor-quality code and maintain it, or throw out the code and sell more time to re-write it. In addition, our industry is completely divorced from science, this has significant merits of marketers, because we are already programming not in programming languages ​​and not on abstractions, but we are programming in frameworks and libraries that we have "vtyuhali" in a beautiful wrapper. We collect everything from cubes, often without any scientific understanding and we can rarely answer the question why we are doing this and not otherwise. Everything is in parts already long ago written, everything can be found on the Internet, but it turned out that it does not form one with the other, that is, it is in parts, but it does not work together. It is much more difficult to connect fragmented pieces of code than to make them one by one. This happens precisely because of the lack of a systematic approach, a terminological split and conceptual dissynchronization of specialists. Only that which is ideologically compatible will work together, which is based on a general theory and general standards derived from this theory. I hope,

    All course materials are freely available on github , and lectures are open, you can attend them for free. Every week I record 4 lectures. We conduct more seminars and workshops, but they are not recorded.

    Course Structure

    • Basic concepts : software abstractions, variables, operators, data types, arrays, structures, scalar and reference types, mappings;
    • Basic concepts : functions, contexts and scope, classes and objects, prototypes, methods, lambdas, pure functions, side effects, closures, partial application, currying, composition, higher-order functions, callbacks, wrappers, decorators, impurities, events, interface , singleton, iterators, functional objects, functors, monads, working with files, streams, sockets, memoization, inheritance, generators, asynchronous programming, cheining, modules and dependencies, error handling, factories and pools, timers, regular expressions;
    • Supporting materials : git, version control systems and package managers, working with the console, testing, continuous integration, logging, linter, optimization and performance, fighting memory leaks, hidden classes, monomorphic functions, generics, garbage collection, memory management;
    • Data structures : collections, arrays and typed arrays, buffers, lists, stack, queue, decks, binary and hierarchical trees, multidimensional trees, rotations and balancing of branches, sets, hashmaps, graphs, expanded lists, asynchronous queue, automata, iteration of data structures and search;
    • Extended concepts : symbols, proxies, dipers, futures and promises, lenses, transducers, async / await, data collectors, asynchronous composition, asynchronous adapters, asynchronous iterators, introspection, reflection, scaffolding, control inversion and dependency injection, sandboxes, layered architecture, component approach, data access layer, data projections, file system monitoring, client-server and three-tier architecture, clustering and balancing, protocol design, dynamic module overload, metadata, dina interfacing, interprocess communication;
    • Examples of code and integrated use of technologies: live spreadsheets, chat on websockets, implementation of query language to graphs, alternative library of asynchronous abstractions metasync, comparison of the implementation of identical tasks on different paradigms, comparison of functional programming styles, examples of application structure, routing handlers in node.js applications, code isolation in sandboxes, transactional objects;
    • Programming paradigms : imperative, structural and non-structural, procedural, object-oriented, prototypical, functional, logical, declarative, asynchronous, reactive, event-driven, automatic, generalized, flow-controlled programming, multi-paradigm, metaprogramming.


    The lecture calendar is available in two mita groups: HowProgrammingWorks (these are programming JavaScript lectures on examples) and NodeUA (these are Node.js lectures) and I urge everyone who wants to attend lectures in person to register. Admission is free for everyone, but it is organizationally easier to estimate the number of participants. In the entire history I have had cases and 600 people and 2 people, and the attendance is unpredictable.

    All recorded videos appear on the same day (10-20 minutes after the end of the lecture) on the youtube channel .

    Lectures are grouped into two playlists: Programming and JavaScript and for Node.js .

    I place links to lectures and materials in two telegram channels: on programming and JavaScript, and on Node.js and other more complex topics .

    For discussion and questions, there are two telegrams groups: Programming and JavaScript and for Node.js .

    My account on github , training repositories in the organization HowProgrammingWorks and our community library .


    I look forward to proposals on completing the course with new topics, I hope for the inclusion in code samples, including the translation of examples into other languages. Your feedback will help improve the course.

    Only registered users can participate in the survey. Sign in , please.

    How interesting is this course to you?

    Also popular now: