Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
🐥 Почему все так плохо с архитектурой приложений?
Потому, что «less competence - more confidence» (меньше компетенции - больше уверенности)
Потому, что все ведут себя как: только if/class/export выучил, уже хватается за архитектуру.
Ну конечно, структура - это не круто, архитектура - это круто.
А тем временем, из плохой структуры, из рыхлой структуры можно построить только 2 этажа, при возведении третьего уже все обрушается на первый.
Потому, что «less competence - more confidence» (меньше компетенции - больше уверенности)
Потому, что все ведут себя как: только if/class/export выучил, уже хватается за архитектуру.
Ну конечно, структура - это не круто, архитектура - это круто.
А тем временем, из плохой структуры, из рыхлой структуры можно построить только 2 этажа, при возведении третьего уже все обрушается на первый.
😢14👍10🔥4⚡1
1 сентября: понятный и красивый код может появляться только из стремления использовать его для образовательных целей. Если Вы видите понятный и красивый код, то будьте уверены, что или сам программист или его учитель выработали этот стиль для того, чтобы пояснить свою мысль. Ни стремление к производительности, ни бизнес-задачи, ни большой опыт не создают таких условий. Они могут порождать очень крутой код, сложный и даже надежный, но он в нем не будет человеко-ориентированности и эстетики.
👍27❤7💯3🫡2
Вы наверняка видели код, в котором на событиях или на роутах висит обработчик, который содержит и часть бизнес-логики и обращение к базе и работу с сетью. Такой портянка-код характерен для чат-ботов и серверов. Как это можно написать иначе и как в этом помогают паттерны?
Нам нужно отделить три составляющих кода (грубо говоря, совсем упрощая): транспорт, бизнес-логику, базу. Но обеспечить между ними зацепление, минимальное необходимое. Лучше всего разнести их в три разные модуля (на это не обязательно), можно разнести в три разные программные компонента или в три разные абстракции. Одна обеспечивает работу с базой и ничего не знает о транспорте, а вторая - работу с транспортом и ничего не знает о базе. Дальше их должна сшивать общая абстракция (по принципу композиции, можно и агрегации). Какие паттерны тут помогут?
🧩 Mediator - снижает зацепление и подойдет нам для изоляции базы от транспорта.
🧩 Strategy - реализация стратегии для JavaScript это Map<PropertyKey, Implementation> что позволяет абстрагироваться от Implementation, находя его по ключу и работая по обобщенному интерфейсу.
🧩 Bridge - позволяет разделять абстракции и снижать зацепление, но не характерен для JavaScriot.
🧩 Abstract factory - для JavaScript абстрактная фабрика сводится к стратегии инстанциирования: Map<PropertyKey, Creator> и применяется как и стратегия, но в том месте, где нам нужно создавать инстансы (тут Creator это любой порождающий паттерн).
Признаки проблемы:
• Если вы не можете модифицировать работу с базой не трогая транспорт или бизнес-логику, не задевая базу, то нужно начинать внедрять разделение ответственности (separation of concerns).
• Если сложно написать юниттесты, а что-то протестировать можно только все целиком - ну вот оно, вы нашли проблему.
• Если код невозможно переиспользовать и вы чувствуете, что одно и то же пишете уже много раз.
Примеры на курсе по паттернам 👉 https://nodeua.com/Patterns-2024-buy.html
Please open Telegram to view this post
VIEW IN TELEGRAM
❤15👍8🔥3💯2🤯1
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
- What is a service?
- Everything that's not a controller is a service
- Where is a model?
- Models.... are on the stage
- Everything that's not a controller is a service
- Where is a model?
- Models.... are on the stage
🤣16❤5💯2
🚀 Структура программы менторинга Patterns 2024 постепенно вырисовывается
🧩 Unit 1: Structure and Modularity
Week 1: Code Characteristics and Optimization Strategies
Week 2: Native features in language and platforms
Week 3: Instantiation: Creational Patterns and Techniques
Week 4: Isolation: Separation of Concerns
🧩 Unit 2: Execution and Contracts
Week 5: Contracts: Interfaces for Component Interaction
Week 6: Decoupling with Events and Messaging
Week 7: Streams: Data Flows and Transformations
Week 8: Handling Errors: Exceptions and Soft Failures
🧩 Unit 3: Runtime for Applications
Week 9: Semantics: Expressive DSLs
Week 10: All-agnostic as a Default Strategy
Week 11: Scaling Applications and Architectural Styles
Week 12: Methodology: How to Start Applying Concepts
Начало 1 октября, уже а наставников кол-во ограниченное, я не успею подготовить новых до начала, так что резервируете.
На днях обновим сайт и разложим темы по неделям https://nodeua.com/Patterns-2024-buy.html
🧩 Unit 1: Structure and Modularity
Week 1: Code Characteristics and Optimization Strategies
Week 2: Native features in language and platforms
Week 3: Instantiation: Creational Patterns and Techniques
Week 4: Isolation: Separation of Concerns
🧩 Unit 2: Execution and Contracts
Week 5: Contracts: Interfaces for Component Interaction
Week 6: Decoupling with Events and Messaging
Week 7: Streams: Data Flows and Transformations
Week 8: Handling Errors: Exceptions and Soft Failures
🧩 Unit 3: Runtime for Applications
Week 9: Semantics: Expressive DSLs
Week 10: All-agnostic as a Default Strategy
Week 11: Scaling Applications and Architectural Styles
Week 12: Methodology: How to Start Applying Concepts
Начало 1 октября, уже а наставников кол-во ограниченное, я не успею подготовить новых до начала, так что резервируете.
На днях обновим сайт и разложим темы по неделям https://nodeua.com/Patterns-2024-buy.html
👍5❤2🔥1
https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-timecodes.md
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Index/Courses/Patterns-timecodes.md at master · HowProgrammingWorks/Index
Metarhia educational program index 📖. Contribute to HowProgrammingWorks/Index development by creating an account on GitHub.
👍22❤7🫡4
▫️ Отделяете ли исключения (ошибки в коде)?
▫️ Отделяете ли soft ошибки (без исключений)?
▫️ Отделяете ли операционные ошибки (net, i/o, db...)?
▫️ Делаете автоматический retry?
▫️ Делаете serialize для передачи ошибок по сети?
▫️ Создаете ли классы для кастомных ошибок?
▫️ Используете ли коды ошибок вместо классов?
▫️ Делаете цепочки ошибок error.cause?
▫️ Используете AggregateError?
▫️ Практикуете return early и fail-fast?
▫️ Практикуете guards?
▫️ Применяете Either?
▫️ Реализуете graceful shutdown?
▫️ Перезапускаете процесс на любой ошибке?
▫️ Перезапускаете на операционных ошибках?
▫️ Перезапускаете процесс на доменных ошибках?
▫️ Имеете стратегию восстановления после ошибок?
▫️ Что используете для сбора логов?
▫️ Что для агрегации и консолидации логов?
▫️ Замеряете потерю производительности от ошибок?
▫️ Используете критические секции и web locks?
▫️ Используете promise.finally()?
▫️ Как трекаете и логируете контекст исполнения?
▫️ Генерируете UUID для трекинга контекстов?
▫️ Создаете ли точки восстановления состояния?
▫️ Используете AI для анализа стек-трейсов?
▫️ Применяете практику circuit breaker?
▫️ Очищаете stack trace от критических данных?
▫️ Практикуете blue-green deployments?
▫️ Практикуете feature toggles?
▫️ Практикуете canary release?
▫️ Практикуете shadow deployments?
▫️ Практикуете progressive delivery?
▫️ Практикуете rolling deployments?
▫️ Практикуете hotfix deployment?
▫️ Практикуете hot reload (без перезапуска)?
▫️ Имеете fallback при возникновении ошибок?
👉 https://www.patreon.com/tshemsedinov
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16⚡4❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍98❤12💯9
Кто говорит, что программист должен обязательно учить алгоритмы, тренироваться на литкоде и читать книжку с кабанчиком? Вы тоже не шарите, потому, что не понимаете переходных процессов в полупроводниках, не знаете как возникает диффузионный ток на pn-переходе. Нет у вас базы )))) Так вот, не нужно быть инженером по двигателям внутреннего сгорания, чтобы водить автомобиль. 99999 из 100тыс. программистов на работе не напишут поворот АВЛ-дерева, это не нужно знать, чтобы писать сложные программные системы для медицины, логистики или банка. Это спрашивают на собесах — правда, но только потому, что найм сломан и в галерах и в фаангах, там вообще началась брежневизация руководства, полный отрыв от реальности и загнивание, как в позднем совке. Это все возможно только потому, что они уже набрали вес и скорость и теперь могут сидеть на палубе титаника, слушать музыку, пить шампанское и жевать сопли, пока он тонет. Есть очень много тем сложных и очень нужных в работе программиста, которые будут 100 раз в день использоваться на любой работе инженерной: навыки декомпозиции абстракций, управления зацеплением абстракций, т.е. усилять и снижать зацепление и понимать для чего это делаешь, навыки разделения ответственности между программными компонентами (separation of concerns), внедрение зависимостей, инверсия управления, системы модульности, это все из чего строится структура приложения. А мы видим, что люди цикл с массивом выучили и сразу переходят к архитектуре.
👍63💯15❤4🤣3⚡1🔥1
Вот вы говорите, алгоритмы, алгоритмы, а тут открываешь ноду и видишь такое: https://github.com/nodejs/node/blob/7014e50ca32d39b94d04e04a5e6498e5c2f4346f/lib/path.js#L249-L274
😁27🤣13😢5💯2🫡2❤1👍1👎1
🧩 Patterns 2024: The mentoring program is ready, I'll prepare translations tomorrow )))
🗓 Start: 1 October; Duration: 12 weeks
👉 Training description: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
👉 Registration for the course: https://forms.gle/wuJ3nvSeF2apgUESA
🗓 Start: 1 October; Duration: 12 weeks
👉 Training description: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
👉 Registration for the course: https://forms.gle/wuJ3nvSeF2apgUESA
🔥4🤯3👍2
🚀 Patterns 2024 Тренинг с наставниками
Перевод готов, советую его прочитать даже тем, кто не берет курс, потому что это почти статья и там много идей как усовершенствовать свои знания и структурировать их: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Автор утверждает, что это самые важные вещи, которые следует учить и практиковать:
📂 Системы модульности, внедрение зависимостей (DI) и инверсия управления (IoC)
📦 Декомпозиция абстракций и принципы GRASP с современной интерпретацией
🧩 Паттерны «Банды четырех» (GoF) переосмысленные для JavaScript и TypeScript
🔮 Принципы изоляции и SoC (Разделение ответственностей)
👷🏻♂️ Разделение прикладного и системного кода (разные специальности)
🧩 Принципы SOLID: SRP, OCP, ISP, DIP, LSP с адаптацией для разных парадигм
🌟 Мультипарадигменное программирование и создание доменных языков (DSL)
🧩 Контрактное программирование и декларативное моделирование через схемы
🏛 Чистая архитектура (Clean) и слоеная архитектура (Onion или Layered)
(читать дальше...)
Перевод готов, советую его прочитать даже тем, кто не берет курс, потому что это почти статья и там много идей как усовершенствовать свои знания и структурировать их: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Автор утверждает, что это самые важные вещи, которые следует учить и практиковать:
📂 Системы модульности, внедрение зависимостей (DI) и инверсия управления (IoC)
📦 Декомпозиция абстракций и принципы GRASP с современной интерпретацией
🧩 Паттерны «Банды четырех» (GoF) переосмысленные для JavaScript и TypeScript
🔮 Принципы изоляции и SoC (Разделение ответственностей)
👷🏻♂️ Разделение прикладного и системного кода (разные специальности)
🧩 Принципы SOLID: SRP, OCP, ISP, DIP, LSP с адаптацией для разных парадигм
🌟 Мультипарадигменное программирование и создание доменных языков (DSL)
🧩 Контрактное программирование и декларативное моделирование через схемы
🏛 Чистая архитектура (Clean) и слоеная архитектура (Onion или Layered)
(читать дальше...)
👍11❤5🤩2⚡1👎1
🧩 Тарифные планы тренинга с наставниками Patterns 2024
∙ Minimal: обучение в общей группе без наставника, но с групповыми семинарами
∙ Standard: обучение с наставником в небольших группах (10 человек)
∙ Professional: обучение с наставником, индивидуально и в группах, дополнительные материалы
∙ Exclusive: персонализированный учебный трек с автором курса и приглашенными экспертами
👉 Подробности: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Формат тренинга
🗓 12 недель (3 месяца) + онбординг (1 неделя) + секретный модуль
👍 Доступ к материалам курса дается навсегда
🕑 Каждую неделю обязательно: 1 час лекций + 2 часа семинаров + 2 часа самостоятельной работы
🥋 Тренировки и групповая работа с наставниками, а не только смотрение видосов и чтение
🙋♂️ По желанию: для глубокого погружения +3 часа дополнительных материалов на старших тарифах
🏅 По завершению курса Вы получаете сертификат
⚠️ Входные требования: базовый JavaScript + рекомендуется опыт практического программирования
🙅 Для кого не подойдет: не для начинающих, бесплатные материалы для начинающих ищите у Тимура
💳 Рассрочка: помесячная оплата для всех тарифов кроме минимального
🗺 После курса участие в комьюнити выпускников, где уже тысячи людей по всему миру
👉 Купить: https://nodeua.com/Patterns-2024-buy.html
∙ Minimal: обучение в общей группе без наставника, но с групповыми семинарами
∙ Standard: обучение с наставником в небольших группах (10 человек)
∙ Professional: обучение с наставником, индивидуально и в группах, дополнительные материалы
∙ Exclusive: персонализированный учебный трек с автором курса и приглашенными экспертами
👉 Подробности: https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024-ru.md
Формат тренинга
🗓 12 недель (3 месяца) + онбординг (1 неделя) + секретный модуль
👍 Доступ к материалам курса дается навсегда
🕑 Каждую неделю обязательно: 1 час лекций + 2 часа семинаров + 2 часа самостоятельной работы
🥋 Тренировки и групповая работа с наставниками, а не только смотрение видосов и чтение
🙋♂️ По желанию: для глубокого погружения +3 часа дополнительных материалов на старших тарифах
🏅 По завершению курса Вы получаете сертификат
⚠️ Входные требования: базовый JavaScript + рекомендуется опыт практического программирования
🙅 Для кого не подойдет: не для начинающих, бесплатные материалы для начинающих ищите у Тимура
💳 Рассрочка: помесячная оплата для всех тарифов кроме минимального
🗺 После курса участие в комьюнити выпускников, где уже тысячи людей по всему миру
👉 Купить: https://nodeua.com/Patterns-2024-buy.html
⚡6😁4👍3❤1🤯1
Проблема сложности, которую решают микросервисы, на самом деле решается проектированием структуры кода на среднем уровне, т.е. люди от функций и классов хотят перескочить сразу к архитектуре, минуя модули, слои, подсистемы. Если код хорошо структурирован на среднем уровне благодаря:
- системам модульности,
- внедрению зависимостей и инверсии управления,
- архитектурным границам и слоям,
- декомпозиции абстракций,
- separation of concerns,
- information expert,
- контрактному программированию,
- управлению, сокрытию и изоляции сложности,
- разделению прикладного и системного кода,
то такое приложение можно в течении нескольких часов собрать в 2, 3, 5, 105 инстансов, заменив взаимодействие между их структурными компонентами на RPC и трансляцию событий. Так, что модули и подсистемы знать не будут, что они запущены не в одном процессе. А если код «рыхлый», то его и микросервисом не изолировать, у такого сервиса будет большой внешний трафик, потому, что зацепление на чужие данные и чужую логику высоки. Так что, «распиливание» это только распиливание бюджета команд и бюджета на инфраструктуру. Обойти вопрос хаоса на среднем уровне при помощи чуда не выйдет. Чтобы построить Application архитектуру, нужна качественная структура, а чтобы перейти к Solution и Enterprise архитектуре, нужна качественная Application архитектура. Попытки перескочить от функции, цикла и массива к Solution архитектуре приводят к появлению монстров типа облачных функций, микролитов, моносервисов и скоро мы увидим Variable as a Service, а потом гору этих абстракций, вываленных на уровень Solution, не сгруппированных и не изолированных в структурные единицы управления сложностью. Чуда не будет, ни кто не решит за нас вопрос перехода от отдельного кирпича к небоскребу, нужны промежуточные структурные единицы.
- системам модульности,
- внедрению зависимостей и инверсии управления,
- архитектурным границам и слоям,
- декомпозиции абстракций,
- separation of concerns,
- information expert,
- контрактному программированию,
- управлению, сокрытию и изоляции сложности,
- разделению прикладного и системного кода,
то такое приложение можно в течении нескольких часов собрать в 2, 3, 5, 105 инстансов, заменив взаимодействие между их структурными компонентами на RPC и трансляцию событий. Так, что модули и подсистемы знать не будут, что они запущены не в одном процессе. А если код «рыхлый», то его и микросервисом не изолировать, у такого сервиса будет большой внешний трафик, потому, что зацепление на чужие данные и чужую логику высоки. Так что, «распиливание» это только распиливание бюджета команд и бюджета на инфраструктуру. Обойти вопрос хаоса на среднем уровне при помощи чуда не выйдет. Чтобы построить Application архитектуру, нужна качественная структура, а чтобы перейти к Solution и Enterprise архитектуре, нужна качественная Application архитектура. Попытки перескочить от функции, цикла и массива к Solution архитектуре приводят к появлению монстров типа облачных функций, микролитов, моносервисов и скоро мы увидим Variable as a Service, а потом гору этих абстракций, вываленных на уровень Solution, не сгруппированных и не изолированных в структурные единицы управления сложностью. Чуда не будет, ни кто не решит за нас вопрос перехода от отдельного кирпича к небоскребу, нужны промежуточные структурные единицы.
👍43🔥10💯3
Forwarded from Metarhia/NodeUA - Node.js Ukraine Community
Which techniques do you use to control state within software abstractions? (multiselect or add in comments)
Anonymous Poll
43%
Pure Functions
13%
Idempotent Functions
12%
State Hiding Primitives
23%
Functional Techniques
52%
OOP Techniques
23%
Flags
9%
Critical Sections and Locks
29%
Shared State
10%
Conflict-Free Data Structures
10%
Conflict-Free Flow Control
❤2
⚠️ Завтра первый день онбординга на Patterns 2024.
Это нулевая неделя, формируются группы и назначаются менторы. Процесс оказался не таким простым организационно. Всем, кто зарегистрировался - прошу спокойно подождать до вечера и если вам на почту не придет приглашение, то утром обратиться в нашу поддержку, там отдельные люди занимаются вопросами платежей, рассрочкой, потерянными контактами (часть людей везде указывает разные почты и телефоны, вводят "Юра" или "EA 00 00 FF FF" в поле фамилии и невозможно понять, кто это).
∙ Поддержка по платежам: https://www.tgoop.com/patterns2024 или на почту [email protected]
∙ Кто зарегистрировался но не оплатил, то платить тут https://nodeua.com/Patterns-2024-buy.html
∙ Кто оплатил, но не заполнил форму, это тут: https://forms.gle/wuJ3nvSeF2apgUESA
∙ Кто и зарегистрировлся и оплатил, но не полял куда попал, то можно посмотреть описание тренинговой программы на трех языках тут https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
∙ Курсы по ноде и по асинхронному программированию тут: https://www.patreon.com/tshemsedinov
Пишу это потому, что есть люди, которые пишут, что хотели попасть на курс по ноде и уже где-то оплатили, а оказалось, что они на паттерны попали.
Это нулевая неделя, формируются группы и назначаются менторы. Процесс оказался не таким простым организационно. Всем, кто зарегистрировался - прошу спокойно подождать до вечера и если вам на почту не придет приглашение, то утром обратиться в нашу поддержку, там отдельные люди занимаются вопросами платежей, рассрочкой, потерянными контактами (часть людей везде указывает разные почты и телефоны, вводят "Юра" или "EA 00 00 FF FF" в поле фамилии и невозможно понять, кто это).
∙ Поддержка по платежам: https://www.tgoop.com/patterns2024 или на почту [email protected]
∙ Кто зарегистрировался но не оплатил, то платить тут https://nodeua.com/Patterns-2024-buy.html
∙ Кто оплатил, но не заполнил форму, это тут: https://forms.gle/wuJ3nvSeF2apgUESA
∙ Кто и зарегистрировлся и оплатил, но не полял куда попал, то можно посмотреть описание тренинговой программы на трех языках тут https://github.com/HowProgrammingWorks/Index/blob/master/Courses/Patterns-2024.md
∙ Курсы по ноде и по асинхронному программированию тут: https://www.patreon.com/tshemsedinov
Пишу это потому, что есть люди, которые пишут, что хотели попасть на курс по ноде и уже где-то оплатили, а оказалось, что они на паттерны попали.
👍7😁4🫡2❤1🔥1