From cfee2c5590ed3295f0bd0c675a41e20b64cd993c Mon Sep 17 00:00:00 2001 From: Dmytro Bovkun Date: Wed, 29 Jan 2025 13:00:06 +0200 Subject: [PATCH 1/2] test 29.01.2025 --- Skills/Async.md | 120 +++++++++++++++--------------- Skills/Databases.md | 154 +++++++++++++++++++------------------- Skills/NodeJS.md | 163 ++++++++++++++++++++-------------------- Skills/Paradigms.md | 168 +++++++++++++++++++++--------------------- Skills/Programming.md | 80 ++++++++++---------- 5 files changed, 342 insertions(+), 343 deletions(-) diff --git a/Skills/Async.md b/Skills/Async.md index 63e26c83..8ff2b2ea 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 + + - `try..catch` * + - Non-blocking * + - Async I/O * + - Thread pool + + - Pattern Reactor ~ - CAS operations - epoll - kqueue - Completion ports - Event ports - - libuv - - Race conditions - - Dead locks - - Live locks - - Concurrent programming - - Parallel programming - - Actor Model - - Thread - - Process + - libuv + + - Race conditions ~ + - Dead locks + + - Live locks + + - Concurrent programming ~ + - Parallel programming ~ + - Actor Model ~ + - Thread + + - Process * - Async contracts - - Callbacks - - Callback-last-error-first - - Thenable - - Promise - - Async/await - - Future - - Deferred + - Callbacks * + - Callback-last-error-first + + - Thenable + + - Promise * + - Async/await * + - Future + + - Deferred + - Sync generator - Async Generator - Async Iterator - - Event + - Event + - Coroutine - Goroutine - - Signal - - Stream - - Chain of responsibility - - Middleware - - Locks + - Signal ~ + - Stream * + - Chain of responsibility ~ + - Middleware * + - Locks + - Async adapters and utils - - callbackify - - promisify - - asyncify - - Callbacks compose - - Async compose + - callbackify ~ + - promisify ~ + - asyncify ~ + - Callbacks compose + + - Async compose + - Async abstractions interfaces - - EventEmitter - - Observable/Observer - - Readable - - Writable - - Transform - - Async Pool - - Async Queue - - Async Collector + - EventEmitter ~ + - Observable/Observer + + - Readable + + - Writable + + - Transform ~ + - Async Pool + + - Async Queue + + - Async Collector + - Semaphore - Mutex - Spin Lock - JavaScript & Node.js specific - - Timers - - `setImmediate` - - `nextTick` - - AbortController - - AbortSignal - - Promise unhandled rejection - - Promise double resolve + - Timers + + - `setImmediate` + + - `nextTick` + + - AbortController ~ + - AbortSignal ~ + - Promise unhandled rejection * + - Promise double resolve Promise double resolve * - 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 + + - Promise hell Promise hell + + - ref() and unref() ~ + - Error handling in async code * + - Better stack traces with return await * + - JSON streaming serialization ~ - AsyncLocalStorage - AsyncResource - Techniques - - Async.js library - - RxJS library - - Promise.all - - Promise.allSettled - - Promise.race - - Promise.any + - Async.js library * + - RxJS library ~ + - Promise.all * + - Promise.allSettled + + - Promise.race + + - Promise.any + - Web Locks API - IPC - Channel API diff --git a/Skills/Databases.md b/Skills/Databases.md index c499feb1..57b27ad2 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 * + - Performance tuning ~ + - Migrations * + - Schema versioning * + - Backup and recovery * + - Database scalability * + - Relational databases * + - Key-value store * + - Tuple store + + - Graph databases + + - Object databases ~ - 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 ~ + - Hierarchical databases ~ + - In-memory databases + + - Inverted index ~ + - Data control language (DCL) ~ + - Data definition language (DDL) ~ + - Data manipulation language (DML) * + - Data query language (DQL) * - Relational - - Entity-Relationship Diagram - - Normal forms - - Indexing - - Primary keys - - Foreign keys - - Transactions - - Views - - Subqueries - - Stored procedures - - SQL functions - - Materialized views + - Entity-Relationship Diagram * + - Normal forms * + - Indexing * + - Primary keys * + - Foreign keys * + - Transactions * + - Views ~ + - Subqueries * + - Stored procedures ~ + - SQL functions + + - Materialized views ~ - Replications - - Virtualization + - Virtualization * - 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` * + - `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` ~ - Engines - - PostgreSQL - - Oracle - - MySQL - - MariaDB + - PostgreSQL * + - Oracle ~ + - MySQL * + - MariaDB ~ - MS SQL Server - - Redis - - Rabbit - - MongoDB + - Redis + + - Rabbit + + - MongoDB * - Memcached - Riak - - DB2 - - SQLite - - DynamoDB - - Firebase + - DB2 ~ + - SQLite + + - DynamoDB + + - Firebase + - Data engineering - Data warehousing - - Business intelligence + - Business intelligence * - Big data - Data analysis - AI tools - - Cloud databases + - Cloud databases * - Data Visualization diff --git a/Skills/NodeJS.md b/Skills/NodeJS.md index bd891457..06252323 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 ! + - Stateful and stateless servers * + - Nonblocking I/O and blocking code * + - Event loop phases + + - Event loop microtasks and macrotasks ~ - Garbage collection - - Node.js LTS schedule + - Node.js LTS schedule ~ - I/O-bound, CPU-bound, memory-bound tasks - - Interactive applications (close to real-time) + - Interactive applications (close to real-time) * - Modularity, layers and dependencies - - CommonJS modules - - ECMAScript modules - - Module `node:module` - - Caching in CJS and ESM - - Modules as singletons + - CommonJS modules * + - ECMAScript modules * + - Module `node:module` + + - Caching in CJS and ESM * + - Modules as singletons + - 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` * + - Files `package.json`, `package-lock.json` * + - Module-based permissions model ~ + - Isolation with modularity ~ + - Dependency injection * + - DI containers ~ - Coupling and cohesion - Framework agnostic approach - Environment - - Command line arguments - - Node.js CLI + - Command line arguments * + - Node.js CLI * - Process-based permissions - Graceful shutdown - - Clustering - - Watch filesystem changes with --watch + - Clustering + + - Watch filesystem changes with --watch * - 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 * + - 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 ~ - async_hooks - AsyncLocalStorage - AsyncResource - Deprecated domain API - Node.js single executable - - SharedArrayBuffer - - Module `node:worker_threads` - - Module `node:child_process` + - SharedArrayBuffer + + - Module `node:worker_threads` - MessageChannel, MessagePort - BroadcastChannel - - Generating crypto random UUID + - Generating crypto random UUID * - Module `node:url` vs `new URL` - Module `node:assert` - Internationalization - Blob, File, Buffer, module `node:buffer` - Module `node:zlib` - Network - - Endpoint throttling + - Endpoint throttling * - ALPN - SNI callback - - SSL certificates + - SSL certificates * - Protocol agnostic approach - - Fetch API - - IncomingMessage - - HTTP(S) - - TCP/SSL + - Fetch API * + - IncomingMessage * + - HTTP(S) * + - TCP/SSL~ - UDP - TLS - - Websocket + - Websocket * - SSE - HTTP/3 (QUIC) - Long polling - - REST + - REST * - RPC - - Routing - - DoS - - DDoS - - XSS + - Routing * + - DoS + + - DDoS ~ + - XSS * - Path traversal - - CSRF - - DNS - - SQL injection + - CSRF ~ + - DNS + + - SQL injection + - noDelay - - keep-alive + - keep-alive * - 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 ~ + - Logging * + - Application configuring * + - Testing * + - CI/CD * + - Readable + + - Writable + + - Transform + + - Back pressure ~ + - Buffer * + - Console * + - Inspector ~ - Data access - - Data access layer - - Repository - - Active record - - Query builder + - Data access layer * + - Repository * + - Active record * + - Query builder * - Object-Relational Mapping - - CRUD - - DTO + - CRUD * + - DTO * - Error handling and debugging - - `Error` - - `error.cause` - - `error.code` - - `error.message` + - `Error` * + - `error.cause` ~ + - `error.code` * + - `error.message` * - `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 * + - Uncaught exceptions * + - Heap dump ~ + - Debugging tools * + - Flame graph + + - Memory leaks ~ + - Resource leaks ~ + - Data race ~ - Integrations and bindings - Native addons - `C` and `C++` addons diff --git a/Skills/Paradigms.md b/Skills/Paradigms.md index 91d5f7e5..182e7e3a 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 * + - 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 ~ - 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 * + - 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 ~ - GRASP - - Information expert - - Creator - - Controller - - Indirection - - Low coupling - - High cohesion - - Protected variations - - Pure fabrication + - Information expert + + - Creator + + - Controller + + - Indirection + + - Low coupling + + - High cohesion + + - Protected variations + + - Pure fabrication + - 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) + + - Open–closed principle (OCP) + + - Liskov substitution principle (LSP) + + - Interface segregation principle (ISP) + + - Dependency inversion principle (DIP) + - 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 * + - 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 ~ diff --git a/Skills/Programming.md b/Skills/Programming.md index e976b503..1ac06926 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 * + - 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 * - 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 From 0d08ac70f8d73b12aff67ea1dad731b14e17576a Mon Sep 17 00:00:00 2001 From: Metarhia skill bot Date: Wed, 29 Jan 2025 11:07:47 +0000 Subject: [PATCH 2/2] Automated skill analysis and report --- Profile/REPORT.md | 226 ++++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- Skills/Async.md | 120 +++++++++++----------- Skills/Databases.md | 154 ++++++++++++++-------------- Skills/NodeJS.md | 162 +++++++++++++++--------------- Skills/Paradigms.md | 168 +++++++++++++++---------------- Skills/Programming.md | 60 +++++------ 7 files changed, 559 insertions(+), 333 deletions(-) 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 8ff2b2ea..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 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 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 57b27ad2..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 06252323..a30f3d40 100644 --- a/Skills/NodeJS.md +++ b/Skills/NodeJS.md @@ -1,128 +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 + - - Module `node:worker_threads` + - SharedArrayBuffer: 🎓 known + - Module `node:worker_threads` - 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 182e7e3a..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 1ac06926..d773326f 100644 --- a/Skills/Programming.md +++ b/Skills/Programming.md @@ -1,36 +1,36 @@ ## 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 * + - 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