From 6d3fd84bd89a89b850fa4c4244e721e6818fb3a2 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 25 Jan 2024 17:46:36 +0200 Subject: [PATCH 1/3] Implement shorthand letters --- .github/src/check.js | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/.github/src/check.js b/.github/src/check.js index f252b7884..3fdb533ea 100644 --- a/.github/src/check.js +++ b/.github/src/check.js @@ -75,14 +75,15 @@ const loadFile = async (filePath) => { }; const SYMBOLS = ['~', '+', '*', '!']; +const LETTERS = ['h', 'k', 'u', 'e', 't', 'r', 'c']; const LEVEL_COMMON = ['heard', 'known', 'used', 'explained']; const LEVEL_EXT = ['talked', 'researched', 'constructed']; const LEVEL = [...LEVEL_COMMON, ...LEVEL_EXT]; const EMOJI = ['👂', '🎓', '🖐️', '🙋', '📢', '🔬', '🚀']; const LEVEL_EMOJI = Object.fromEntries(LEVEL.map((n, i) => [n, EMOJI[i]])); const EMOJI_LEVEL = Object.fromEntries(EMOJI.map((n, i) => [n, LEVEL[i]])); -const LEVEL_LABELS = [...LEVEL].map((n, i) => `${EMOJI[i]} ${n}`); -LEVEL_LABELS.unshift('🤷 unknown'); +const LABELS = LEVEL.map((n, i) => `${EMOJI[i]} ${n}`); +const LEVEL_LABELS = ['🤷 unknown', ...LABELS]; const removeColon = (line) => { const s = line.trim(); @@ -90,19 +91,28 @@ const removeColon = (line) => { return s.substring(0, s.length - 1).trim(); }; -const useSymbol = (s) => { +const useShorthand = (s) => { + let index = -1; for (const symbol of SYMBOLS) { if (s.endsWith(symbol)) { - const emoji = EMOJI[SYMBOLS.indexOf(symbol)]; - return s.substring(0, s.length - 1) + emoji; + index = SYMBOLS.indexOf(symbol); + break; } } + if (index === -1 && s.at(-2) === ' ') { + const last = s.at(-1).toLowerCase(); + index = LETTERS.indexOf(last); + } + if (index >= 0) { + const emoji = EMOJI[index]; + return s.substring(0, s.length - 1) + emoji; + } return s; }; const formatSkill = (line) => { let skill = removeColon(line.substring(1).trim()); - skill = useSymbol(skill); + skill = useShorthand(skill); let icon = ''; let name = ''; for (const emoji of EMOJI) { @@ -249,8 +259,8 @@ const getTotal = (answered) => { for (const section in answered.sections) { const skills = answered.sections[section]; let count = 0; - const entries = Object.entries(skills); - for (const [skill, level] of entries) { + const entries = Object.values(skills); + for (const level of entries) { if (level) count++; } total.push(` - ${section}: \`${count}\` of \`${entries.length}\``); From 39628bc42632487e223d26ea02cfbd7f98548dac Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Thu, 25 Jan 2024 17:48:11 +0200 Subject: [PATCH 2/3] Add shorthand letters to table --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5502f034a..f64a47444 100644 --- a/README.md +++ b/README.md @@ -16,15 +16,15 @@ - Create branch, for example: `2024-winter` - In new branch add following levels or leave line untouched in each file: -| | Level | Shorthand | Description | -| ---- | ------------- | --------- | ------------------------------------------------------ | -| `👂` | `heard` | `~` | Heard or have some idea | -| `🎓` | `known` | `+` | Learned, read, but didn’t use | -| `🖐️` | `used` | `*` | Used in work or real project | -| `🙋` | `explained` | `!` | Explained to colleagues or can freely explain | -| `📢` | `talked` | | Gave a public speech or lecture on a topic | -| `🔬` | `researched` | | Deep research, measurements, comparisons, read sources | -| `🚀` | `constructed` | | Developed an implementation or equivalent | +| | Level | Shorthand | Description | +| ---- | ------------- | ----------:| ------------------------------------------------------ | +| `👂` | `heard` | `~` or `h` | Heard or have some idea | +| `🎓` | `known` | `+` or `k` | Learned, read, but didn’t use | +| `🖐️` | `used` | `*` or `u` | Used in work or real project | +| `🙋` | `explained` | `!` or `e` | Explained to colleagues or can freely explain | +| `📢` | `talked` | `t` | Gave a public speech or lecture on a topic | +| `🔬` | `researched` | `r` | Deep research, measurements, comparisons, read sources | +| `🚀` | `constructed` | `c` | Developed an implementation or equivalent | - Now you can create pull request and merge this to main branch of your fork (not to original repo) - Pull request will fire Github Actions CI processing which will generate new commit with `Profile/REPORT.md` file with skill analisis and role matching report From 4d433ca63b4d429012988b8b8e10f65883b6104e Mon Sep 17 00:00:00 2001 From: Metarhia skill bot Date: Thu, 25 Jan 2024 15:49:35 +0000 Subject: [PATCH 3/3] Automated skill analysis and report --- Profile/REPORT.md | 420 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 18 +- 2 files changed, 426 insertions(+), 12 deletions(-) diff --git a/Profile/REPORT.md b/Profile/REPORT.md index e84bed6f0..5317d0236 100644 --- a/Profile/REPORT.md +++ b/Profile/REPORT.md @@ -1 +1,421 @@ ## Software engineering self assessment + +[![Skills](https://img.shields.io/badge/Self_Assessment-skills-009933?style=flat-square)](https://github.com/HowProgrammingWorks/SelfAssessment) + +``` +[![Skills](https://img.shields.io/badge/Self_Assessment-skills-009933?style=flat-square)](https://github.com/HowProgrammingWorks/SelfAssessment) +``` + +``` +Skills +``` + +## Assessment totals + +- Programming + - Concepts: `0` of `23` + - Syntax and concepts: `0` of `34` + - Types: `0` of `14` + - Functions: `0` of `23` + - Data structures: `0` of `26` + - Networking: `0` of `9` + - Process and tools: `0` of `29` + - Antipatterns: `0` of `30` + - Runtimes and virtual machines: `0` of `5` + - Operation systems: `0` of `13` + - Standards: `0` of `15` +- JavaScript + - Language: `0` of `57` + - Statements: `0` of `19` + - Functions: `0` of `10` + - Data structures: `0` of `7` + - Standard classes and namespaces: `0` of `14` + - Infrastructure: `0` of `6` +- Async + - Theory: `0` of `20` + - Async contracts: `0` of `18` + - Async adapters and utils: `0` of `5` + - Async abstractions interfaces: `0` of `11` + - JavaScript & Node.js specific: `0` of `17` + - Techniques: `0` of `10` +- NodeJS + - Internals and concepts: `0` of `9` + - Modularity, layers and dependencies: `0` of `14` + - Environment: `0` of `6` + - Internal API: `0` of `26` + - Network: `0` of `28` + - Technique and tools: `0` of `12` + - Data access: `0` of `7` + - Error handling and debugging: `0` of `14` + - Integrations and bindings: `0` of `16` +- Paradigms + - Theory: `0` of `23` + - OOP basics: `0` of `21` + - Patterns: `0` of `25` +- Architecture + - Application structure: `0` of `22` + - Application architecture: `0` of `36` + - Solution architecture: `0` of `18` + - Enterprise architecture: `0` of `18` + +## JavaScript + +- To start asynchronous programming + - `Object`: 🤷 unknown ⟶ 🖐️ used + - `Function`: 🤷 unknown ⟶ 🖐️ used + - `Boolean`: 🤷 unknown ⟶ 🖐️ used + - `Number`: 🤷 unknown ⟶ 🖐️ used + - `Symbol`: 🤷 unknown ⟶ 🎓 known + - `undefined`: 🤷 unknown ⟶ 🖐️ used + - `null`: 🤷 unknown ⟶ 🖐️ used + - `this`: 🤷 unknown ⟶ 🖐️ used + - `instanceof`: 🤷 unknown ⟶ 🖐️ used + - `...spread`: 🤷 unknown ⟶ 🖐️ used + - `...rest`: 🤷 unknown ⟶ 🖐️ used + - `typeof`: 🤷 unknown ⟶ 🖐️ used + - Destructuring: 🤷 unknown ⟶ 🖐️ used + - Generators: 🤷 unknown ⟶ 👂 heard + - Iterators: 🤷 unknown ⟶ 👂 heard + - Async generator: 🤷 unknown ⟶ 👂 heard + - Async iterator: 🤷 unknown ⟶ 👂 heard + - Chaining: 🤷 unknown ⟶ 👂 heard + - Optional chaining: 🤷 unknown ⟶ 👂 heard + - IIFE: 🤷 unknown ⟶ 👂 heard + - Async IIFE: 🤷 unknown ⟶ 👂 heard + - `global`: 🤷 unknown ⟶ 🎓 known + - `globalThis`: 🤷 unknown ⟶ 👂 heard + - Getters and setters: 🤷 unknown ⟶ 👂 heard + - `prototype`: 🤷 unknown ⟶ 👂 heard + - Equality operators: 🤷 unknown ⟶ 🖐️ used + - Logical operators: 🤷 unknown ⟶ 🖐️ used + - Ternary operator: 🤷 unknown ⟶ 🖐️ used + - `yield`: 🤷 unknown ⟶ 👂 heard + - `await`: 🤷 unknown ⟶ 👂 heard + - Template literal: 🤷 unknown ⟶ 🖐️ used + - Strict mode: 🤷 unknown ⟶ 🖐️ used + - `super`: 🤷 unknown ⟶ 🖐️ used + - `static`: 🤷 unknown ⟶ 👂 heard + - Private class fields: 🤷 unknown ⟶ 🎓 known + - Private class methods: 🤷 unknown ⟶ 🎓 known + - `if`: 🤷 unknown ⟶ 🖐️ used + - `while`: 🤷 unknown ⟶ 🖐️ used + - `do..while`: 🤷 unknown ⟶ 🎓 known + - `for`: 🤷 unknown ⟶ 🖐️ used + - `for..of`: 🤷 unknown ⟶ 🖐️ used + - `for await`: 🤷 unknown ⟶ 👂 heard + - `throw`: 🤷 unknown ⟶ 🖐️ used + - `break`: 🤷 unknown ⟶ 🎓 known + - `continue`: 🤷 unknown ⟶ 🎓 known + - `import`: 🤷 unknown ⟶ 🎓 known + - `export`: 🤷 unknown ⟶ 🎓 known + - `try..catch`: 🤷 unknown ⟶ 🎓 known + - `class`: 🤷 unknown ⟶ 🖐️ used + - `extends`: 🤷 unknown ⟶ 🖐️ used + - `new`: 🤷 unknown ⟶ 🖐️ used + - Arrow function: 🤷 unknown ⟶ 🖐️ used + - Async function: 🤷 unknown ⟶ 🎓 known + - Function declaration: 🤷 unknown ⟶ 🖐️ used + - Function expression: 🤷 unknown ⟶ 🖐️ used + - Default parameters: 🤷 unknown ⟶ 🖐️ used + - Functional object: 🤷 unknown ⟶ 👂 heard + - `return`: 🤷 unknown ⟶ 🖐️ used + - `Array`: 🤷 unknown ⟶ 🖐️ used + - `Map`: 🤷 unknown ⟶ 🖐️ used + - `Set`: 🤷 unknown ⟶ 🖐️ used + - Mixins: 🤷 unknown ⟶ 🎓 known + - `Object.assign`: 🤷 unknown ⟶ 🎓 known + - `Proxy`: 🤷 unknown ⟶ 🎓 known + - `Error`: 🤷 unknown ⟶ 🖐️ used + - `WeakRef`: 🤷 unknown ⟶ 👂 heard + - `FinalizationRegistry`: 🤷 unknown ⟶ 👂 heard + - `Promise`: 🤷 unknown ⟶ 👂 heard + - `console`: 🤷 unknown ⟶ 🖐️ used + - Timers: 🤷 unknown ⟶ 🖐️ used + - V8: 🤷 unknown ⟶ 👂 heard + - prettier: 🤷 unknown ⟶ 🎓 known + - Total: you have `0` of `72` skills, `72` to be upgraded, and `0` above needed +- To start Node.js + - `Object`: 🤷 unknown ⟶ 🖐️ used + - `Function`: 🤷 unknown ⟶ 🖐️ used + - `Boolean`: 🤷 unknown ⟶ 🖐️ used + - `Number`: 🤷 unknown ⟶ 🖐️ used + - `BigInt`: 🤷 unknown ⟶ 🖐️ used + - `String`: 🤷 unknown ⟶ 🖐️ used + - `Symbol`: 🤷 unknown ⟶ 🖐️ used + - `Infinity`: 🤷 unknown ⟶ 🖐️ used + - `NaN`: 🤷 unknown ⟶ 🖐️ used + - `undefined`: 🤷 unknown ⟶ 🖐️ used + - `null`: 🤷 unknown ⟶ 🖐️ used + - `this`: 🤷 unknown ⟶ 🖐️ used + - `instanceof`: 🤷 unknown ⟶ 🖐️ used + - `...spread`: 🤷 unknown ⟶ 🖐️ used + - `...rest`: 🤷 unknown ⟶ 🖐️ used + - `typeof`: 🤷 unknown ⟶ 🖐️ used + - Destructuring: 🤷 unknown ⟶ 🖐️ used + - Generators: 🤷 unknown ⟶ 🖐️ used + - Iterators: 🤷 unknown ⟶ 🖐️ used + - Async generator: 🤷 unknown ⟶ 🖐️ used + - Async iterator: 🤷 unknown ⟶ 🖐️ used + - Chaining: 🤷 unknown ⟶ 🖐️ used + - IIFE: 🤷 unknown ⟶ 🖐️ used + - Async IIFE: 🤷 unknown ⟶ 🖐️ used + - `global`: 🤷 unknown ⟶ 🖐️ used + - `globalThis`: 🤷 unknown ⟶ 🖐️ used + - Getters and setters: 🤷 unknown ⟶ 🖐️ used + - Equality operators: 🤷 unknown ⟶ 🖐️ used + - Logical operators: 🤷 unknown ⟶ 🖐️ used + - Ternary operator: 🤷 unknown ⟶ 🖐️ used + - `void`: 🤷 unknown ⟶ 🖐️ used + - `yield`: 🤷 unknown ⟶ 🖐️ used + - `await`: 🤷 unknown ⟶ 🖐️ used + - Template literal: 🤷 unknown ⟶ 🖐️ used + - Strict mode: 🤷 unknown ⟶ 🖐️ used + - `delete`: 🤷 unknown ⟶ 🖐️ used + - `in`: 🤷 unknown ⟶ 👂 heard + - `super`: 🤷 unknown ⟶ 🖐️ used + - `eval`: 🤷 unknown ⟶ 🎓 known + - `static`: 🤷 unknown ⟶ 🖐️ used + - `Number.parseInt`: 🤷 unknown ⟶ 🖐️ used + - `Number.parseFloat`: 🤷 unknown ⟶ 🖐️ used + - Property descriptors: 🤷 unknown ⟶ 🎓 known + - Sealing properties: 🤷 unknown ⟶ 🎓 known + - Freezing properties: 🤷 unknown ⟶ 🎓 known + - Computed properties: 🤷 unknown ⟶ 🎓 known + - Instance class fields: 🤷 unknown ⟶ 🎓 known + - Static class fields: 🤷 unknown ⟶ 🎓 known + - Private class fields: 🤷 unknown ⟶ 🎓 known + - Private class methods: 🤷 unknown ⟶ 🎓 known + - `if`: 🤷 unknown ⟶ 🖐️ used + - `while`: 🤷 unknown ⟶ 🖐️ used + - `do..while`: 🤷 unknown ⟶ 🖐️ used + - `for`: 🤷 unknown ⟶ 🖐️ used + - `for..in`: 🤷 unknown ⟶ 🎓 known + - `for..of`: 🤷 unknown ⟶ 🖐️ used + - `for await`: 🤷 unknown ⟶ 🖐️ used + - `throw`: 🤷 unknown ⟶ 🖐️ used + - `break`: 🤷 unknown ⟶ 🖐️ used + - `continue`: 🤷 unknown ⟶ 🖐️ used + - `import`: 🤷 unknown ⟶ 🖐️ used + - `export`: 🤷 unknown ⟶ 🖐️ used + - `try..catch`: 🤷 unknown ⟶ 🖐️ used + - `class`: 🤷 unknown ⟶ 🖐️ used + - `extends`: 🤷 unknown ⟶ 🖐️ used + - `new`: 🤷 unknown ⟶ 🖐️ used + - Arrow function: 🤷 unknown ⟶ 🖐️ used + - Async function: 🤷 unknown ⟶ 🖐️ used + - Function declaration: 🤷 unknown ⟶ 🖐️ used + - Function expression: 🤷 unknown ⟶ 🖐️ used + - Default parameters: 🤷 unknown ⟶ 🖐️ used + - Functional object: 🤷 unknown ⟶ 👂 heard + - `return`: 🤷 unknown ⟶ 🖐️ used + - `Array`: 🤷 unknown ⟶ 🖐️ used + - `Map`: 🤷 unknown ⟶ 🖐️ used + - `Set`: 🤷 unknown ⟶ 🖐️ used + - Weak collections: 🤷 unknown ⟶ 🎓 known + - Typed arrays: 🤷 unknown ⟶ 🎓 known + - Mixins: 🤷 unknown ⟶ 👂 heard + - `Object.assign`: 🤷 unknown ⟶ 🎓 known + - `Proxy`: 🤷 unknown ⟶ 🎓 known + - `RegExp`: 🤷 unknown ⟶ 🎓 known + - `Date`: 🤷 unknown ⟶ 🎓 known + - `Math`: 🤷 unknown ⟶ 🎓 known + - `Reflect`: 🤷 unknown ⟶ 🎓 known + - `Error`: 🤷 unknown ⟶ 🖐️ used + - `Atomics`: 🤷 unknown ⟶ 👂 heard + - `JSON`: 🤷 unknown ⟶ 🖐️ used + - `WeakRef`: 🤷 unknown ⟶ 👂 heard + - `FinalizationRegistry`: 🤷 unknown ⟶ 👂 heard + - `Promise`: 🤷 unknown ⟶ 🖐️ used + - `console`: 🤷 unknown ⟶ 🖐️ used + - Timers: 🤷 unknown ⟶ 🖐️ used + - V8: 🤷 unknown ⟶ 🖐️ used + - Node.js: 🤷 unknown ⟶ 👂 heard + - npm: 🤷 unknown ⟶ 🎓 known + - prettier: 🤷 unknown ⟶ 🎓 known + - Total: you have `0` of `97` skills, `97` to be upgraded, and `0` above needed + +## Async + +- For Node.js applied programming + - Event loop: 🤷 unknown ⟶ 👂 heard + - `try..catch`: 🤷 unknown ⟶ 🖐️ used + - Non-blocking: 🤷 unknown ⟶ 👂 heard + - Async I/O: 🤷 unknown ⟶ 👂 heard + - Race conditions: 🤷 unknown ⟶ 🎓 known + - Thread: 🤷 unknown ⟶ 👂 heard + - Process: 🤷 unknown ⟶ 👂 heard + - Callbacks: 🤷 unknown ⟶ 🖐️ used + - Callback-last-error-first: 🤷 unknown ⟶ 🖐️ used + - Promise: 🤷 unknown ⟶ 🖐️ used + - Async/await: 🤷 unknown ⟶ 🖐️ used + - Sync generator: 🤷 unknown ⟶ 🎓 known + - Async Generator: 🤷 unknown ⟶ 🎓 known + - Async Iterator: 🤷 unknown ⟶ 🎓 known + - Event: 🤷 unknown ⟶ 🖐️ used + - Signal: 🤷 unknown ⟶ 🖐️ used + - Stream: 🤷 unknown ⟶ 🖐️ used + - Locks: 🤷 unknown ⟶ 🎓 known + - callbackify: 🤷 unknown ⟶ 🎓 known + - promisify: 🤷 unknown ⟶ 🎓 known + - asyncify: 🤷 unknown ⟶ 🎓 known + - EventEmitter: 🤷 unknown ⟶ 🖐️ used + - Observable/Observer: 🤷 unknown ⟶ 👂 heard + - Readable: 🤷 unknown ⟶ 🖐️ used + - Writable: 🤷 unknown ⟶ 🖐️ used + - Transform: 🤷 unknown ⟶ 🖐️ used + - Async Pool: 🤷 unknown ⟶ 🎓 known + - Async Queue: 🤷 unknown ⟶ 🎓 known + - Async Collector: 🤷 unknown ⟶ 🎓 known + - Semaphore: 🤷 unknown ⟶ 👂 heard + - Timers: 🤷 unknown ⟶ 🖐️ used + - `setImmediate`: 🤷 unknown ⟶ 🖐️ used + - `nextTick`: 🤷 unknown ⟶ 🖐️ used + - AbortController: 🤷 unknown ⟶ 🖐️ used + - AbortSignal: 🤷 unknown ⟶ 🎓 known + - Callback hell: 🤷 unknown ⟶ 🎓 known + - Promise hell: 🤷 unknown ⟶ 🎓 known + - ref() and unref(): 🤷 unknown ⟶ 👂 heard + - Error handling in async code: 🤷 unknown ⟶ 🖐️ used + - Better stack traces with return await: 🤷 unknown ⟶ 🖐️ used + - JSON streaming serialization: 🤷 unknown ⟶ 👂 heard + - AsyncLocalStorage: 🤷 unknown ⟶ 👂 heard + - AsyncResource: 🤷 unknown ⟶ 👂 heard + - RxJS library: 🤷 unknown ⟶ 👂 heard + - Promise.all: 🤷 unknown ⟶ 🖐️ used + - Promise.allSettled: 🤷 unknown ⟶ 🖐️ used + - Promise.race: 🤷 unknown ⟶ 🖐️ used + - Promise.any: 🤷 unknown ⟶ 🖐️ used + - Web Locks API: 🤷 unknown ⟶ 👂 heard + - Revealing constructor: 🤷 unknown ⟶ 🎓 known + - Total: you have `0` of `50` skills, `50` to be upgraded, and `0` above needed +- To start Node.js + - `try..catch`: 🤷 unknown ⟶ 🖐️ used + - Callbacks: 🤷 unknown ⟶ 🖐️ used + - Callback-last-error-first: 🤷 unknown ⟶ 👂 heard + - Promise: 🤷 unknown ⟶ 🖐️ used + - Async/await: 🤷 unknown ⟶ 🖐️ used + - Async Iterator: 🤷 unknown ⟶ 🎓 known + - Event: 🤷 unknown ⟶ 🖐️ used + - Signal: 🤷 unknown ⟶ 🎓 known + - Stream: 🤷 unknown ⟶ 🎓 known + - Chain of responsibility: 🤷 unknown ⟶ 👂 heard + - Middleware: 🤷 unknown ⟶ 👂 heard + - Locks: 🤷 unknown ⟶ 👂 heard + - callbackify: 🤷 unknown ⟶ 🎓 known + - promisify: 🤷 unknown ⟶ 🎓 known + - asyncify: 🤷 unknown ⟶ 🎓 known + - EventEmitter: 🤷 unknown ⟶ 🖐️ used + - Readable: 🤷 unknown ⟶ 🎓 known + - Writable: 🤷 unknown ⟶ 🎓 known + - Transform: 🤷 unknown ⟶ 🎓 known + - Async Pool: 🤷 unknown ⟶ 🎓 known + - Async Queue: 🤷 unknown ⟶ 🎓 known + - Async Collector: 🤷 unknown ⟶ 🎓 known + - Timers: 🤷 unknown ⟶ 🖐️ used + - `setImmediate`: 🤷 unknown ⟶ 🖐️ used + - `nextTick`: 🤷 unknown ⟶ 👂 heard + - AbortController: 🤷 unknown ⟶ 🖐️ used + - AbortSignal: 🤷 unknown ⟶ 🎓 known + - Callback hell: 🤷 unknown ⟶ 🎓 known + - Promise hell: 🤷 unknown ⟶ 🎓 known + - Error handling in async code: 🤷 unknown ⟶ 🖐️ used + - Better stack traces with return await: 🤷 unknown ⟶ 🖐️ used + - JSON streaming serialization: 🤷 unknown ⟶ 👂 heard + - Promise.all: 🤷 unknown ⟶ 🖐️ used + - Promise.allSettled: 🤷 unknown ⟶ 🖐️ used + - Promise.race: 🤷 unknown ⟶ 🖐️ used + - Promise.any: 🤷 unknown ⟶ 🖐️ used + - Revealing constructor: 🤷 unknown ⟶ 👂 heard + - Total: you have `0` of `37` skills, `37` to be upgraded, and `0` above needed +- For Node.js platform/system programming + - Event loop: 🤷 unknown ⟶ 🎓 known + - `try..catch`: 🤷 unknown ⟶ 🖐️ used + - Non-blocking: 🤷 unknown ⟶ 🎓 known + - Async I/O: 🤷 unknown ⟶ 🎓 known + - Thread pool: 🤷 unknown ⟶ 🎓 known + - Pattern Reactor: 🤷 unknown ⟶ 🎓 known + - CAS operations: 🤷 unknown ⟶ 👂 heard + - libuv: 🤷 unknown ⟶ 🎓 known + - Race conditions: 🤷 unknown ⟶ 🖐️ used + - Dead locks: 🤷 unknown ⟶ 🖐️ used + - Live locks: 🤷 unknown ⟶ 🖐️ used + - Concurrent programming: 🤷 unknown ⟶ 🎓 known + - Parallel programming: 🤷 unknown ⟶ 🎓 known + - Actor Model: 🤷 unknown ⟶ 🎓 known + - Thread: 🤷 unknown ⟶ 🖐️ used + - Process: 🤷 unknown ⟶ 🖐️ used + - Callbacks: 🤷 unknown ⟶ 🖐️ used + - Callback-last-error-first: 🤷 unknown ⟶ 🖐️ used + - Thenable: 🤷 unknown ⟶ 🖐️ used + - Promise: 🤷 unknown ⟶ 🖐️ used + - Async/await: 🤷 unknown ⟶ 🖐️ used + - Future: 🤷 unknown ⟶ 👂 heard + - Deferred: 🤷 unknown ⟶ 👂 heard + - Sync generator: 🤷 unknown ⟶ 🖐️ used + - Async Generator: 🤷 unknown ⟶ 🖐️ used + - Async Iterator: 🤷 unknown ⟶ 🖐️ used + - Event: 🤷 unknown ⟶ 🖐️ used + - Coroutine: 🤷 unknown ⟶ 👂 heard + - Goroutine: 🤷 unknown ⟶ 👂 heard + - Signal: 🤷 unknown ⟶ 🖐️ used + - Stream: 🤷 unknown ⟶ 🖐️ used + - Chain of responsibility: 🤷 unknown ⟶ 🖐️ used + - Middleware: 🤷 unknown ⟶ 🖐️ used + - Locks: 🤷 unknown ⟶ 🖐️ used + - callbackify: 🤷 unknown ⟶ 🖐️ used + - promisify: 🤷 unknown ⟶ 🖐️ used + - asyncify: 🤷 unknown ⟶ 🖐️ used + - EventEmitter: 🤷 unknown ⟶ 🖐️ used + - Observable/Observer: 🤷 unknown ⟶ 🖐️ used + - Readable: 🤷 unknown ⟶ 🖐️ used + - Writable: 🤷 unknown ⟶ 🖐️ used + - Transform: 🤷 unknown ⟶ 🖐️ used + - Async Pool: 🤷 unknown ⟶ 🖐️ used + - Async Queue: 🤷 unknown ⟶ 🖐️ used + - Async Collector: 🤷 unknown ⟶ 🖐️ used + - Semaphore: 🤷 unknown ⟶ 🖐️ used + - Mutex: 🤷 unknown ⟶ 🎓 known + - Spin Lock: 🤷 unknown ⟶ 🎓 known + - Timers: 🤷 unknown ⟶ 🖐️ used + - `setImmediate`: 🤷 unknown ⟶ 🖐️ used + - `nextTick`: 🤷 unknown ⟶ 🖐️ used + - AbortController: 🤷 unknown ⟶ 🖐️ used + - AbortSignal: 🤷 unknown ⟶ 🖐️ used + - Promise unhandled rejection: 🤷 unknown ⟶ 🖐️ used + - Promise double resolve: 🤷 unknown ⟶ 🖐️ used + - Atomics: 🤷 unknown ⟶ 🎓 known + - High resolution clock: 🤷 unknown ⟶ 🎓 known + - Callback hell: 🤷 unknown ⟶ 🖐️ used + - Promise hell: 🤷 unknown ⟶ 🖐️ used + - ref() and unref(): 🤷 unknown ⟶ 🖐️ used + - Error handling in async code: 🤷 unknown ⟶ 🖐️ used + - Better stack traces with return await: 🤷 unknown ⟶ 🖐️ used + - JSON streaming serialization: 🤷 unknown ⟶ 🖐️ used + - AsyncLocalStorage: 🤷 unknown ⟶ 🖐️ used + - AsyncResource: 🤷 unknown ⟶ 🖐️ used + - Async.js library: 🤷 unknown ⟶ 👂 heard + - RxJS library: 🤷 unknown ⟶ 👂 heard + - Promise.all: 🤷 unknown ⟶ 🖐️ used + - Promise.allSettled: 🤷 unknown ⟶ 🖐️ used + - Promise.race: 🤷 unknown ⟶ 🖐️ used + - Promise.any: 🤷 unknown ⟶ 🖐️ used + - Web Locks API: 🤷 unknown ⟶ 🎓 known + - IPC: 🤷 unknown ⟶ 🎓 known + - Channel API: 🤷 unknown ⟶ 🎓 known + - Revealing constructor: 🤷 unknown ⟶ 🖐️ used + - Total: you have `0` of `75` skills, `75` to be upgraded, and `0` above needed + +## NodeJS + +- API and domain logic developer + - Total: you have `0` of `0` skills, `0` to be upgraded, and `0` above needed +- Enterprise applications + - Total: you have `0` of `0` skills, `0` to be upgraded, and `0` above needed +- Real-Time, gamedev, messaging + - Total: you have `0` of `0` skills, `0` to be upgraded, and `0` above needed +- Web and Frontend + - Total: you have `0` of `0` skills, `0` to be upgraded, and `0` above needed +- Fullstack development + - Total: you have `0` of `0` skills, `0` to be upgraded, and `0` above needed +- Platform/system development + - Total: you have `0` of `0` skills, `0` to be upgraded, and `0` above needed diff --git a/README.md b/README.md index f64a47444..dbcffda8e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ ## Software engineering self assessment +[![Skills](https://img.shields.io/badge/Self_Assessment-skills-009933?style=flat-square)](https://github.com/HowProgrammingWorks/SelfAssessment) + ## Skills - [Programming fundamentals](Skills/Programming.md) @@ -12,20 +14,12 @@ ## How to use - Fork repository -- Enable Githib Actions workflows at tab `Actions` of your fork - Create branch, for example: `2024-winter` - In new branch add following levels or leave line untouched in each file: - -| | Level | Shorthand | Description | -| ---- | ------------- | ----------:| ------------------------------------------------------ | -| `👂` | `heard` | `~` or `h` | Heard or have some idea | -| `🎓` | `known` | `+` or `k` | Learned, read, but didn’t use | -| `🖐️` | `used` | `*` or `u` | Used in work or real project | -| `🙋` | `explained` | `!` or `e` | Explained to colleagues or can freely explain | -| `📢` | `talked` | `t` | Gave a public speech or lecture on a topic | -| `🔬` | `researched` | `r` | Deep research, measurements, comparisons, read sources | -| `🚀` | `constructed` | `c` | Developed an implementation or equivalent | - + - `👂 heard`, `🎓 known`, `🖐️ used`, `🙋 explained`, `📢 talked`, `🔬 researched`, `🚀 constructed` + - You can use just emojis: `👂`, `🎓`, `🖐️`, `🙋`, `📢`, `🔬`, `🚀` + - or just text levels: `heard`, `known`, `used`, `explained`, `talked`, `researched`, `constructed` + - or just shorthands: `~` for `heard`, `+` for `known`, `*` for `used`, `!` for `explained` - Now you can create pull request and merge this to main branch of your fork (not to original repo) - Pull request will fire Github Actions CI processing which will generate new commit with `Profile/REPORT.md` file with skill analisis and role matching report - CI processing will fix all simple mistakes in filling and replace shorthands