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.
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.
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.
- 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.
All recorded videos appear on the same day (10-20 minutes after the end of the lecture) on the youtube channel .
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.