diff --git a/Profile/REPORT.md b/Profile/REPORT.md index e84bed6f..d6f035df 100644 --- a/Profile/REPORT.md +++ b/Profile/REPORT.md @@ -1 +1,227 @@ ## Software engineering self assessment + +[![Skills](https://img.shields.io/badge/Self_Assessment-254 / 310 / 735-009933?style=flat-square)](https://github.com/DmitriyBad/SelfAssessment/blob/main/Profile/REPORT.md) + +``` +[![Skills](https://img.shields.io/badge/Self_Assessment-254 / 310 / 735-009933?style=flat-square)](https://github.com/DmitriyBad/SelfAssessment/blob/main/Profile/REPORT.md) +``` + +``` +Skills +``` + +## Assessment totals + +| Unit | Marked | Of | +| ---- | ------ | -- | +| [Programming](/Skills/Programming.md) | | | +|      Concepts | `30` | `30` | +|      Syntax and concepts * | `0` | `33` | +|      Types * | `0` | `14` | +|      Functions * | `0` | `23` | +|      Data structures * | `0` | `26` | +|      Networking + | `0` | `9` | +|      Process and tools + | `0` | `28` | +|      Antipatterns ~ | `0` | `30` | +|      Runtimes and virtual machines + | `0` | `5` | +|      Operating systems + | `0` | `13` | +|      Standards ~ | `0` | `15` | +| [JavaScript](/Skills/JavaScript.md) | | | +|      Language | `0` | `57` | +|      Statements | `0` | `19` | +|      Functions | `0` | `10` | +|      Data structures | `0` | `8` | +|      Standard classes and namespaces | `0` | `14` | +|      Infrastructure | `0` | `6` | +| [Async](/Skills/Async.md) | | | +|      Theory | `15` | `20` | +|      Async contracts | `13` | `18` | +|      Async adapters and utils | `5` | `5` | +|      Async abstractions interfaces | `8` | `11` | +|      JavaScript & Node.js specific | `13` | `17` | +|      Techniques | `6` | `10` | +| [NodeJS](/Skills/NodeJS.md) | | | +|      Internals and concepts | `7` | `9` | +|      Modularity, layers and dependencies | `11` | `14` | +|      Environment | `4` | `6` | +|      Internal API | `12` | `25` | +|      Network | `16` | `28` | +|      Technique and tools | `12` | `12` | +|      Data access | `6` | `7` | +|      Error handling and debugging | `12` | `14` | +|      Integrations and bindings | `0` | `16` | +| [Paradigms](/Skills/Paradigms.md) | | | +|      Theory | `25` | `25` | +|      OOP basics | `21` | `21` | +|      GRASP | `8` | `8` | +|      SOLID | `5` | `5` | +|      Patterns | `25` | `25` | +| [Architecture](/Skills/Architecture.md) | | | +|      Application structure | `0` | `27` | +|      Application architecture | `0` | `36` | +|      Solution architecture | `0` | `18` | +|      Enterprise architecture | `0` | `18` | + +## [JavaScript](/Skills/JavaScript.md) + + +| To start asynchronous programming | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `72` skills, `72` to be upgraded, and `0` above needed + +| To start Node.js | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `98` skills, `98` to be upgraded, and `0` above needed + +## [Async](/Skills/Async.md) + + +| For Node.js applied programming | actual | ⟢ | required | +| --- | --- | --- | --- | +| Race conditions | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| Callback-last-error-first | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Sync generator | 🀷 unknown | ⟢ | πŸŽ“ known | +| Async Generator | 🀷 unknown | ⟢ | πŸŽ“ known | +| Async Iterator | 🀷 unknown | ⟢ | πŸŽ“ known | +| Event | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Signal | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| callbackify | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| promisify | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| asyncify | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| EventEmitter | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Readable | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Writable | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Transform | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Semaphore | 🀷 unknown | ⟢ | πŸ‘‚ heard | +| Timers | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| `setImmediate` | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| `nextTick` | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| AbortController | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| AbortSignal | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| Promise hell | 🀷 unknown | ⟢ | πŸŽ“ known | +| AsyncLocalStorage | 🀷 unknown | ⟢ | πŸ‘‚ heard | +| AsyncResource | 🀷 unknown | ⟢ | πŸ‘‚ heard | +| Promise.allSettled | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Promise.race | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Promise.any | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Web Locks API | 🀷 unknown | ⟢ | πŸ‘‚ heard | +| Revealing constructor | 🀷 unknown | ⟢ | πŸŽ“ known | + +Total: you have `22` of `50` skills, `28` to be upgraded, and `6` above needed + +| To start Node.js | actual | ⟢ | required | +| --- | --- | --- | --- | +| Async Iterator | 🀷 unknown | ⟢ | πŸŽ“ known | +| Event | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Signal | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| callbackify | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| promisify | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| asyncify | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| EventEmitter | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Transform | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| Timers | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| `setImmediate` | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| AbortController | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| AbortSignal | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| Promise hell | 🀷 unknown | ⟢ | πŸŽ“ known | +| Promise.allSettled | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Promise.race | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Promise.any | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Revealing constructor | 🀷 unknown | ⟢ | πŸ‘‚ heard | + +Total: you have `20` of `37` skills, `17` to be upgraded, and `5` above needed + +| For Node.js platform/system programming | actual | ⟢ | required | +| --- | --- | --- | --- | +| Pattern Reactor | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| CAS operations | 🀷 unknown | ⟢ | πŸ‘‚ heard | +| Race conditions | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Dead locks | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Live locks | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Concurrent programming | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| Parallel programming | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| Actor Model | πŸ‘‚ heard | ⟢ | πŸŽ“ known | +| Thread | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Callback-last-error-first | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Thenable | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Sync generator | 🀷 unknown | ⟢ | πŸ–οΈ used | +| Async Generator | 🀷 unknown | ⟢ | πŸ–οΈ used | +| Async Iterator | 🀷 unknown | ⟢ | πŸ–οΈ used | +| Event | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Coroutine | 🀷 unknown | ⟢ | πŸ‘‚ heard | +| Goroutine | 🀷 unknown | ⟢ | πŸ‘‚ heard | +| Signal | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Chain of responsibility | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Locks | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| callbackify | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| promisify | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| asyncify | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| EventEmitter | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Observable/Observer | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Readable | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Writable | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Transform | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Async Pool | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Async Queue | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Async Collector | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Semaphore | 🀷 unknown | ⟢ | πŸ–οΈ used | +| Mutex | 🀷 unknown | ⟢ | πŸŽ“ known | +| Spin Lock | 🀷 unknown | ⟢ | πŸŽ“ known | +| Timers | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| `setImmediate` | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| `nextTick` | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| AbortController | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| AbortSignal | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| Promise double resolve | 🀷 unknown | ⟢ | πŸ–οΈ used | +| Atomics | 🀷 unknown | ⟢ | πŸŽ“ known | +| High resolution clock | 🀷 unknown | ⟢ | πŸŽ“ known | +| Callback hell | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Promise hell | 🀷 unknown | ⟢ | πŸ–οΈ used | +| ref() and unref() | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| JSON streaming serialization | πŸ‘‚ heard | ⟢ | πŸ–οΈ used | +| AsyncLocalStorage | 🀷 unknown | ⟢ | πŸ–οΈ used | +| AsyncResource | 🀷 unknown | ⟢ | πŸ–οΈ used | +| Promise.allSettled | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Promise.race | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Promise.any | πŸŽ“ known | ⟢ | πŸ–οΈ used | +| Web Locks API | 🀷 unknown | ⟢ | πŸŽ“ known | +| IPC | 🀷 unknown | ⟢ | πŸŽ“ known | +| Channel API | 🀷 unknown | ⟢ | πŸŽ“ known | +| Revealing constructor | 🀷 unknown | ⟢ | πŸ–οΈ used | + +Total: you have `20` of `75` skills, `55` to be upgraded, and `5` above needed + +## [NodeJS](/Skills/NodeJS.md) + + +| API and domain logic developer | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `0` skills, `0` to be upgraded, and `47` above needed + +| Enterprise applications | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `0` skills, `0` to be upgraded, and `61` above needed + +| Real-Time, gamedev, messaging | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `0` skills, `0` to be upgraded, and `45` above needed + +| Web and Frontend | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `0` skills, `0` to be upgraded, and `29` above needed + +| Fullstack development | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `0` skills, `0` to be upgraded, and `53` above needed + +| Platform/system development | actual | ⟢ | required | +| --- | --- | --- | --- | + +Total: you have `0` of `0` skills, `0` to be upgraded, and `71` above needed diff --git a/README.md b/README.md index 239e6cd5..add0ee2e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## Software engineering self assessment - +[![Skills](https://img.shields.io/badge/Self_Assessment-254 / 310 / 735-009933?style=flat-square)](https://github.com/DmitriyBad/SelfAssessment/blob/main/Profile/REPORT.md) This _knowledge assessment_ can be used as an automated tool for **tracking** and **analyzing** an engineer’s **microskills**, for personal use, for reference in your **CV** or profile (github, linkedin, etc.). After filling skills, the system generates a button in `html` and `md` with a link to your fork of the repo. The tool speeds up **interviews** and **certification** for both the applicant and the interviewer: you can check only part of the key knowledge and then sign a commit with a personal GPG key. If you periodically take an assessment, or do it before and after the start of _training_, and store branches or tags with the results of an inventory of microskills at a certain point in time, then it is very convenient to compare the _progress_ you have made during the period of _training_, reading a book, working on a project etc. Currently, assessment has more than **700 microskills** and will be constantly expanded in all areas, languages and technologies (for example `Proxy`, `Promise`, `Future`, `SRP`, `DI`, `Boxing`, `Cohesion`, `Tail call recursion`...) with automatic comparison of them with _roles_ (for example `Node.js API developer`, `Node.js gamedev`, `Frontend`...) the robot generates a report via `Github Actions CI` with recommendations on what needs to be improved. New roles and knowledge areas will be available soon, after which you can rebase your repo on the original one to receive the new report. diff --git a/Skills/Async.md b/Skills/Async.md index 63e26c83..19e873e9 100644 --- a/Skills/Async.md +++ b/Skills/Async.md @@ -1,88 +1,88 @@ ## Asynchronous programming - Theory - - Event loop - - `try..catch` - - Non-blocking - - Async I/O - - Thread pool - - Pattern Reactor + - Event loop: πŸŽ“ known + - `try..catch`: πŸ–οΈ used + - Non-blocking: πŸ–οΈ used + - Async I/O: πŸ–οΈ used + - Thread pool: πŸŽ“ known + - Pattern Reactor: πŸ‘‚ heard - CAS operations - epoll - kqueue - Completion ports - Event ports - - libuv - - Race conditions - - Dead locks - - Live locks - - Concurrent programming - - Parallel programming - - Actor Model - - Thread - - Process + - libuv: πŸŽ“ known + - Race conditions: πŸ‘‚ heard + - Dead locks: πŸŽ“ known + - Live locks: πŸŽ“ known + - Concurrent programming: πŸ‘‚ heard + - Parallel programming: πŸ‘‚ heard + - Actor Model: πŸ‘‚ heard + - Thread: πŸŽ“ known + - Process: πŸ–οΈ used - Async contracts - - Callbacks - - Callback-last-error-first - - Thenable - - Promise - - Async/await - - Future - - Deferred + - Callbacks: πŸ–οΈ used + - Callback-last-error-first: πŸŽ“ known + - Thenable: πŸŽ“ known + - Promise: πŸ–οΈ used + - Async/await: πŸ–οΈ used + - Future: πŸŽ“ known + - Deferred: πŸŽ“ known - Sync generator - Async Generator - Async Iterator - - Event + - Event: πŸŽ“ known - Coroutine - Goroutine - - Signal - - Stream - - Chain of responsibility - - Middleware - - Locks + - Signal: πŸ‘‚ heard + - Stream: πŸ–οΈ used + - Chain of responsibility: πŸ‘‚ heard + - Middleware: πŸ–οΈ used + - Locks: πŸŽ“ known - Async adapters and utils - - callbackify - - promisify - - asyncify - - Callbacks compose - - Async compose + - callbackify: πŸ‘‚ heard + - promisify: πŸ‘‚ heard + - asyncify: πŸ‘‚ heard + - Callbacks compose: πŸŽ“ known + - Async compose: πŸŽ“ known - Async abstractions interfaces - - EventEmitter - - Observable/Observer - - Readable - - Writable - - Transform - - Async Pool - - Async Queue - - Async Collector + - EventEmitter: πŸ‘‚ heard + - Observable/Observer: πŸŽ“ known + - Readable: πŸŽ“ known + - Writable: πŸŽ“ known + - Transform: πŸ‘‚ heard + - Async Pool: πŸŽ“ known + - Async Queue: πŸŽ“ known + - Async Collector: πŸŽ“ known - Semaphore - Mutex - Spin Lock - JavaScript & Node.js specific - - Timers - - `setImmediate` - - `nextTick` - - AbortController - - AbortSignal - - Promise unhandled rejection - - Promise double resolve + - Timers: πŸŽ“ known + - `setImmediate`: πŸŽ“ known + - `nextTick`: πŸŽ“ known + - AbortController: πŸ‘‚ heard + - AbortSignal: πŸ‘‚ heard + - Promise unhandled rejection: πŸ–οΈ used + - Promise double resolve Promise double resolve: πŸ–οΈ used - Atomics - High resolution clock - - Callback hell - - Promise hell - - ref() and unref() - - Error handling in async code - - Better stack traces with return await - - JSON streaming serialization + - Callback hell: πŸŽ“ known + - Promise hell Promise hell: πŸŽ“ known + - ref() and unref(): πŸ‘‚ heard + - Error handling in async code: πŸ–οΈ used + - Better stack traces with return await: πŸ–οΈ used + - JSON streaming serialization: πŸ‘‚ heard - AsyncLocalStorage - AsyncResource - Techniques - - Async.js library - - RxJS library - - Promise.all - - Promise.allSettled - - Promise.race - - Promise.any + - Async.js library: πŸ–οΈ used + - RxJS library: πŸ‘‚ heard + - Promise.all: πŸ–οΈ used + - Promise.allSettled: πŸŽ“ known + - Promise.race: πŸŽ“ known + - Promise.any: πŸŽ“ known - Web Locks API - IPC - Channel API diff --git a/Skills/Databases.md b/Skills/Databases.md index c499feb1..170604bf 100644 --- a/Skills/Databases.md +++ b/Skills/Databases.md @@ -1,94 +1,94 @@ ## Databases - Theory and concepts - - Data types - - Performance tuning - - Migrations - - Schema versioning - - Backup and recovery - - Database scalability - - Relational databases - - Key-value store - - Tuple store - - Graph databases - - Object databases + - Data types: πŸ–οΈ used + - Performance tuning: πŸ‘‚ heard + - Migrations: πŸ–οΈ used + - Schema versioning: πŸ–οΈ used + - Backup and recovery: πŸ–οΈ used + - Database scalability: πŸ–οΈ used + - Relational databases: πŸ–οΈ used + - Key-value store: πŸ–οΈ used + - Tuple store: πŸŽ“ known + - Graph databases: πŸŽ“ known + - Object databases: πŸ‘‚ heard - Column databases - - Navigational databases - - Hierarchical databases - - In-memory databases - - Inverted index - - Data control language (DCL) - - Data definition language (DDL) - - Data manipulation language (DML) - - Data query language (DQL) + - Navigational databases: πŸ‘‚ heard + - Hierarchical databases: πŸ‘‚ heard + - In-memory databases: πŸŽ“ known + - Inverted index: πŸ‘‚ heard + - Data control language (DCL): πŸ‘‚ heard + - Data definition language (DDL): πŸ‘‚ heard + - Data manipulation language (DML): πŸ–οΈ used + - Data query language (DQL): πŸ–οΈ used - Relational - - Entity-Relationship Diagram - - Normal forms - - Indexing - - Primary keys - - Foreign keys - - Transactions - - Views - - Subqueries - - Stored procedures - - SQL functions - - Materialized views + - Entity-Relationship Diagram: πŸ–οΈ used + - Normal forms: πŸ–οΈ used + - Indexing: πŸ–οΈ used + - Primary keys: πŸ–οΈ used + - Foreign keys: πŸ–οΈ used + - Transactions: πŸ–οΈ used + - Views: πŸ‘‚ heard + - Subqueries: πŸ–οΈ used + - Stored procedures: πŸ‘‚ heard + - SQL functions: πŸŽ“ known + - Materialized views: πŸ‘‚ heard - Replications - - Virtualization + - Virtualization: πŸ–οΈ used - SQL - - `SELECT` - - `INSERT` - - `UPDATE` - - `DELETE` - - `LIMIT` - - `OFFSET` - - `ORDER BY` - - `GROUP BY` - - `HAVING` - - `EXISTS` - - `JOIN` - - `INNER JOIN` - - `LEFT JOIN` - - `RIGHT JOIN` - - `UNION` - - `DISTINCT` - - `WHERE` - - `LIKE` - - `IN` - - `BETWEEN` - - `CREATE TABLE` - - `ALTER TABLE` - - `DROP TABLE` - - `PRIMARY KEY` - - `FOREIGN KEY` - - `CHECK` - - `DEFAULT` - - `INDEX` - - `UNIQUE` - - `GRANT` - - `REVOKE` - - `DENY` - - `EXPLAIN` + - `SELECT`: πŸ–οΈ used + - `INSERT`: πŸ–οΈ used + - `UPDATE`: πŸ–οΈ used + - `DELETE`: πŸ–οΈ used + - `LIMIT`: πŸ–οΈ used + - `OFFSET`: πŸ–οΈ used + - `ORDER BY`: πŸ–οΈ used + - `GROUP BY`: πŸ–οΈ used + - `HAVING`: πŸ–οΈ used + - `EXISTS`: πŸ–οΈ used + - `JOIN`: πŸ–οΈ used + - `INNER JOIN`: πŸ–οΈ used + - `LEFT JOIN`: πŸ–οΈ used + - `RIGHT JOIN`: πŸ–οΈ used + - `UNION`: πŸŽ“ known + - `DISTINCT`: πŸŽ“ known + - `WHERE`: πŸ–οΈ used + - `LIKE`: πŸ–οΈ used + - `IN`: πŸ–οΈ used + - `BETWEEN`: πŸ–οΈ used + - `CREATE TABLE`: πŸ–οΈ used + - `ALTER TABLE`: πŸ–οΈ used + - `DROP TABLE`: πŸ–οΈ used + - `PRIMARY KEY`: πŸ–οΈ used + - `FOREIGN KEY`: πŸ–οΈ used + - `CHECK`: πŸ‘‚ heard + - `DEFAULT`: πŸ–οΈ used + - `INDEX`: πŸ–οΈ used + - `UNIQUE`: πŸ–οΈ used + - `GRANT`: πŸ‘‚ heard + - `REVOKE`: πŸ‘‚ heard + - `DENY`: πŸ‘‚ heard + - `EXPLAIN`: πŸ‘‚ heard - Engines - - PostgreSQL - - Oracle - - MySQL - - MariaDB + - PostgreSQL: πŸ–οΈ used + - Oracle: πŸ‘‚ heard + - MySQL: πŸ–οΈ used + - MariaDB: πŸ‘‚ heard - MS SQL Server - - Redis - - Rabbit - - MongoDB + - Redis: πŸŽ“ known + - Rabbit: πŸŽ“ known + - MongoDB: πŸ–οΈ used - Memcached - Riak - - DB2 - - SQLite - - DynamoDB - - Firebase + - DB2: πŸ‘‚ heard + - SQLite: πŸŽ“ known + - DynamoDB: πŸŽ“ known + - Firebase: πŸŽ“ known - Data engineering - Data warehousing - - Business intelligence + - Business intelligence: πŸ–οΈ used - Big data - Data analysis - AI tools - - Cloud databases + - Cloud databases: πŸ–οΈ used - Data Visualization diff --git a/Skills/NodeJS.md b/Skills/NodeJS.md index bd891457..a30f3d40 100644 --- a/Skills/NodeJS.md +++ b/Skills/NodeJS.md @@ -1,129 +1,128 @@ ## Node.js and backend - Internals and concepts - - Strong and weak sides of node.js - - Stateful and stateless servers - - Nonblocking I/O and blocking code - - Event loop phases - - Event loop microtasks and macrotasks + - Strong and weak sides of node.js: πŸ™‹ explained + - Stateful and stateless servers: πŸ–οΈ used + - Nonblocking I/O and blocking code: πŸ–οΈ used + - Event loop phases: πŸŽ“ known + - Event loop microtasks and macrotasks: πŸ‘‚ heard - Garbage collection - - Node.js LTS schedule + - Node.js LTS schedule: πŸ‘‚ heard - I/O-bound, CPU-bound, memory-bound tasks - - Interactive applications (close to real-time) + - Interactive applications (close to real-time): πŸ–οΈ used - Modularity, layers and dependencies - - CommonJS modules - - ECMAScript modules - - Module `node:module` - - Caching in CJS and ESM - - Modules as singletons + - CommonJS modules: πŸ–οΈ used + - ECMAScript modules: πŸ–οΈ used + - Module `node:module`: πŸŽ“ known + - Caching in CJS and ESM: πŸ–οΈ used + - Modules as singletons: πŸŽ“ known - Contexts and scripts module `node:vm` - - Dependencies: `npm`, `node_modules` - - Files `package.json`, `package-lock.json` - - Module-based permissions model - - Isolation with modularity - - Dependency injection - - DI containers + - Dependencies: `npm`, `node_modules`: πŸ–οΈ used + - Files `package.json`, `package-lock.json`: πŸ–οΈ used + - Module-based permissions model: πŸ‘‚ heard + - Isolation with modularity: πŸ‘‚ heard + - Dependency injection: πŸ–οΈ used + - DI containers: πŸ‘‚ heard - Coupling and cohesion - Framework agnostic approach - Environment - - Command line arguments - - Node.js CLI + - Command line arguments: πŸ–οΈ used + - Node.js CLI: πŸ–οΈ used - Process-based permissions - Graceful shutdown - - Clustering - - Watch filesystem changes with --watch + - Clustering: πŸŽ“ known + - Watch filesystem changes with --watch: πŸ–οΈ used - Internal API - - Streams API - - Web Streams API - - Crypto API - - Password hashing with crypto.scrypt - - Web Crypto API - - File system API (sync and async) - - Copy folder recursively - - Worker threads - - Performance hooks - - Native fetch and nodejs/undici + - Streams API: πŸ–οΈ used + - Web Streams API: πŸŽ“ known + - Crypto API: πŸ–οΈ used + - Password hashing with crypto.scrypt: πŸ–οΈ used + - Web Crypto API: πŸ‘‚ heard + - File system API (sync and async): πŸ–οΈ used + - Copy folder recursively: πŸŽ“ known + - Worker threads: πŸŽ“ known + - Performance hooks: πŸ‘‚ heard + - Native fetch and nodejs/undici: πŸ‘‚ heard - async_hooks - AsyncLocalStorage - AsyncResource - Deprecated domain API - Node.js single executable - - SharedArrayBuffer + - SharedArrayBuffer: πŸŽ“ known - Module `node:worker_threads` - - Module `node:child_process` - MessageChannel, MessagePort - BroadcastChannel - - Generating crypto random UUID + - Generating crypto random UUID: πŸ–οΈ used - Module `node:url` vs `new URL` - Module `node:assert` - Internationalization - Blob, File, Buffer, module `node:buffer` - Module `node:zlib` - Network - - Endpoint throttling + - Endpoint throttling: πŸ–οΈ used - ALPN - SNI callback - - SSL certificates + - SSL certificates: πŸ–οΈ used - Protocol agnostic approach - - Fetch API - - IncomingMessage - - HTTP(S) - - TCP/SSL + - Fetch API: πŸ–οΈ used + - IncomingMessage: πŸ–οΈ used + - HTTP(S): πŸ–οΈ used + - TCP/SSL: πŸ‘‚ heard - UDP - TLS - - Websocket + - Websocket: πŸ–οΈ used - SSE - HTTP/3 (QUIC) - Long polling - - REST + - REST: πŸ–οΈ used - RPC - - Routing - - DoS - - DDoS - - XSS + - Routing: πŸ–οΈ used + - DoS: πŸŽ“ known + - DDoS: πŸ‘‚ heard + - XSS: πŸ–οΈ used - Path traversal - - CSRF - - DNS - - SQL injection + - CSRF: πŸ‘‚ heard + - DNS: πŸŽ“ known + - SQL injection: πŸŽ“ known - noDelay - - keep-alive + - keep-alive: πŸ–οΈ used - IP sticky sessions - Technique and tools - - Native test runner - - Logging - - Application configuring - - Testing - - CI/CD - - Readable - - Writable - - Transform - - Back pressure - - Buffer - - Console - - Inspector + - Native test runner: πŸ‘‚ heard + - Logging: πŸ–οΈ used + - Application configuring: πŸ–οΈ used + - Testing: πŸ–οΈ used + - CI/CD: πŸ–οΈ used + - Readable: πŸŽ“ known + - Writable: πŸŽ“ known + - Transform: πŸŽ“ known + - Back pressure: πŸ‘‚ heard + - Buffer: πŸ–οΈ used + - Console: πŸ–οΈ used + - Inspector: πŸ‘‚ heard - Data access - - Data access layer - - Repository - - Active record - - Query builder + - Data access layer: πŸ–οΈ used + - Repository: πŸ–οΈ used + - Active record: πŸ–οΈ used + - Query builder: πŸ–οΈ used - Object-Relational Mapping - - CRUD - - DTO + - CRUD: πŸ–οΈ used + - DTO: πŸ–οΈ used - Error handling and debugging - - `Error` - - `error.cause` - - `error.code` - - `error.message` + - `Error`: πŸ–οΈ used + - `error.cause`: πŸ‘‚ heard + - `error.code`: πŸ–οΈ used + - `error.message`: πŸ–οΈ used - `error.stack` - `Error.captureStackTrace` - - How to avoid mixins - - Uncaught exceptions - - Heap dump - - Debugging tools - - Flame graph - - Memory leaks - - Resource leaks - - Data race + - How to avoid mixins: πŸ–οΈ used + - Uncaught exceptions: πŸ–οΈ used + - Heap dump: πŸ‘‚ heard + - Debugging tools: πŸ–οΈ used + - Flame graph: πŸŽ“ known + - Memory leaks: πŸ‘‚ heard + - Resource leaks: πŸ‘‚ heard + - Data race: πŸ‘‚ heard - Integrations and bindings - Native addons - `C` and `C++` addons diff --git a/Skills/Paradigms.md b/Skills/Paradigms.md index 91d5f7e5..f0b51f18 100644 --- a/Skills/Paradigms.md +++ b/Skills/Paradigms.md @@ -1,91 +1,91 @@ ## Multi-paradigm programming - Theory - - Procedural programming - - Imperative programming - - Structured programming - - Non-structured programming - - Functional programming - - Prototype-based programming - - Object-oriented programming - - Object-based programming - - Generic programming - - Concurrent computing - - Asynchronous programming - - Parallel programming - - Reactive programming - - Functional-reactive (FRP) - - Automata-based programming - - Domain-specific languages - - Multi-paradigm programming - - Metaprogramming - - Actor model - - Lambda calculus - - Black box - - Information hiding - - Aspect-oriented programming - - Anemic domain model - - Class composition + - Procedural programming: πŸ–οΈ used + - Imperative programming: πŸ‘‚ heard + - Structured programming: πŸ‘‚ heard + - Non-structured programming: πŸ‘‚ heard + - Functional programming: πŸ–οΈ used + - Prototype-based programming: πŸ‘‚ heard + - Object-oriented programming: πŸ–οΈ used + - Object-based programming: πŸ‘‚ heard + - Generic programming: πŸ‘‚ heard + - Concurrent computing: πŸ‘‚ heard + - Asynchronous programming: πŸ–οΈ used + - Parallel programming: πŸ‘‚ heard + - Reactive programming: πŸ‘‚ heard + - Functional-reactive (FRP): πŸ‘‚ heard + - Automata-based programming: πŸ‘‚ heard + - Domain-specific languages: πŸ‘‚ heard + - Multi-paradigm programming: πŸ‘‚ heard + - Metaprogramming: πŸ‘‚ heard + - Actor model: πŸ‘‚ heard + - Lambda calculus: πŸ–οΈ used + - Black box: πŸ‘‚ heard + - Information hiding: πŸ‘‚ heard + - Aspect-oriented programming: πŸ‘‚ heard + - Anemic domain model: πŸ‘‚ heard + - Class composition: πŸ‘‚ heard - OOP basics - - Constructor - - Operator `new` - - Static method - - Method - - Async method - - Getters, Setters - - Public fields - - Private fields - - Field declarations - - Inheritance - - Parent class - - Polymorphism - - Abstract class - - Interface - - Encapsulation - - Hidden class - - Object form - - Instance - - Introspection - - Reflection - - The diamond problem + - Constructor: πŸ–οΈ used + - Operator `new`: πŸ–οΈ used + - Static method: πŸ–οΈ used + - Method: πŸ–οΈ used + - Async method: πŸ–οΈ used + - Getters, Setters: πŸ–οΈ used + - Public fields: πŸ–οΈ used + - Private fields: πŸ–οΈ used + - Field declarations: πŸ–οΈ used + - Inheritance: πŸ–οΈ used + - Parent class: πŸ–οΈ used + - Polymorphism: πŸ–οΈ used + - Abstract class: πŸ–οΈ used + - Interface: πŸ–οΈ used + - Encapsulation: πŸ–οΈ used + - Hidden class: πŸ–οΈ used + - Object form: πŸŽ“ known + - Instance: πŸ–οΈ used + - Introspection: πŸŽ“ known + - Reflection: πŸ‘‚ heard + - The diamond problem: πŸ‘‚ heard - GRASP - - Information expert - - Creator - - Controller - - Indirection - - Low coupling - - High cohesion - - Protected variations - - Pure fabrication + - Information expert: πŸŽ“ known + - Creator: πŸŽ“ known + - Controller: πŸŽ“ known + - Indirection: πŸŽ“ known + - Low coupling: πŸŽ“ known + - High cohesion: πŸŽ“ known + - Protected variations: πŸŽ“ known + - Pure fabrication: πŸŽ“ known - SOLID - - Single-responsibility principle (SRP) - - Open–closed principle (OCP) - - Liskov substitution principle (LSP) - - Interface segregation principle (ISP) - - Dependency inversion principle (DIP) + - Single-responsibility principle (SRP): πŸŽ“ known + - Open–closed principle (OCP): πŸŽ“ known + - Liskov substitution principle (LSP): πŸŽ“ known + - Interface segregation principle (ISP): πŸŽ“ known + - Dependency inversion principle (DIP): πŸŽ“ known - Patterns - - Singleton - - Factory Method - - Abstract Factory - - Adapter - - Observer - - Strategy - - Facade - - Proxy - - Chain of Responsibility - - Command - - Iterator - - State - - Bridge - - Builder - - Prototype - - Composite - - Decorator - - Flyweight - - Mediator - - Memento - - Template Method - - Visitor - - Reactor - - Active object - - Delegation + - Singleton: πŸ–οΈ used + - Factory Method: πŸ–οΈ used + - Abstract Factory: πŸ–οΈ used + - Adapter: πŸ–οΈ used + - Observer: πŸ–οΈ used + - Strategy: πŸŽ“ known + - Facade: πŸŽ“ known + - Proxy: πŸŽ“ known + - Chain of Responsibility: πŸ‘‚ heard + - Command: πŸ‘‚ heard + - Iterator: πŸ‘‚ heard + - State: πŸ‘‚ heard + - Bridge: πŸŽ“ known + - Builder: πŸŽ“ known + - Prototype: πŸŽ“ known + - Composite: πŸŽ“ known + - Decorator: πŸ–οΈ used + - Flyweight: πŸ‘‚ heard + - Mediator: πŸ‘‚ heard + - Memento: πŸ‘‚ heard + - Template Method: πŸ‘‚ heard + - Visitor: πŸŽ“ known + - Reactor: πŸŽ“ known + - Active object: πŸ‘‚ heard + - Delegation: πŸ‘‚ heard diff --git a/Skills/Programming.md b/Skills/Programming.md index e976b503..d773326f 100644 --- a/Skills/Programming.md +++ b/Skills/Programming.md @@ -1,37 +1,37 @@ ## Programming fundamental concepts - Concepts - - Model - - Modeling - - Subject domain - - Algorithm - - Syntax - - Semantics - - Abstraction - - Paradigm - - Programm - - Programming paradigm - - Programming language - - Contract - - Module - - Library - - Package - - Component - - Framework - - Platform - - Source code - - Object code - - Machine code - - Microcode - - Software engineering - - Decomposition - - Control flow - - Data flow - - Code reuse - - Defensive programming - - Don't repeat yourself (DRY) - - KISS principle -- Syntax and concepts + - Model: πŸ–οΈ used + - Modeling: πŸ–οΈ used + - Subject domain: πŸ–οΈ used + - Algorithm: πŸ–οΈ used + - Syntax: πŸ–οΈ used + - Semantics: πŸ–οΈ used + - Abstraction: πŸ–οΈ used + - Paradigm: πŸ–οΈ used + - Programm: πŸ–οΈ used + - Programming paradigm: πŸ–οΈ used + - Programming language: πŸ–οΈ used + - Contract: πŸ–οΈ used + - Module: πŸ–οΈ used + - Library: πŸ–οΈ used + - Package: πŸ–οΈ used + - Component: πŸ–οΈ used + - Framework: πŸ–οΈ used + - Platform: πŸ–οΈ used + - Source code: πŸ–οΈ used + - Object code: πŸ–οΈ used + - Machine code: πŸ–οΈ used + - Microcode: πŸ–οΈ used + - Software engineering: πŸ–οΈ used + - Decomposition: πŸ–οΈ used + - Control flow: πŸ–οΈ used + - Data flow: πŸ–οΈ used + - Code reuse: πŸ–οΈ used + - Defensive programming: πŸ–οΈ used + - Don't repeat yourself (DRY): πŸ–οΈ used + - KISS principle: πŸ–οΈ used +- Syntax and concepts * - Value - Identifier - Variable @@ -65,7 +65,7 @@ - Trailing commas - Return early - Fail-fast -- Types +- Types * - Primitive types - Reference types - Type systems @@ -80,7 +80,7 @@ - Type inference - Covariance - Contravariance -- Functions +- Functions * - Signature - Argument - Parameter @@ -104,7 +104,7 @@ - Monoid - Generator - Coroutine -- Data structures +- Data structures * - Array - Structure - Record @@ -131,7 +131,7 @@ - JSON - JSON5 - YAML -- Networking +- Networking + - DNS - CDN - CORS @@ -141,7 +141,7 @@ - URL - URN - URI -- Process and tools +- Process and tools + - Compiler - Just-in-time compilation - Ahead-of-time compilation @@ -170,7 +170,7 @@ - Kubernetes - GCC - LLVM -- Antipatterns +- Antipatterns ~ - Magic numbers - Hard code - Soft code @@ -201,13 +201,13 @@ - Feature envy - Monkey patch - Yo-yo problem -- Runtimes and virtual machines +- Runtimes and virtual machines + - Bytecode - V8 - VJM - CLR - Mono -- Operating systems +- Operating systems + - Interrupts - Drivers - Kernel @@ -221,7 +221,7 @@ - Windows - Real-time OS - Embedded OS -- Standards +- Standards ~ - ASCII - Escape sequence - RFC