HowProgrammingWorks - JavaScript and Node.js Programming
6.34K subscribers
307 photos
7 videos
1 file
745 links
Программная инжененрия для JavaScript, TypeScrip, Node.js 👉 Group: https://t.me/MetarhiaHPW 👉 Node.js channel: https://t.me/metarhia 👉 Node.js group: https://t.me/nodeua
Download Telegram
🧩 Мастер-класс Middle to Senior in 2024
Переосмысление GRASP, SOLID и GoF паттернов для фронтенда и бекенда

Начало: 17 августа в 15:00
👉 Сюда: https://t.me/JavaScriptPatternsBot?start=TIMUR
В субботу будет мастер-класс «Middle to Senior in 2024» в 15.00 (GMT+3) 👉 https://t.me/JavaScriptPatternsBot?start=TIMUR
Я редко делаю стримы, ну вот как завтра будет. Можем найти несколько, и я считаю, вот этот до сих пор достаточно актуальный и глубокий https://youtu.be/qipIRQptP_4
Кто еще не смотрел стрим про связь профессионального роста и паттернов, то готовьтесь, там больше 7 часов, и главное — все по делу, про то, как и чему учиться и про важность культуры, которая проникает через паттерны https://www.youtube.com/watch?v=QzxklJW4_LM
Кстати, открыта предварительная регистрация на курс Patterns 2024 — я уже изучил всю доступную литературу и конкурентов и теперь уверен — аналогов нет, ни кто так и не смог сделать приличной адаптации паттернов к JavaScript, TypeScript, Async, Node.js миру — https://nodeua.com/Patterns-2024-buy.html
🧩 Добавил рассрочку на курс Patterns. Еще спрашивают, будут ли скидки - нет, потому что экономика программы наставничества не сойдется, я нанимаю лучших специалистов и экономить на качестве обучения это плохая идея. Можно ли приобрести Patterns без наставничества – да, это называется минимальный тариф. 👉 https://nodeua.com/Patterns-2024-buy.html
🧩 Patterns 2024 Training
English-only description version for those who want the company to pay for their training
https://nodeua.com/Patterns-2024-buy-en.html
🐥 Почему все так плохо с архитектурой приложений?
Потому, что «less competence - more confidence» (меньше компетенции - больше уверенности)
Потому, что все ведут себя как: только if/class/export выучил, уже хватается за архитектуру.
Ну конечно, структура - это не круто, архитектура - это круто.
А тем временем, из плохой структуры, из рыхлой структуры можно построить только 2 этажа, при возведении третьего уже все обрушается на первый.
1 сентября: понятный и красивый код может появляться только из стремления использовать его для образовательных целей. Если Вы видите понятный и красивый код, то будьте уверены, что или сам программист или его учитель выработали этот стиль для того, чтобы пояснить свою мысль. Ни стремление к производительности, ни бизнес-задачи, ни большой опыт не создают таких условий. Они могут порождать очень крутой код, сложный и даже надежный, но он в нем не будет человеко-ориентированности и эстетики.
✔️ Как в JavaScript/TypeScript реализуется SoC (separation of concerns) и для чего он нам?

Вы наверняка видели код, в котором на событиях или на роутах висит обработчик, который содержит и часть бизнес-логики и обращение к базе и работу с сетью. Такой портянка-код характерен для чат-ботов и серверов. Как это можно написать иначе и как в этом помогают паттерны?

Нам нужно отделить три составляющих кода (грубо говоря, совсем упрощая): транспорт, бизнес-логику, базу. Но обеспечить между ними зацепление, минимальное необходимое. Лучше всего разнести их в три разные модуля (на это не обязательно), можно разнести в три разные программные компонента или в три разные абстракции. Одна обеспечивает работу с базой и ничего не знает о транспорте, а вторая - работу с транспортом и ничего не знает о базе. Дальше их должна сшивать общая абстракция (по принципу композиции, можно и агрегации). Какие паттерны тут помогут?

🧩 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
- What is a service?
- Everything that's not a controller is a service
- Where is a model?
- Models.... are on the stage
🚀 Структура программы менторинга 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
👩‍💻 На курсе Node.js 2024 и Async 2024 появилась лекция, по всем этим вопросам

▫️ Отделяете ли исключения (ошибки в коде)?
▫️ Отделяете ли 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
🎓 IT образование: для себя определил, что неприемлемо брать деньги с начинающих, с людей, которые еще не знают что им нужно, которые вообще слабо ориентируются в отрасли. Обратите внимание, большинство трешевых ИТ-школ и "инфобизнесменов" специализируются именно на начинающих, им же можно рассказывать про циклы месяц, про переменные разжевывать и про операторы еще месяц, массивы учить и уже через полгода написать какой-то несчастный тудулист или чатбот, в виде простыни кода, и они рады, у них есть результаты, ну вот реально что-то получилось. А попробуйте продать что-то мидлам и синьорам, у них уже сформировалось мировоззрение, есть свое видение, им доказать ценность вашего курса на порядки сложнее. А потом они будут требовательными в процессе обучения, окажется, что нужно быть специалистом высокого уровня, тратить много времени, чтобы удовлетворить их, ответить на вопросы, не засыпаться от реальных продуктовых примеров кода, которые они приносят на занятия для разбора. А начинающих, ну я готов допустить, что можно брать с них деньги за наставничество, за проверку работ, за ревью кода, но не за учебный материал, которого и так море в интернете. Но такое наставничество, это удел джунов, которые еще год назад сами были такими же, и не может быть бизнесом, оно так же полезно этим наставникам для их роста, как и для начинающих. По-хорошому, вообще непонятно, кто кому платить должен. В идеале, сам процесс должен выходить в ноль по затратам сил и пользе с обоих сторон и может идти как взаимозачет. Посмотрите на всех приличных людей, которых вы знаете в ИТ-образовании, они концентрируются на обучении людей, которые уже работают и могут заработать на свое образование. Ни в коем случае не учите начинающих, которые берут кредиты на обучение, которые одалживаются или тратят последние деньги на то, ценность чего еще сами не понимают. Они еще 100 раз передумают, бросят, опять начнут, переметнутся на другой язык, поймут, что душа лежит к какой-то третьей экосистеме, и главное, что первые полгода они не могут определить качество обучения. И вот тут из кустов появляются создатели "образовательного контента", высокохудожественные читатели документации и прочие мошенники. Люди, учите друг-друга, не давайте этой нечисти парить голову начинающим, помогите им проложить роадмап в профессии, материала море, до первой работы можно вполне на нулевом бюджете доучиться, вкладывая только время и силу воли.
Please open Telegram to view this post
VIEW IN TELEGRAM
Кто говорит, что программист должен обязательно учить алгоритмы, тренироваться на литкоде и читать книжку с кабанчиком? Вы тоже не шарите, потому, что не понимаете переходных процессов в полупроводниках, не знаете как возникает диффузионный ток на pn-переходе. Нет у вас базы )))) Так вот, не нужно быть инженером по двигателям внутреннего сгорания, чтобы водить автомобиль. 99999 из 100тыс. программистов на работе не напишут поворот АВЛ-дерева, это не нужно знать, чтобы писать сложные программные системы для медицины, логистики или банка. Это спрашивают на собесах — правда, но только потому, что найм сломан и в галерах и в фаангах, там вообще началась брежневизация руководства, полный отрыв от реальности и загнивание, как в позднем совке. Это все возможно только потому, что они уже набрали вес и скорость и теперь могут сидеть на палубе титаника, слушать музыку, пить шампанское и жевать сопли, пока он тонет. Есть очень много тем сложных и очень нужных в работе программиста, которые будут 100 раз в день использоваться на любой работе инженерной: навыки декомпозиции абстракций, управления зацеплением абстракций, т.е. усилять и снижать зацепление и понимать для чего это делаешь, навыки разделения ответственности между программными компонентами (separation of concerns), внедрение зависимостей, инверсия управления, системы модульности, это все из чего строится структура приложения. А мы видим, что люди цикл с массивом выучили и сразу переходят к архитектуре.
Вот вы говорите, алгоритмы, алгоритмы, а тут открываешь ноду и видишь такое: https://github.com/nodejs/node/blob/7014e50ca32d39b94d04e04a5e6498e5c2f4346f/lib/path.js#L249-L274