diff --git a/Courses/Advanced.en.md b/Courses/Advanced.en.md new file mode 100644 index 0000000..690f132 --- /dev/null +++ b/Courses/Advanced.en.md @@ -0,0 +1,32 @@ +# Second part of the course + +Modules SEF2 and SEF3 + +## Asynchronous programming + +### Revision + +- [Higher order functions, callbacks, JavaScript events](https://youtu.be/1vqATwbGHnc) + - Higher order functions: https://github.com/HowProgrammingWorks/HigherOrderFunction + - Callback functions: https://github.com/HowProgrammingWorks/Callbacks +- [Asynchronous programming with callbacks](https://youtu.be/z8Hg6zgi3yQ) + - Code examples: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - do library: https://github.com/metarhia/do +- [Timers, timeouts and EventEmitter](https://youtu.be/LK2jveAnRNg) + - Timers: https://github.com/HowProgrammingWorks/Timers + - EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - Events: https://github.com/metarhia/common/blob/master/lib/events.js + +### An overview of asynchronous programming + +- [Asynchronous programming (an overview)](https://youtu.be/hY6Z6qNYzmc) + +### Lectures + +- [Asynchrony with the async.js library](https://youtu.be/XQ94wQc-erU) + - Code examples: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - async.js library: https://caolan.github.io/async/ +- [Asynchrony with Promises](https://youtu.be/RMl4r6s1Y8M) + - Code examples: https://github.com/HowProgrammingWorks/Promise + +## Node.js technology stack diff --git a/Courses/AlgAndData.en.md b/Courses/AlgAndData.en.md new file mode 100644 index 0000000..19191dd --- /dev/null +++ b/Courses/AlgAndData.en.md @@ -0,0 +1,18 @@ +# Algorithms and data structures + +- Built-in collections: arrays and objects +- [Collections, sets, hash tables in JavaScript](https://youtu.be/hN0wsq5LNOc) + - Collections: https://github.com/HowProgrammingWorks/Collections + - Hash tables: https://github.com/HowProgrammingWorks/Map + - Sets: https://github.com/HowProgrammingWorks/Set +- [Data structures: lists, stack, queue, deck in JavaScript](https://youtu.be/9KvA4hDDSjk) + - Lists: https://github.com/HowProgrammingWorks/LinkedList + - Queues: https://github.com/HowProgrammingWorks/Dequeue +- Trees: binary trees and hierarchical multi-linked structures +- [Graphs and requests to graph structures in JavaScript](https://youtu.be/a0W0T8Yqw3s) + - Code examples: https://github.com/HowProgrammingWorks/Graph +- Buffering: buffers, lists of buffers, cyclic buffers +- Immutable - immutable data structures (in preparation) +- Lock-free data structures (in preparation) +- CRDT - Conflict-free data types (in preparation) +- Dynamic programming (in preparation) \ No newline at end of file diff --git a/Courses/Architecture.en.md b/Courses/Architecture.en.md new file mode 100644 index 0000000..af75cf5 --- /dev/null +++ b/Courses/Architecture.en.md @@ -0,0 +1,53 @@ +# Architecture of information systems + +## Course structure + +- Overview of tasks, component, modular and multi-layered approaches to design +- IS classification: ERP, SCM, CRM, MRP, BI, B2B and B2C +- Layered architecture and multi-link architecture for monolithic ICs +- Types of interaction: common data, procedure call, event transfer +- Two- and three-link applications, multi-link, pipeline topology +- Service approach: web services and microservices, serverless +- Data warehouses and DBMS: relational, noSQL, columnar, key-value +- CQS, CQRS and Event-Sourcing +- Topologies of distributed ICs: star, bus, ring, conveyor, fully connected +- Design of API interfaces +- Corporate integration buses (exchange with external subsystems) +- Event broadcast buses and event queues (MQ systems) +- Schedulers of deferred tasks and resources, execution queues +- Testing, quality assessments, continuous integration +- Infrastructure, deployment, updating, migrations, reengineering +- Balancing, replication, sharding, resharding, backups and restoration +- Security, authorization, authentication, application firewall +- Application and system logging, incident investigation +- Analysis and reengineering of business processes + +## Video lectures + +- [Architectural approach to programming](https://youtu.be/d_vyO2CkiOc) +- [Layers, connectivity and code connectivity](https://youtu.be/A3RpwNlVeyY) +- Code examples: https://github.com/HowProgrammingWorks/Abstractions +- [Modules, layers, project structure, sandboxes in JavaScript and Node.js](https://youtu.be/O7A9chb573E) + - Project example: https://github.com/HowProgrammingWorks/Project + - Abstract layers: https://github.com/HowProgrammingWorks/AbstractionLayers + - Sandboxes: https://github.com/HowProgrammingWorks/Sandboxes +- [Inversion of control and dependency injection in Node.js](https://youtu.be/Fz86Fdjz-LM) + - Inversion of control: https://github.com/HowProgrammingWorks/InversionOfControl + - Dependency Injection: https://github.com/HowProgrammingWorks/DependencyInjection +- [Interprocess interaction in Node.js](https://youtu.be/2OXWZFMvfbc) + - Code examples: https://github.com/HowProgrammingWorks/InterProcessCommunication +- [High-load distributed applications in Node.js](https://youtu.be/7tfZDABPvVs) +- [Data access layer, cursor, transaction](https://youtu.be/CRcSWtWVvrA) + - Code examples: https://github.com/HowProgrammingWorks/Transaction +- [API development in Node.js (client and server)](https://youtu.be/-az912XBCu8) + - Code examples: https://github.com/HowProgrammingWorks/API +- [CQS, CQRS, Event Sourcing - Separation of requests and data modifications](https://youtu.be/T2tRc80Q8Qw) + - CQS: https://github.com/HowProgrammingWorks/CQS + - CQRS: https://github.com/HowProgrammingWorks/CQRS + - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing +- [Application of EventSourcing](https://youtu.be/kFNtKiK2SPs) + - https://github.com/HowProgrammingWorks/EventSourcing + - https://github.com/HowProgrammingWorks/CQRS + - https://github.com/HowProgrammingWorks/Command +- [Serverless Clouds (FaaS) and isolation of request contexts in Node.js](https://youtu.be/x-Rd6fPV6L8) + - Slides: https://www.slideshare.net/tshemsedinov/serverless-clouds-faas-and-request-context-isolation-in-nodejs \ No newline at end of file diff --git a/Courses/Async-2024.en.md b/Courses/Async-2024.en.md new file mode 100644 index 0000000..e9e648f --- /dev/null +++ b/Courses/Async-2024.en.md @@ -0,0 +1,44 @@ +# Asynchronous programming 2024 + +The methods of writing asynchronous code that we used 10-15 years ago are irretrievably a thing of the past and can be interesting only to support the legacy exercise in a deep understanding of asynchronous programming. Even the methods of 5-7 years ago already have little in common with modern practices, but the Internet is full of outdated information, even [Metarhia community open course](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Asynchronous.md ) has become too bulky and redundant at the moment. It should also be mentioned that asynchronous programming should look fundamentally different in system and application code. It will not be possible to completely hide the complexity of asynchronous code behind abstractions from the product developer, because it will in any case work with timers, events, streams, fetch and other asynchronous APIs, but it can be written dozens of times easier than asynchronous code in a system layer. As for the system layer, it is necessary to introduce the theory of queues (systems of mass service), the model of actors, some abstractions from parallel programming (semaphores, rendezvous, atomic operations). Of course, it is difficult to contain all this in one course, therefore, we will give priority to the application code and first fully prepare the course for the use of asynchronous programming in product development, and then we will add optional topics of the old course and many other useful abstractions widely used in other programming languages, but little known in the world of JavaScript. + +## Content + +Important aspects of the new course: + +- Concentration on practical application (code examples from real projects) +- Relevance and compliance with standards of 2023-2024 +- Tasks and analysis of the solutions, seminars, code review (the course is not just video) +- Recommendations for choosing the style and abstractions of asynchrony for the task +- Attention to correct error handling in all styles of asynchrony +- Emphasis on reliability, maintainability, testability, reduction of coupling +- Examples and tasks for correcting hidden problem states and data races + +Topics of the new course: + +- Asynchrony contracts based on callback: callback-last, error-first +- Minimum required understanding of runtime: event loop, I/O, timers +- Asynchrony contracts based on events: EventEmitter, Streams +- Promise/then/catch/finally contract and async/await syntax +- Parallel and serial execution, all/any/race/allSettled +- Contract converters, code docking in different styles +- Prevention of race conditions of data and control in asynchronous code +- Cancellation of asynchronous operations: AbortController, AbortSignal +- Error processing, their detection and possible problems with the stacktrace +- Asynchronous collection (we collect values until ready) + +## Pay attention + +What you need to know and be able to do to start: + +- [JavaScript syntax, but possible without any tricks](https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md) +- Confidently know git, have a github account +- Preferably docker, have a working machine on linux or mac +- Any development environment, IDE or editor + +What this course is not: it is not reading documentation, not a course on libraries and frameworks, not a repetition of an old course, not live coding and not a master class, not a stream. The new course is the most concentrated information and practical tasks for both applied and system programming with a comparison of these approaches. + +## How to get to the course + +- News will be in the channel: https://t.me/asyncify +- Course group: https://t.me/asynctalks \ No newline at end of file diff --git a/Courses/Async.en.md b/Courses/Async.en.md new file mode 100644 index 0000000..b60e7ed --- /dev/null +++ b/Courses/Async.en.md @@ -0,0 +1,70 @@ +# Asynchronous programming + +- Author: https://github.com/tshemsedinov +- Legend: + - ✨ - Mandatory lectures + - πŸ§‘β€πŸ’» - Code examples + - 🧩 - Optional lectures + - πŸ•‘ - Outdated lectures (not current or historical) + +## Course program + +- ⭐ [Introduction and organizational issues](https://youtu.be/vfEyRijm83g) +- ⭐ [Q&A workshop for all courses](https://youtu.be/Wm7wclbv1Ik) +- ✨ [Asynchronous Programming (Overview)](https://youtu.be/hY6Z6qNYzmc) +- ✨ [Timers, Timeouts and EventEmitter](https://youtu.be/LK2jveAnRNg) + - πŸ§‘β€πŸ’» Timers: https://github.com/HowProgrammingWorks/Timers + - πŸ§‘β€πŸ’» EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - πŸ§‘β€πŸ’» Events: https://github.com/metarhia/common/blob/master/lib/events.js +- ✨ [Asynchronous programming with callbacks](https://youtu.be/z8Hg6zgi3yQ) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - πŸ§‘β€πŸ’» do library: https://github.com/metarhia/do +- πŸ•‘ [Non-blocking asynchronous iteration](https://youtu.be/wYA2cIRYLoA) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/NonBlocking +- πŸ•‘ [Asynchrony with async.js library](https://youtu.be/XQ94wQc-erU) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - πŸ§‘β€πŸ’» async.js library: https://caolan.github.io/async/ +- ✨ [Asynchrony on promises](https://youtu.be/RMl4r6s1Y8M) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Promise +- ✨ [Asynchronous functions, async/await, thenable, error handling](https://youtu.be/Jdf_tZuJbHI) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/AsyncAwait +- 🧩 [Asynchronous adapters: promisify, callbackify, asyncify](https://youtu.be/76k6_YkYRmU) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/AsyncAdapter +- ✨ [Asynchronous Data Collectors](https://youtu.be/tgodt1JL6II) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Collector + - πŸ§‘β€πŸ’» metasync library: https://github.com/metarhia/metasync +- 🧩 [Raw errors in promises](https://youtu.be/1Ml5NE2fsZ8) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/PromiseError +- πŸ•‘ [Asynchronous stacktrace problem](https://youtu.be/pfiHTx3j87Y) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/StackTrace +- ✨ [Generators and asynchronous generators](https://youtu.be/kvNm9D32s8s) + - πŸ§‘β€πŸ’» Generators: https://github.com/HowProgrammingWorks/Generator + - πŸ§‘β€πŸ’» Asynchronous generators: https://github.com/HowProgrammingWorks/AsyncGenerator +- ✨ [Iterators and Asynchronous Iterators](https://youtu.be/rBGFlWpVpGs) + - πŸ§‘β€πŸ’» Iterators: https://github.com/HowProgrammingWorks/Iterator + - πŸ§‘β€πŸ’» Asynchronous iterators: https://github.com/HowProgrammingWorks/AsyncIterator +- πŸ•‘ [Cancellation of asynchronous operations](https://youtu.be/T8fXlnqI4Ws) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Cancelable +- ⭐ There will be a new lecture: AbortController and AbortSygnal - Cancelling asynchronous operations +- 🧩 [Asynchronous function composition](https://youtu.be/3ZCrMlMpOrM) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/AsyncCompose +- 🧩 [Thenable and light await](https://youtu.be/DXp__1VNIvI) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Thenable +- 🧩 [Competitive asynchronous queue](https://youtu.be/Lg46AH8wFvg) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/ConcurrentQueue +- 🧩 [Revealing Constructor Pattern](https://youtu.be/leR5sXRkuJI) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/RevealingConstructor +- 🧩 [Future: Asynchrony with stateless futures](https://youtu.be/22ONv3AGXdk) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Future +- πŸ•‘ [Deferred: Asynchrony with defers with state](https://youtu.be/a2fVA1o-ovM) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Deferred +- 🧩 [Actor Model](https://youtu.be/xp5MVKEqxY4) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/ActorModel +- 🧩 [Pattern Observer (Observer + Observable)](https://youtu.be/_bFXuLcXoXg) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Observer +- ✨ [Asynchrony with RxJS and event streams](https://youtu.be/0kcpMAl-wfE) + - πŸ§‘β€πŸ’» Code examples: https://github.com/HowProgrammingWorks/Rx +- ⭐ There will be a new lecture: Async hooks +- 🧩 [Memory accessible from multiple threads in Node.js](https://youtu.be/KNsm_iIQt7U) +- 🧩 [Asynchronous pool for worker thread pool in Node.js](https://youtu.be/Jj5KZRq4wYI) +- ✨ Asynchronous programming from the lecture [introduction to Node.js](https://www.youtube.com/watch?v=mRvzgBGLVyM) \ No newline at end of file diff --git a/Courses/Asynchronous-timecodes.en.md b/Courses/Asynchronous-timecodes.en.md new file mode 100644 index 0000000..e4ba7c9 --- /dev/null +++ b/Courses/Asynchronous-timecodes.en.md @@ -0,0 +1,122 @@ +# Timecodes for the "Asynchronous programming" course + +The general overview of the course is here: [Asynchronous.md](Asynchronous.md) + +## [Asynchronous programming in Node.js and JavaScript](https://youtu.be/hY6Z6qNYzmc) + +- [05:45 Callbacks](https://youtu.be/hY6Z6qNYzmc?t=345) +- [10:00 Async.js or analogues](https://youtu.be/hY6Z6qNYzmc?t=600) +- [15:47 Events](https://youtu.be/hY6Z6qNYzmc?t=947) +- [18:00 Promise](https://youtu.be/hY6Z6qNYzmc?t=1080) +- [25:20 async/await](https://youtu.be/hY6Z6qNYzmc?t=1520) +- [27:10 Functor + Chaining + composition](https://youtu.be/hY6Z6qNYzmc?t=1630) +- [30:49 Problems of callback, async.js, Promise, async/await](https://youtu.be/hY6Z6qNYzmc?t=1849) +- [34:00 Add timeout to any function](https://youtu.be/hY6Z6qNYzmc?t=2040) +- [36:55 Make function cancelable](https://youtu.be/hY6Z6qNYzmc?t=2215) +- [37:59 More wrappers](https://youtu.be/hY6Z6qNYzmc?t=2279) +- [39:22 Promisify and Callbackify](https://youtu.be/hY6Z6qNYzmc?t=2362) +- [48:47 Sync function to async](https://youtu.be/hY6Z6qNYzmc?t=2927) +- [41:43 Sync function to Promise](https://youtu.be/hY6Z6qNYzmc?t=2503) +- [43:17 Convertors](https://youtu.be/hY6Z6qNYzmc?t=2597) +- [43:31 Metasync](https://youtu.be/hY6Z6qNYzmc?t=2611) +- [45:26 Function composition](https://youtu.be/hY6Z6qNYzmc?t=2726) +- [47:09 Asynchronous function composition](https://youtu.be/hY6Z6qNYzmc?t=2829) +- [47:58 Flow communication like in electronics](https://youtu.be/hY6Z6qNYzmc?t=2878) +- [50:06 Collectors](https://youtu.be/hY6Z6qNYzmc?t=3006) +- [59:17 Queue](https://youtu.be/hY6Z6qNYzmc?t=3557) + +## [Timers, timeouts, EventEmitter in JavaScript and Node.js](https://youtu.be/LK2jveAnRNg) + +- [00:30 callback sync/async](https://youtu.be/LK2jveAnRNg?t=30) +- [01:35 time delay sleep.js](https://youtu.be/LK2jveAnRNg?t=95) +- [05:35 await-sleep.js](https://youtu.be/LK2jveAnRNg?t=335) +- [08:40 sleep-then.js](https://youtu.be/LK2jveAnRNg?t=520) +- [09:30 order.js](https://youtu.be/LK2jveAnRNg?t=570) +- [18:38 precision.js](https://youtu.be/LK2jveAnRNg?t=1118) +- [22:13 blocking.js](https://youtu.be/LK2jveAnRNg?t=1333) +- [22:50 timers.js](https://youtu.be/LK2jveAnRNg?t=1370) +- [29:35 ref-unref.js](https://youtu.be/LK2jveAnRNg?t=1775) +- [32:05 enroll.js](https://youtu.be/LK2jveAnRNg?t=1925) +- [34:57 eventloop.txt](https://youtu.be/LK2jveAnRNg?t=2097) +- [37:37 eventEmitter](https://youtu.be/LK2jveAnRNg?t=2257) +- [44:32 simple.js](https://youtu.be/LK2jveAnRNg?t=2672) +- [47:48 usage.js](https://youtu.be/LK2jveAnRNg?t=2868) +- [48:30 enhanced.js](https://youtu.be/LK2jveAnRNg?t=2910) +- [50:18 star-fix.js](https://youtu.be/LK2jveAnRNg?t=3018) +- [51:10 usage.js](https://youtu.be/LK2jveAnRNg?t=3070) +- [53:15 closure.js](https://youtu.be/LK2jveAnRNg?t=3195) +- [54:50 fp.js](https://youtu.be/LK2jveAnRNg?t=3290) +- [57:10 methods.js](https://youtu.be/LK2jveAnRNg?t=3430) +- [1:06:35 min.js](https://youtu.be/LK2jveAnRNg?t=3995) +- [1:12:31 prod.js](https://youtu.be/LK2jveAnRNg?t=4351) + +## [Asynchronous programming with callbacks in JavaScript](https://youtu.be/z8Hg6zgi3yQ) + +- [01:20 example callback function](https://youtu.be/z8Hg6zgi3yQ?t=80) +- [02:40 example of sequential execution of callback functions](https://youtu.be/z8Hg6zgi3yQ?t=160) +- [05:52 example of parallel execution of async functions using wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=352) +- [15:18 example of sequential execution of async functions using wrapAsync](https://youtu.be/z8Hg6zgi3yQ?t=918) +- [19:05 chain execution of async functions](https://youtu.be/z8Hg6zgi3yQ?t=1145) +- [41:16 where you can find asynchronous functions](https://youtu.be/z8Hg6zgi3yQ?t=2476) + +## [Non-blocking asynchronous iteration in JavaScript](https://youtu.be/wYA2cIRYLoA) + +- [01:02 blocking array iteration](https://youtu.be/wYA2cIRYLoA?t=62) +- [03:24 blocking iteration using for await](https://youtu.be/wYA2cIRYLoA?t=204) +- [04:47 non-blocking iteration using setTimeout](https://youtu.be/wYA2cIRYLoA?t=287) +- [06:45 non-blocking iteration using for await](https://youtu.be/wYA2cIRYLoA?t=405) +- [08:20 non-blocking iteration without delay](https://youtu.be/wYA2cIRYLoA?t=500) +- [13:00 non-blocking iteration without delay using for await](https://youtu.be/wYA2cIRYLoA?t=780) +- [19:30 using asynchronous iteration for ordinary arrays](https://youtu.be/wYA2cIRYLoA?t=1170) + +## [Asynchrony with the async.js library](https://youtu.be/XQ94wQc-erU) + +## [Asynchrony with promises, Promise, all, then, catch, race](https://youtu.be/RMl4r6s1Y8M) + +## [Asynchronous functions, async/await, thenable, error handling](https://youtu.be/Jdf_tZuJbHI) + +## [Asynchronous adapters: promisify, callbackify, asyncify...](https://youtu.be/76k6_YkYRmU) + +## [Asynchronous data collectors](https://youtu.be/tgodt1JL6II) + +## [Unprocessed errors in Node.js applications](https://youtu.be/1Ml5NE2fsZ8) + +## [Asynchronous stacktrace problem in JavaScript and Node.js](https://youtu.be/pfiHTx3j87Y) + +## [Generators and asynchronous generators in JavaScript](https://youtu.be/kvNm9D32s8s) + +- [00:00 Ways to declare generators](https://youtu.be/kvNm9D32s8s?t=0) +- [10:41 An example of a generator with yield](https://youtu.be/kvNm9D32s8s?t=641) +- [15:54 An example of a generator with yield and return](https://youtu.be/kvNm9D32s8s?t=954) +- [18:47 Obtaining values from the generator by the for...of loop](https://youtu.be/kvNm9D32s8s?t=1127) +- [21:04 Obtaining values from the spead generator by the operator](https://youtu.be/kvNm9D32s8s?t=1264) +- [21:50 Method next](https://youtu.be/kvNm9D32s8s?t=1310) +- [23:30 Example of a generator with yield * returning iterable objects](https://youtu.be/kvNm9D32s8s?t=1410) +- [25:05 An example of a generator with yield * returning other generators](https://youtu.be/kvNm9D32s8s?t=1505) +- [26:18 Return method](https://youtu.be/kvNm9D32s8s?t=1578) +- [28:11 Throw method](https://youtu.be/kvNm9D32s8s?t=1691) +- [29:05 Summary](https://youtu.be/kvNm9D32s8s?t=1745) + +## [Iterators and asynchronous iterators in JavaScript](https://youtu.be/rBGFlWpVpGs) + +## [Cancellation of asynchronous operations, cancellable callback and Promise in JavaScript](https://youtu.be/T8fXlnqI4Ws) + +## [Asynchronous composition of functions in JavaScript](https://youtu.be/3ZCrMlMpOrM) + +## [Thenable and lightweight await in JavaScript](https://youtu.be/DXp__1VNIvI) + +## [Competitive asynchronous queue in JavaScript](https://youtu.be/Lg46AH8wFvg) + +## [Revealing Constructor pattern](https://youtu.be/leR5sXRkuJI) + +## [Future: Asynchrony on stateless futures](https://youtu.be/22ONv3AGXdk) + +## [Deferred: Asynchrony on stateful deferrals](https://youtu.be/a2fVA1o-ovM) + +## [Actor model for parallel calculated](https://youtu.be/xp5MVKEqxY4) + +## [Observer + Observable Pattern](https://youtu.be/_bFXuLcXoXg) + +## [Asynchrony on RxJS and event streams](https://youtu.be/0kcpMAl-wfE) + +## [Asynchronous pool for worker thread pool in Node.js](https://youtu.be/Jj5KZRq4wYI) \ No newline at end of file diff --git a/Courses/Asynchronous.en.md b/Courses/Asynchronous.en.md new file mode 100644 index 0000000..9f4adf8 --- /dev/null +++ b/Courses/Asynchronous.en.md @@ -0,0 +1,65 @@ +# Asynchronous programming + +Volume of material: 26 lectures, 28 repositories with code examples. + +[There are timecodes and a detailed table of contents for some of the lectures] (Asynchronous-timecodes.md) + +## Video lectures + +- [Asynchronous programming (overview)](https://youtu.be/hY6Z6qNYzmc) +- [Timers, timeouts and EventEmitter](https://youtu.be/LK2jveAnRNg) + - Timers: https://github.com/HowProgrammingWorks/Timers + - EventEmitter: https://github.com/HowProgrammingWorks/EventEmitter + - Events: https://github.com/metarhia/common/blob/master/lib/events.js +- [Asynchronous programming on callbacks](https://youtu.be/z8Hg6zgi3yQ) + - Code examples: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - The do library: https://github.com/metarhia/do +- [Non-blocking asynchronous iteration](https://youtu.be/wYA2cIRYLoA) + - Code examples: https://github.com/HowProgrammingWorks/NonBlocking +- [Asynchrony with the async.js library](https://youtu.be/XQ94wQc-erU) + - Code examples: https://github.com/HowProgrammingWorks/AsynchronousProgramming + - async.js library: https://caolan.github.io/async/ +- [Asynchrony with orders](https://youtu.be/RMl4r6s1Y8M) + - Code examples: https://github.com/HowProgrammingWorks/Promise +- [Asynchronous functions, async/await, thenable, error handling](https://youtu.be/Jdf_tZuJbHI) + - Code examples: https://github.com/HowProgrammingWorks/AsyncAwait +- [Asynchronous adapters: promisify, callbackify, asyncify](https://youtu.be/76k6_YkYRmU) + - Code examples: https://github.com/HowProgrammingWorks/AsyncAdapter +- [Asynchronous data collectors](https://youtu.be/tgodt1JL6II) + - Code examples: https://github.com/HowProgrammingWorks/Collector + - Library: https://github.com/metarhia/metasync +- [Unprocessed errors in promises](https://youtu.be/1Ml5NE2fsZ8) + - Code examples: https://github.com/HowProgrammingWorks/PromiseError +- [Asynchronous stacktrace problem](https://youtu.be/pfiHTx3j87Y) + - Code examples: https://github.com/HowProgrammingWorks/StackTrace +- [Generators and asynchronous generators](https://youtu.be/kvNm9D32s8s) + - Generators: https://github.com/HowProgrammingWorks/Generator + - Asynchronous generators: https://github.com/HowProgrammingWorks/AsyncGenerator +- [Iterators and asynchronous iterators](https://youtu.be/rBGFlWpVpGs) + - Iterators: https://github.com/HowProgrammingWorks/Iterator + - Asynchronous iterators: https://github.com/HowProgrammingWorks/AsyncIterator +- [Cancellation of asynchronous operations](https://youtu.be/T8fXlnqI4Ws) + - Code examples: https://github.com/HowProgrammingWorks/Cancelable +- [Asynchronous function composition](https://youtu.be/3ZCrMlMpOrM) + - Code examples: https://github.com/HowProgrammingWorks/AsyncCompose +- [Thenable and lightweight await](https://youtu.be/DXp__1VNIvI) + - Code examples: https://github.com/HowProgrammingWorks/Thenable +- [Competitive asynchronous queue](https://youtu.be/Lg46AH8wFvg) + - Code examples: https://github.com/HowProgrammingWorks/ConcurrentQueue +- [Revealing Constructor Pattern](https://youtu.be/leR5sXRkuJI) + - Code examples: https://github.com/HowProgrammingWorks/RevealingConstructor +- [Future: Asynchrony on stateless futures](https://youtu.be/22ONv3AGXdk) + - Code examples: https://github.com/HowProgrammingWorks/Future +- [Deferred: Asynchrony on stateful deferrals](https://youtu.be/a2fVA1o-ovM) + - Code examples: https://github.com/HowProgrammingWorks/Deferred +- [Actor Model](https://youtu.be/xp5MVKEqxY4) + - Code examples: https://github.com/HowProgrammingWorks/ActorModel +- [Observer + Observable Pattern](https://youtu.be/_bFXuLcXoXg) + - Code examples: https://github.com/HowProgrammingWorks/Observer +- [Asynchrony on RxJS and event streams](https://youtu.be/0kcpMAl-wfE) + - Code examples: https://github.com/HowProgrammingWorks/Rx +- Asynchronous event handlers and AsyncEmitter +- Async hooks +- [Shared memory in multithreaded Node.js](https://youtu.be/KNsm_iIQt7U) +- [Asynchronous pool for worker thread pool in Node.js](https://youtu.be/Jj5KZRq4wYI) +- Asynchronous programming from [node.js introduction lecture](https://www.youtube.com/watch?v=mRvzgBGLVyM) \ No newline at end of file diff --git a/Courses/Beginners.en.md b/Courses/Beginners.en.md new file mode 100644 index 0000000..5a7441f --- /dev/null +++ b/Courses/Beginners.en.md @@ -0,0 +1,56 @@ +# Fundamentals of programming + +- Author: https://github.com/tshemsedinov +- News in the Telegram channel: https://t.me/HowProgrammingWorks +- For questions, the Telegram group: https://t.me/MetarhiaHPW +- Youtube: https://www.youtube.com/@MetatechEducation/playlists + +## Table of contents + +- ⭐ [Introduction](https://youtu.be/2DM5I2CI4gY) +- ⭐ [Identifiers: variables and constants](https://youtu.be/fb318yXGwxo) +- ⭐ [values record and data types](https://youtu.be/B1Y00zN31Yg) +- ⭐ [Functions and blocks, scope, contexts](https://youtu.be/JdscRDLG9A4) +- ⭐ [Conditions and branching](https://youtu.be/O_EJ0StSnac) +- ⭐ [Loops: for, for..of and for..in](https://youtu.be/_Jxe-WacgUs) +- ⭐ [While and do..while loops](https://youtu.be/wDVQrZx2dKU) +- ⭐ [Collections: arrays and objects - Array and Object](https://youtu.be/dZJ97DMu2cA) +- ⭐ [Objects: mix-ins and serialization](https://youtu.be/zRr-WZB7AK8) +- πŸ§‘β€πŸ’» [Tasks 1-5](https://github.com/HowProgrammingWorks/Book/blob/master/content/ru/2-9-Tasks.md) +- πŸ§‘β€πŸ’» [Analysis of solutions to problems 1-5](https://youtu.be/WNNJfjL3h3s) +- ⭐ [Collections: Set sets and Map hash tables](https://youtu.be/OE9DxIBu-8I) +- ⭐ [Callback - callback functions and Timers](https://youtu.be/6eg-WMDejSM) +- ⭐ [Closure function and context](https://youtu.be/LUd-cFkhCrY) +- ⭐ [Async/await - asynchronous functions](https://youtu.be/DrOiZBcWlKg) +- ⭐ [Errors, exceptions, bugs, throw, try/catch](https://youtu.be/MF8u1Oj64Dk) +- ⭐ [Modular systems: ESM (ECMAScript Modules) and CJS (CommonJS)](https://youtu.be/roinnSNNgjs) +- ⭐ [Decomposition of the program into modules](https://youtu.be/7S6TrUbFMlQ) +- ⭐ [Recursion, exiting it and call stack](https://youtu.be/c1rJema94iY) +- πŸ§‘β€πŸ’» [Tasks: 38 examples of bad code to rewrite](https://github.com/HowProgrammingWorks/Exams/tree/master/Tasks) + +To be continued... + +More complex lectures can be found here: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Fundamentals.md + +## Recommendations for solving problems + +πŸ§‘β€πŸ’» Tasks: https://github.com/HowProgrammingWorks/Exams/tree/master/Tasks + +- The code initially works and gives the correct result, you need to fix the file, but do not break the code +- Use the tests from the `Tests' directory to check solutions. +- Your task is to improve: code clarity, style, simplicity +- Here is a checklist of frequent errors (they should definitely be corrected): + - Do not modify the input parameters of functions + - Prefer arrow functions + - Use eslint and prettier with our settings (see root repository) + - It is preferable to use `for..of`, less `Array/map`, less `for` by variable, avoid `for..in` and `forEach` + - Use intermediate identifiers to separate long expressions + - Prefer `const`, rarely use `let`, but never `var` + - Convert all magic values to constants + - Follow the rules for naming identifiers + - Think carefully about the names of the identifiers, so that when reading the code, everyone understands their content + - Do not make functions too long + - Don't make a big stack of if-expressions, use arrays and objects instead + - It is important not to rewrite from scratch, but to improve step by step + +πŸ‘‰ Index of second courses: https://github.com/HowProgrammingWorks/Index \ No newline at end of file diff --git a/Courses/Databases.en.md b/Courses/Databases.en.md new file mode 100644 index 0000000..5c369ff --- /dev/null +++ b/Courses/Databases.en.md @@ -0,0 +1,28 @@ +# Database design + +- [Databases in 2020 (introduction, history, state)](https://youtu.be/8RjT2VYBWNQ) + - Slides: https://www.slideshare.net/tshemsedinov/2020-228734914 +- [Introduction to SQL: SELECT](https://youtu.be/Z679c8S0d7I) + - Slides: https://www.slideshare.net/tshemsedinov/sql-structured-query-language-228735217 +- [Introduction to SQL: CREATE, ALTER, DROP, keys, indexes](https://youtu.be/QF0v29ZneYE) +- [PostgreSQL: installation, configuration, console](https://youtu.be/Fm6yLb8qCh4) +- [Databases: ER, ERD, IDEF1x, entity-connection](https://youtu.be/ByWfj3e0HnE) +- [SQL SELECT: math functions, aliases, limit, with, into](https://youtu.be/lle4Yp58z6k) +- SQL JOINS: CROSS, INNER, LEFT, RIGHT, FULL +- Normal forms +- [Data access layer, cursor, transaction](https://youtu.be/CRcSWtWVvrA) + - Examples of code: https://github.com/HowProgrammingWorks/Transaction +- [Working with databases in Node.js using PostgreSQL as an example](https://youtu.be/2tDvHQCBt3w) + - Examples of code: https://github.com/HowProgrammingWorks/Databases +- [CQS, CQRS, Event Sourcing - Separation of requests and data modifications](https://youtu.be/T2tRc80Q8Qw) + - CQS: https://github.com/HowProgrammingWorks/CQS + - CQRS: https://github.com/HowProgrammingWorks/CQRS + - EventSourcing: https://github.com/HowProgrammingWorks/EventSourcing +- Three-tier database applications +- SQL injections and protection against them +- [Application of EventSourcing](https://youtu.be/kFNtKiK2SPs) + - https://github.com/HowProgrammingWorks/EventSourcing + - https://github.com/HowProgrammingWorks/CQRS + - https://github.com/HowProgrammingWorks/Command +- [Security of Node.js applications](https://youtu.be/Pdfo1G-gI6s) + - Slides: https://www.slideshare.net/tshemsedinov/nodejs-security-199004963 \ No newline at end of file diff --git a/Courses/Functional-timecodes.en.md b/Courses/Functional-timecodes.en.md new file mode 100644 index 0000000..8ec29db --- /dev/null +++ b/Courses/Functional-timecodes.en.md @@ -0,0 +1,168 @@ +# Time codes for the course "Functional programming" + +The general table of contents is here: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Functional.md + +## [Functions, lambdas (arrow functions), contexts, closures in JavaScript](https://youtu.be/pn5myCmpV2U) + +- [00:00:00 Introduction](https://youtu.be/pn5myCmpV2U?t=0) +- [00:11:22 Function declaration](https://youtu.be/pn5myCmpV2U?t=682) +- [00:12:46 Function expression](https://youtu.be/pn5myCmpV2U?t=766) +- [00:16:07 Lambda expression or arrow function](https://youtu.be/pn5myCmpV2U?t=967) +- [00:16:43 Lambda function](https://youtu.be/pn5myCmpV2U?t=1003) +- [00:18:45 Scope](https://youtu.be/pn5myCmpV2U?t=1125) +- [00:25:00 Functions as abstractions](https://youtu.be/pn5myCmpV2U?t=1500) +- [00:26:43 Function methods (name, length, toString( ) )](https://youtu.be/pn5myCmpV2U?t=1603) +- [00:31:26 Default values in the function](https://youtu.be/pn5myCmpV2U?t=1886) +- [00:36:46 Rest operator (...args)](https://youtu.be/pn5myCmpV2U?t=2206) +- [00:41:49 Method of defining a function via new Function](https://youtu.be/pn5myCmpV2U?t=2509) +- [00:44:46 Functions within the object](https://youtu.be/pn5myCmpV2U?t=2686) +- [00:50:42 Calling object fields from a bound function via this](https://youtu.be/pn5myCmpV2U?t=3042) +- [00:55:24 History of context creation syntax, through self-calling functions (IIFE)](https://youtu.be/pn5myCmpV2U?t=3324) +- [00:58:30 Methods of the function inherited from the object (call, apply)](https://youtu.be/pn5myCmpV2U?t=3510) +- [01:00:53 Commenting on functions](https://youtu.be/pn5myCmpV2U?t=3653) +- [01:01:27 Assignment of function decomposition](https://youtu.be/pn5myCmpV2U?t=3687) +- [01:04:24 Closure: context](https://youtu.be/pn5myCmpV2U?t=3864) +- [01:08:41 Closure: chaining](https://youtu.be/pn5myCmpV2U?t=4121) +- [01:11:55 Closure: summator](https://youtu.be/pn5myCmpV2U?t=4315) +- [01:14:16 Closure: recursion](https://youtu.be/pn5myCmpV2U?t=4456) + +## [Partial application and currying in JavaScript](https://youtu.be/ND8KQ5xjk7o) + +- [00:00:00 Closure](https://youtu.be/ND8KQ5xjk7o?t=0) +- [00:04:54 Lambda function](https://youtu.be/ND8KQ5xjk7o?t=294) +- [00:06:06 Bind method](https://youtu.be/ND8KQ5xjk7o?t=366) +- [00:08:30 Abstracted function example](https://youtu.be/ND8KQ5xjk7o?t=510) +- [00:13:42 Abstracted function example (extension)](https://youtu.be/ND8KQ5xjk7o?t=822) +- [00:15:47 Incorrect implementation of currying](https://youtu.be/ND8KQ5xjk7o?t=947) +- [00:22:22 Correct implementation of career](https://youtu.be/ND8KQ5xjk7o?t=1342) +- [00:28:54 Correct implementation of currying (expansion)](https://youtu.be/ND8KQ5xjk7o?t=1734) +- [00:31:41 Functional abstractions (superposition)](https://youtu.be/ND8KQ5xjk7o?t=1901) +- [00:38:02 Functional abstractions, with preservation of expression (composition)](https://youtu.be/ND8KQ5xjk7o?t=2282) +- [00:45:05 Composition with 2 functions](https://youtu.be/ND8KQ5xjk7o?t=2705) +- [00:46:05 Composition with n - functions, using the reduce method](https://youtu.be/ND8KQ5xjk7o?t=2765) +- [00:51:25 Composition with n - functions, using a loop](https://youtu.be/ND8KQ5xjk7o?t=3085) +- [00:54:29 Composition with n - functions, using recursion](https://youtu.be/ND8KQ5xjk7o?t=3269) +- [00:57:40 Composition of asynchronous functions](https://youtu.be/ND8KQ5xjk7o?t=3460) +- [01:01:27 Summary](https://youtu.be/ND8KQ5xjk7o?t=3687) + +## [Higher Order Functions, callbacks, events] (https://youtu.be/1vqATwbGHnc) + +- [00:00:00 Definition](https://youtu.be/1vqATwbGHnc?t=0) +- [00:02:03 Mathematical function](https://youtu.be/1vqATwbGHnc?t=123) +- [00:05:57 Callback function](https://youtu.be/1vqATwbGHnc?t=357) +- [00:09:33 Closure](https://youtu.be/1vqATwbGHnc?t=573) +- [00:10:51 Chain of calls](https://youtu.be/1vqATwbGHnc?t=651) +- [00:12:40 Saving the cache by closure](https://youtu.be/1vqATwbGHnc?t=760) +- [00:18:29 Adding the login behavior function](https://youtu.be/1vqATwbGHnc?t=1109) +- [00:21:45 Summary](https://youtu.be/1vqATwbGHnc?t=1305) +- [00:22:45 Callback](https://youtu.be/1vqATwbGHnc?t=1365) +- [00:25:32 Callback of asynchronous file reading function](https://youtu.be/1vqATwbGHnc?t=1532) +- [00:28:36 Named Callback](https://youtu.be/1vqATwbGHnc?t=1716) +- [00:33:01 Callback-timer](https://youtu.be/1vqATwbGHnc?t=1981) +- [00:36:20 Callback-timer-curry](https://youtu.be/1vqATwbGHnc?t=2180) +- [00:38:59 Listener](https://youtu.be/1vqATwbGHnc?t=2339) +- [00:41:10 Listener-timer](https://youtu.be/1vqATwbGHnc?t=2470) +- [00:46:59 Event](https://youtu.be/1vqATwbGHnc?t=2819) +- [00:53:45 EventEmitter](https://youtu.be/1vqATwbGHnc?t=3225) +- [00:57:48 Deferred object (postponed object)](https://youtu.be/1vqATwbGHnc?t=3468) +- [01:01:31 Errors](https://youtu.be/1vqATwbGHnc?t=3691) + +## [Additions, wrappers, decorators, memoization in JavaScript (Wrappers)](https://youtu.be/oRQ0kQr1N-U) + +- [00:00:00 Synchronous function-wrapper](https://youtu.be/oRQ0kQr1N-U?t=0) +- [00:02:55 Synchronous universal wrapper function](https://youtu.be/oRQ0kQr1N-U?t=175) +- [00:08:28 Asynchronous universal wrapper function](https://youtu.be/oRQ0kQr1N-U?t=508) +- [00:15:50 Synchronous wrapper function that adds behavior (timeout)](https://youtu.be/oRQ0kQr1N-U?t=950) +- [00:22:45 Asynchronous wrapper function that adds behavior (timeout)](https://youtu.be/oRQ0kQr1N-U?t=1365) +- [00:25:38 A wrapper function that limits the function call to one call (once)](https://youtu.be/oRQ0kQr1N-U?t=1538) +- [00:27:36 A wrapper function that limits the function call to the n-th call (limit)](https://youtu.be/oRQ0kQr1N-U?t=1656) +- [00:29:50 Wrapper function that cancels the function call (cancel)](https://youtu.be/oRQ0kQr1N-U?t=1790) +- [00:32:29 Wrapper function with timeout, limit, cancel methods](https://youtu.be/oRQ0kQr1N-U?t=1949) +- [00:39:03 Wrapper function with timeout, limit, cancel methods (optimized)](https://youtu.be/oRQ0kQr1N-U?t=2343) +- [00:42:28 Wrapper function that limits one call per 200ms (throttle)](https://youtu.be/oRQ0kQr1N-U?t=2548) +- [00:45:47 Field impurity through a point](https://youtu.be/oRQ0kQr1N-U?t=2747) +- [00:51:35 Field impurity through the extend function](https://youtu.be/oRQ0kQr1N-U?t=3095) +- [00:57:35 Field impurity via object.assign( )](https://youtu.be/oRQ0kQr1N-U?t=3455) +- [00:59:18 Admixture of behavior](https://youtu.be/oRQ0kQr1N-U?t=3558) +- [01:02:23 Class change impurity](https://youtu.be/oRQ0kQr1N-U?t=3743) +- [01:06:50 Determination](https://youtu.be/oRQ0kQr1N-U?t=4010) +- [01:07:30 Implementation of simple memoization](https://youtu.be/oRQ0kQr1N-U?t=4050) +- [01:14:43 Implementation of simple memoization with speed check](https://youtu.be/oRQ0kQr1N-U?t=4483) +- [01:20:43 Deleting the accumulated cache](https://youtu.be/oRQ0kQr1N-U?t=4843) +- [01:25:35 Asynchronous memoization](https://youtu.be/oRQ0kQr1N-U?t=5135) +- [01:31:10 Transformation of arguments and keys into a hash function](https://youtu.be/oRQ0kQr1N-U?t=5470) +- [01:33:32 Implementation of complex memoization](https://youtu.be/oRQ0kQr1N-U?t=5612) + +## [Chaining of functions and objects, error handling in JavaScript](https://youtu.be/PfuEfIiLX34) + +- [00:00:00 Introduction](https://youtu.be/PfuEfIiLX34?t=0) +- [00:01:10 Chaining through function call syntax](https://youtu.be/PfuEfIiLX34?t=70) +- [00:02:12 Prototype](https://youtu.be/PfuEfIiLX34?t=132) +- [00:05:45 Class](https://youtu.be/PfuEfIiLX34?t=345) +- [00:06:11 Functor](https://youtu.be/PfuEfIiLX34?t=371) +- [00:11:54 Mutable](https://youtu.be/PfuEfIiLX34?t=714) +- [00:16:34 Iterator](https://youtu.be/PfuEfIiLX34?t=994) +- [00:26:18 Promise](https://youtu.be/PfuEfIiLX34?t=1578) +- [00:26:35 Test](https://youtu.be/PfuEfIiLX34?t=1595) +- [00:37:08 Compare](https://youtu.be/PfuEfIiLX34?t=2228) +- [00:39:45 Benchmark](https://youtu.be/PfuEfIiLX34?t=2385) +- [00:40:48 Launch and analysis of tests](https://youtu.be/PfuEfIiLX34?t=2448) +- [01:03:48 The first way to recover errors in synchronous code](https://youtu.be/PfuEfIiLX34?t=3828) +- [01:09:24 The second way of returning errors in synchronous code](https://youtu.be/PfuEfIiLX34?t=4164) +- [01:12:26 Returning errors in asynchronous code](https://youtu.be/PfuEfIiLX34?t=4346) +- [01:16:14 Correct error returning](https://youtu.be/PfuEfIiLX34?t=4574) +- [01:20:03 Error processing c promise](https://youtu.be/PfuEfIiLX34?t=4803) +- [01:23:58 Error handling c async-await](https://youtu.be/PfuEfIiLX34?t=5038) + +## [Functional JavaScript programming](https://youtu.be/0JxSs_GcvbQ) + + +## [Functional objects, functors and monads in JavaScript](https://youtu.be/3Z7f0Gi8pxw) + +- [00:00:00 Definition of functor](https://youtu.be/3Z7f0Gi8pxw?t=0) +- [00:01:40 Functor from the prototype](https://youtu.be/3Z7f0Gi8pxw?t=100) +- [00:08:17 Functor from the prototype (simplified)](https://youtu.be/3Z7f0Gi8pxw?t=497) +- [00:09:14 Functor from closure](https://youtu.be/3Z7f0Gi8pxw?t=554) +- [00:11:49 Functor from closure with ternary operator](https://youtu.be/3Z7f0Gi8pxw?t=709) +- [00:12:44 Applicative functor from the prototype](https://youtu.be/3Z7f0Gi8pxw?t=764) +- [00:18:08 Applicative functor from closure (monad)](https://youtu.be/3Z7f0Gi8pxw?t=1088) +- [00:23:11 Example of monad application](https://youtu.be/3Z7f0Gi8pxw?t=1391) +- [00:28:37 Functional object](https://youtu.be/3Z7f0Gi8pxw?t=1717) +- [00:39:44 Example of using a functional object](https://youtu.be/3Z7f0Gi8pxw?t=2384) +- [00:45:27 Summary](https://youtu.be/3Z7f0Gi8pxw?t=2727) + +## [Cancellation of asynchronous operations, cancellable callback and Promise in JavaScript](https://youtu.be/T8fXlnqI4Ws) + + +## [Future: Asynchrony on stateless futures](https://youtu.be/22ONv3AGXdk) + +## [Additions, wrappers, decorators, memoization](https://youtu.be/2h9syXN5wO0) + +- [00:00:00 Synchronous wrapper function](https://youtu.be/2h9syXN5wO0?t=0) +- [00:02:55 Synchronous universal wrapper function](https://youtu.be/2h9syXN5wO0?t=175) +- [00:08:28 Asynchronous universal wrapper function](https://youtu.be/2h9syXN5wO0?t=508) +- [00:15:50 Synchronous wrapper function that adds behavior (timeout)](https://youtu.be/2h9syXN5wO0?t=950) +- [00:22:45 Asynchronous wrapper function that adds behavior (timeout)](https://youtu.be/2h9syXN5wO0?t=1365) +- [00:25:38 A wrapper function that limits the function call to one call (once)](https://youtu.be/2h9syXN5wO0?t=1538) +- [00:27:36 A wrapper function that limits the function call to the nth call (limit)](https://youtu.be/2h9syXN5wO0?t=1656) +- [00:29:50 Wrapper function that cancels the function call (cancel)](https://youtu.be/2h9syXN5wO0?t=1790) +- [00:32:29 Wrapper function with timeout, limit, cancel methods](https://youtu.be/2h9syXN5wO0?t=1949) +- [00:39:03 Wrapper function with timeout, limit, cancel methods (optimized)](https://youtu.be/2h9syXN5wO0?t=2343) +- [00:42:28 Wrapper function that limits one call per 200ms (throttle)](https://youtu.be/2h9syXN5wO0?t=2548) +- [00:45:47 Field impurity through a point](https://youtu.be/2h9syXN5wO0?t=2747) +- [00:51:35 Field impurity through the extend function](https://youtu.be/2h9syXN5wO0?t=3095) +- [00:57:35 Add fields via object.assign( )](https://youtu.be/2h9syXN5wO0?t=3455) +- [00:59:18 Admixture of behavior](https://youtu.be/2h9syXN5wO0?t=3558) +- [01:02:23 Class change impurity](https://youtu.be/2h9syXN5wO0?t=3743) +- [01:06:50 Determination](https://youtu.be/2h9syXN5wO0?t=4010) +- [01:07:30 Implementation of simple memoization](https://youtu.be/2h9syXN5wO0?t=4050) +- [01:14:43 Implementation of simple memoization with speed check](https://youtu.be/2h9syXN5wO0?t=4483) +- [01:20:43 Deleting the accumulated cache](https://youtu.be/2h9syXN5wO0?t=4843) +- [01:25:35 Asynchronous memoization](https://youtu.be/2h9syXN5wO0?t=5135) +- [01:31:10 Transformation of arguments and keys into a hash function](https://youtu.be/2h9syXN5wO0?t=5470) +- [01:33:32 Implementation of complex memoization](https://youtu.be/2h9syXN5wO0?t=5612) + +## [Function memoization: memoize in JavaScript](https://youtu.be/H6S8QJo2Qxg) + + +## [Composition of functions (pipe, compose) in JavaScript](https://youtu.be/xS9FicVrOTI) \ No newline at end of file diff --git a/Courses/Functional.en.md b/Courses/Functional.en.md new file mode 100644 index 0000000..31211fa --- /dev/null +++ b/Courses/Functional.en.md @@ -0,0 +1,31 @@ +# Functional programming + +- [Functions, lambdas, contexts, closures in JavaScript](https://youtu.be/pn5myCmpV2U) + - Functions: https://github.com/HowProgrammingWorks/Function + - Closures: https://github.com/HowProgrammingWorks/Closure +- [Composition, currying, partial application in JavaScript](https://youtu.be/ND8KQ5xjk7o) + - Partial application: https://github.com/HowProgrammingWorks/PartialApplication + - Composition: https://github.com/HowProgrammingWorks/Composition +- [High-order functions, callbacks, JavaScript events](https://youtu.be/1vqATwbGHnc) + - Higher order functions: https://github.com/HowProgrammingWorks/HigherOrderFunction + - Callback functions: https://github.com/HowProgrammingWorks/Callbacks +- [Chaining of functions and objects, error handling in JavaScript](https://youtu.be/PfuEfIiLX34) + - Chaining: https://github.com/HowProgrammingWorks/Chaining + - Error handling: https://github.com/HowProgrammingWorks/Errors +- [Recursion: indirect and tail, stack, output](https://youtu.be/W2skCjIgVKE) + - Examples of code: https://github.com/HowProgrammingWorks/Recursion +- [Functional JavaScript programming](https://youtu.be/0JxSs_GcvbQ) + - Examples of code: https://github.com/HowProgrammingWorks/FunctionalProgramming +- [Reactive JavaScript programming](https://youtu.be/7MH8-qQc-48) + - Examples of code: https://github.com/HowProgrammingWorks/ReactiveProgramming +- [Projections and display of datasets in JavaScript](https://youtu.be/lwJCq9inky8) + - Code examples: https://github.com/HowProgrammingWorks/Projection +- [Functional objects, functors and monads in JavaScript](https://youtu.be/3Z7f0Gi8pxw) + - Examples of code: https://github.com/HowProgrammingWorks/Functor +- [Asynchronous functions and error handling](https://youtu.be/Jdf_tZuJbHI) + - Code examples: https://github.com/HowProgrammingWorks/AsyncAwait +- [Lenses in JavaScript - functional analogs of getter and setter](https://youtu.be/IBF5gFU6G-o) + - Examples of code: https://github.com/HowProgrammingWorks/Lenses +- [Asynchronous function composition](https://youtu.be/3ZCrMlMpOrM) + - Code examples: https://github.com/HowProgrammingWorks/AsyncCompose +- [The Barbara Lyskov substitution principle](https://youtu.be/RbhYxygxroc) \ No newline at end of file diff --git a/Links.en.md b/Links.en.md new file mode 100644 index 0000000..b48a32c --- /dev/null +++ b/Links.en.md @@ -0,0 +1,30 @@ +# Index of Metarhia community channels and groups + +Subscribe to what interests you and unsubscribe from the rest. Please, +stick to the topic in groups, choose the closest suitable group if +there is no complete match or group with the most common themes. Advertising and announcements are prohibited in all groups, including job offers or participation in projects, except for Metarhia community projects. + +## General topics + +Any programming issues, technologies and languages, engineering, architecture, training, news, both for beginners and professionals. + +- Telegram channels [HowProgrammingWorks](https://t.me/HowProgrammingWorks) +announcements about lectures, meetups and seminars, all new videos and other materials are published here +- Telegram group [MetarhiaHPW](https://t.me/MetarhiaHPW) +- Telegram channel [Metaeducation](https://t.me/metaedu) +- Subscription to meetups [HowProgrammingWorks](https://www.meetup.com/HowProgrammingWorks/) +general programming topics, JavaScript and for beginners, there is a calendar of events, you can register and leave reviews +- YouTube channel: https://www.youtube.com/TimurShemsedinov + +## For beginners + +- Telegram group for beginners [IP9X](https://t.me/Programming_IP9X) +- Subscription to meetups [HowProgrammingWorks](https://www.meetup.com/HowProgrammingWorks/) +there is a calendar of events, you can register and leave reviews + +## Node.js + +- Telegram channel [Metarhia](https://t.me/metarhia) +- Telegram group [NodeUA](https://t.me/nodeua) +- Subscription to meetups [NodeUA](https://www.meetup.com/NodeUA/) +- Old meetups group [KievNodeJS](https://www.meetup.com/KievNodeJS/) diff --git a/Practice/Index.en.md b/Practice/Index.en.md new file mode 100644 index 0000000..e32f9c1 --- /dev/null +++ b/Practice/Index.en.md @@ -0,0 +1,6 @@ +# Practice and projects + +- Module [SEF1](SEF1.ru.md) (1 year, 1 semester) +- Module [SEF2](SEF2.ru.md) (1 year, 2 semester) +- Modules [SEF3 ΠΈ SEF4](SEF3-4.ru.md) (2 year) +- Modules [SEF5 ΠΈ SEF6](SEF5-6.ru.md) (3 year) diff --git a/Practice/Projects.en.md b/Practice/Projects.en.md new file mode 100644 index 0000000..7f471eb --- /dev/null +++ b/Practice/Projects.en.md @@ -0,0 +1,25 @@ +# Practical projects + +- Abstractions (class, prototype, function, functor, module, pattern, on other complex abstraction) for: + - Data structures: specific lists, trees, or graphs with methods for traversal and iteration + - Algorithms: implementation of known math or physics calculations, data manipulations, etc. + - Access to I/O devices, operation system, other applications, timers and different sensors +- Syntax sugar for any programming language to express domain processes in expressive and simple way +- DSL (Domain specific language) runtime, interpreter, compiler, linter, style fixers and tools +- Games: web, console, mobile of any kind but with good patterns, project structure and code style +- Parsing tools for any formal or informal language +- Crawler and search engines +- Examples, tests and documentation for lectures, frameworks, and libraries +- Fixes, contribution, features, and bug-reproduction reports for open-source projects +- System programming + - Data access abstractions, repository implementation, query builder for persistent queue, column or relational db + - Network protocols for message passing, rpc, api, rest or stateful, + - Reactive abstractions + - Asynchronous programming abstractions + - Parallel programming abstractions +- Applied applications, their subsystems, or separate modules + - CRM, ERP, SCM, Warehouse systems, + - Medical information systems + - Production automation and management information systems + - Any other custom-made information systems +- Your own project diff --git a/Practice/SEF1.en.md b/Practice/SEF1.en.md new file mode 100644 index 0000000..9d93958 --- /dev/null +++ b/Practice/SEF1.en.md @@ -0,0 +1,17 @@ +# Practical tasks + +Recording of seminars on doing and checking laboratory work: +- [Seminar: automatic laboratory work checking](https://youtu.be/M4KpG0LEAyA) +- [Seminar: doing laboratory works for the course "Programming Fundamentals"](https://youtu.be/ikUOyFPzdJw) + +Repositories with tasks: + +0. [Environment setup](https://github.com/HowProgrammingWorks/Introduction/blob/master/Exercises.ru.md) +1. [Variables and data types](https://github.com/HowProgrammingWorks/DataTypes/blob/master/Exercises.ru.md) +2. [Basic JavaScript Syntax](https://github.com/HowProgrammingWorks/Reusable/blob/master/Exercises.ru.md) +3. [Functions and methods](https://github.com/HowProgrammingWorks/Function/blob/master/Exercises.ru.md) +4. [Cycles, iteration](https://github.com/HowProgrammingWorks/Iteration/blob/master/Exercises.ru.md) +5. [Closures and chaining](https://github.com/HowProgrammingWorks/Closure/blob/master/Exercises.ru.md) +6. [Function composition](https://github.com/HowProgrammingWorks/Composition/blob/master/Exercises.ru.md) +7. [Working with arrays](https://github.com/HowProgrammingWorks/Arrays/blob/master/Exercises.ru.md) +8. [Higher order functions](https://github.com/HowProgrammingWorks/HigherOrderFunction/blob/master/Exercises.ru.md) diff --git a/Practice/SEF2.en.md b/Practice/SEF2.en.md new file mode 100644 index 0000000..21db09b --- /dev/null +++ b/Practice/SEF2.en.md @@ -0,0 +1,56 @@ +# Practice and projects + +## Possible options of work organization: + +- Contribution to any open-source project or library. +- Contribution to [Metarhia](https://github.com/metarhia). +- A student group project or an open source community project. +- Personal open-source project. + +## What is allowed and what is prohibited: + +- You can use any language and all the libraries built into it. +- You cannot use third-party libraries installed from npm, GitHub, etc. +- The repository must be posted on https://github.com in the public domain. +- It is necessary to develop group work skills, for this students form groups +2-5 people each; the group can write one common project or make a cross-review of code of individual projects of each group member. Rewatch: + - [What is a code review](https://youtu.be/EKL6NiIQ6ZU) + - [Seminar on code review](https://youtu.be/AgH4OAKbmkM) +- A project cannot be immediately uploaded to Github the day before delivery; it needs to be maintained on Github for several months so that the work, commit history and PR (pull request) are visible. It will be good if it is possible to track the improvement of the code base, refactoring and optimization. Rewatch: + - Ganeral [antipatterns for all paradigms](https://youtu.be/NMUsUiFokr4), ΠΈ + - Antipatterns of [procedural programming](https://youtu.be/cTv7V22mkwE); + - Lecture on [refactoring](https://youtu.be/z73wmpdweQ4). +- Good repository management: issues, pull requests, milestones (see the buttons on the issues and pr tabs in github), discussions (optional), kanban (a project planning tool, look for the project tab in github), wiki (optional). +- Every project should have unit tests to check functionality. +- The repository should include: + - License and list of contributors + - File `README.md` with a brief (1-2 pages) description of the project. No folders, no paperwork needed, everything is done electronically, without bureaucracy. + - Customized linter (and if the code is in JavaScript, also prettier). Project example + with configuration here: https://github.com/HowProgrammingWorks/NodejsStarterKit + - The `package.json` file in which in the `scripts` section there is a `lint` command + - `.eslintrc.json`, `.eslintignore` and `.prettierrc` files + - Before each commit, run from the command line: `npm run lint` + (some problems are automatically corrected, the rest are corrected manually). + - Dotfiles for version control system and package manager. + +## Topic examples: + +- Library for working with IPv4 and IPv6 addresses: parser, comparison, manipulation, working with masks and ranges, serialization as strings and numbers, any other operations that you come up with. +- Parser for HTML, CSS, JSON, YAML or any other file format. +- Develop a universal class for caching: calculations, operations +I/O, database queries, or other operations that need to be accelerated +with caching (optional). Containing a configurable cache with the following +characteristics: a certain size of the number of records or memory capacity, +cache eviction time, eviction priorities. +- Implement machine checking for correct syntax and code style. There could be a separate topic on correcting simple syntax errors. And one more topic on auto-formatting code and bringing it to style conventions. +- An improved EventEmitter, for example, with the following features: one-time and N-time subscription, automatic unsubscription after a timeout or sending a special event, waiting for events using async/await syntax, etc. +- Projection of data structures in memory. You can create a special syntax (projection language), which has already been done in JavaScript in the repository +https://github.com/HowProgrammingWorks/Projection +- Develop a simple key-value in-memory DBMS (database management system that stores everything in RAM). In the simplest case, it is a hash table. Example implementations are Redis, Memcached or MongoDB, you can take their interfaces as a basis and modify them. +- Develop a task scheduler in the form of a class or prototype that can repeat the execution of a method according to a schedule, for example: on Fridays at 2 am or every second Monday of the month at 12:30 UTC. It creates the necessary timers for this and executes the tasks. +- Command line interface utilities. + +## Register topics + +- Fill in the form: https://forms.gle/u7v7nUFxamcgJ2aQ6 +- And give me rights to the repository, my account: https://github.com/tshemsedinov diff --git a/Practice/SEF3-4.en.md b/Practice/SEF3-4.en.md new file mode 100644 index 0000000..b39c652 --- /dev/null +++ b/Practice/SEF3-4.en.md @@ -0,0 +1,60 @@ +# Practice and projects + +## Possible options of work organization: + +- Contribution to any open-source project or library. +- Contribution to [Metarhia](https://github.com/metarhia). +- A student group project or an open source community project. +- Personal open-source project. + +## What is allowed and what is prohibited: + +- Any language. +- Any technology stack. +- Any dependencies allowed. +- The repository must be posted on https://github.com in the public domain. +- It is necessary to develop group work skills, for this students form groups +2-5 people each (there may be external participants from other courses, faculties and not from KPI at all); the group can write one common project or make a cross-review of code of individual projects of each group member. Rewatch: + - [What is a code review](https://youtu.be/EKL6NiIQ6ZU) + - [Seminar on code review](https://youtu.be/AgH4OAKbmkM) +- A project cannot be immediately uploaded to Github the day before delivery; it needs to be maintained on Github for several months so that the work, commit history and PR (pull request) are visible. It will be good if it is possible to track the improvement of the code base, refactoring and optimization. Rewatch: + - Ganeral [antipatterns for all paradigms](https://youtu.be/NMUsUiFokr4), ΠΈ + - Antipatterns of [procedural programming](https://youtu.be/cTv7V22mkwE); + - Lecture on [refactoring](https://youtu.be/z73wmpdweQ4). +- Good repository management: issues, pull requests, milestones (see the buttons on the issues and pr tabs in github), discussions (optional), kanban (a project planning tool, look for the project tab in github), wiki (optional). + +## If you make your own repository, it must include: + +- Unit tests (optionally system, integration and load tests) +- CI (for example: TravisCI, Github Actions) +- License and list of contributors +- Good repository management: issues, pull requests, (preferably milestones) +- Semantic versioning: https://semver.org/ + - Keep up CHANGELOG.md + - And release versions in the form of tags +- Customized linter (for js also prettier) +- Dotfiles for version control system and package manager + +## Projects you can contribute to: + +- Recursive observation of the file system: https://github.com/metarhia/metawatch +- Utilities for the command line interface: https://github.com/metarhia/metacommand +- Helper (wrapper) for node.js vm module: https://github.com/metarhia/metavm +- Query builder and migrations for Postgres: https://github.com/metarhia/metasql +- Network protocol: https://github.com/metarhia/metacom +- Logging library: https://github.com/metarhia/metalog +- Template engine: https://github.com/metarhia/tickplate +- Web-locks API: https://github.com/metarhia/web-locks +- Library for asynchronous programming: https://github.com/metarhia/metasync +- Simple asynchronous abstractions: https://github.com/metarhia/do +- Buffering for Writable Stream: https://github.com/metarhia/metastreams +- Library for colors in the console: https://github.com/metarhia/concolor +- Configuration loader: https://github.com/metarhia/config +- Testing framework: https://github.com/metarhia/metatests +- Common utilities: https://github.com/metarhia/common +- Common utilities (lite): https://github.com/metarhia/metautil + +## Register topics + +- Fill in the form: https://forms.gle/u7v7nUFxamcgJ2aQ6 +- And give me rights to the repository, my account: https://github.com/tshemsedinov \ No newline at end of file diff --git a/Practice/SEF5-6.en.md b/Practice/SEF5-6.en.md new file mode 100644 index 0000000..2dc33a3 --- /dev/null +++ b/Practice/SEF5-6.en.md @@ -0,0 +1,52 @@ +# Practice and projects + +## Possible options of work organization: + +- Contribution to any open-source project or library. +- Contribution to [Metarhia](https://github.com/metarhia). +- A student group project or an open source community project. +- Personal open-source project. + +## What is allowed and what is prohibited: + +- Any language. +- Any technology stack. +- Any dependencies allowed. +- The repository must be posted on https://github.com in the public domain. +- A project cannot be immediately uploaded to Github the day before delivery; it needs to be maintained on Github for several months so that the work, commit history and PR (pull request) are visible. It will be good if it is possible to track the improvement of the code base, refactoring and optimization. + +## If you make your own repository, it must include: + +- Unit tests (optionally system, integration and load tests) +- CI (for example: TravisCI, Github Actions) +- License and list of contributors +- Good repository management: issues, pull requests, (preferably milestones) +- Semantic versioning: https://semver.org/ + - Keep up CHANGELOG.md + - And release versions in the form of tags +- Customized linter (for js also prettier) +- Dotfiles for version control system and package manager + +## Projects you can contribute to: + +- Recursive observation of the file system: https://github.com/metarhia/metawatch +- Utilities for the command line interface: https://github.com/metarhia/metacommand +- Helper (wrapper) for node.js vm module: https://github.com/metarhia/metavm +- Query builder and migrations for Postgres: https://github.com/metarhia/metasql +- Network protocol: https://github.com/metarhia/metacom +- Logging library: https://github.com/metarhia/metalog +- Template engine: https://github.com/metarhia/tickplate +- Web-locks API: https://github.com/metarhia/web-locks +- Library for asynchronous programming: https://github.com/metarhia/metasync +- Simple asynchronous abstractions: https://github.com/metarhia/do +- Buffering for Writable Stream: https://github.com/metarhia/metastreams +- Library for colors in the console: https://github.com/metarhia/concolor +- Configuration loader: https://github.com/metarhia/config +- Testing framework: https://github.com/metarhia/metatests +- Common utilities: https://github.com/metarhia/common +- Common utilities (lite): https://github.com/metarhia/metautil + +## Register topics + +- Fill in the form: https://forms.gle/u7v7nUFxamcgJ2aQ6 +- And give me rights to the repository, my account: https://github.com/tshemsedinov \ No newline at end of file diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..b5747e4 --- /dev/null +++ b/README.en.md @@ -0,0 +1,64 @@ +# Index and current state of courses + +Book containing most of the material (in development): https://github.com/HowProgrammingWorks/Book + +- [Index of channels and groups of Metarhia community](Links.md) +- [Index of reports, interviews and other speeches](Courses/Talks.md) +- [Index of practical tasks](Practice/Index.md) +- [Index of community calls](Archive/WeeklyCall.md) + +## Basic software engineering course + +- [Introduction and knowledge overview](Courses/Introduction.md) and [seminars](Courses/Seminars.md) +- [Programming basics for beginners](https://www.youtube.com/watch?v=2DM5I2CI4gY&list=PLpmhTzMVLuROAIey9vW3pyRSpHfknLssu) +- [Programming fundamentals, modules (1 year of study)](Courses/Fundamentals.md) [(with timecodes)](Courses/Fundamentals-timecodes.md) +- [Programming (2nd year of study)](Courses/Advanced.md) + +## Selected specialized courses + +- [Asynchronous programming](Courses/Asynchronous.md) + (course is ready, regularly updated) + [(with timecodes)](Courses/Asynchronous-timecodes.md) +- [Node.js technology stack](Courses/NodeJS.md) + (course is ready, regularly updated) + [(with timecodes)](Courses/NodeJS-timecodes.md) +- [Metarhia technology stack](Courses/Metarhia.md) + (5% ready) +- [Design patterns](Courses/Patterns.md) + (50% ready) +- [Programming paradigms](Courses/Paradigms.md) + (70% ready) +- [Metaprogramming and multi-paradigm programming](Courses/Metaprogramming.md) + (50% ready) +- [Algorithms and data structures](Courses/AlgAndData.md) + (20% ready) +- [Designing network protocols and services](Courses/Network.md) + (50% ready) +- [Software development and lifecycle tools](Courses/Tools.md) + (there are several video lectures, needs to be expanded) +- [Functional programming](Courses/Functional.md) + (20% ready) +- [Object-oriented programming](Courses/OOP.md) + (20% ready) +- [GRASP principles with adaptation for JavaScript and Node.js](Courses/GRASP.md) + (40% ready) +- [Operational systems](Courses/OS.md) + (need to form a program) +- [System programming](Courses/System.md) + (need to form a program) +- [Information systems architecture](Courses/Architecture.md) + (40% ready) +- [WEB technologies](Courses/Web.md) + (25% ready) +- [Parallel programming](Courses/Parallel.md) + (10% ready) +- [Database design](Courses/Databases.md) + (25% ready) +- [High-load and scalable systems](Courses/Highload.md) + (20% ready) +- [User interface design](Courses/UI-UX.md) + (need to form a program) +- [Information systems security](Courses/Security.md) + (need to form a program) +- [Software quality, testing and reliability](Courses/Quality.md) + (5% ready)