fa
Feedback
HowProgrammingWorks - JavaScript and Node.js Programming

HowProgrammingWorks - JavaScript and Node.js Programming

رفتن به کانال در Telegram

Программная инжененрия для JavaScript, TypeScrip, Node.js 👉 Group: https://t.me/How_Programming_Works 👉 Node.js channel: https://t.me/metarhia 👉 Node.js group: https://t.me/nodeua

نمایش بیشتر
6 473
مشترکین
-224 ساعت
-167 روز
-1130 روز
آرشیو پست ها
Тут мои заметки из мастер-класса по парадигмам программирования, такой конспект, со снипетами для быстрого понимания о чем речь и примерами кода одного фрагмента на 46 разных стилях, это не 46 парадигм, но мы и говорили, что нет уже таких целостных правильных парадигм, есть те или иные отдельные свойства используемые для реализации идей. В результате, конструируем из них стили программирования: https://github.com/HowProgrammingWorks/Paradigms

Мы масштабировали команду менторов и можем еще донабрать на курс Patterns. Ещё не поздно, неделю можно догнать. Кроме того, если вы не можете сейчас, но рассчитываете пойти в 2026, то заполните форму заранее. Цены завтра будут подняты, к выходным набор закрывается. Поздний онбординг на курс Patterns: https://forms.gle/r9gZCKU6RAAGo3q8A

Илья Климов делает курс по TypeScript, он не знает, что я пишу это тут до публикации, а многие не поверят, что я вообще могу писать такое про TypeScript. Если вы думаете, что не люблю TS, это не правда, я использую его много, а не люблю я то, что делают из TS многие разработчики - нечитаемые, бессмысленные нагромождения конструкций, не дающих никакой прибавки к надежности или производительности, понятности и управляемости кода. Большинство TS, который можно увидеть в обычных проектах, это или бойлерплейт или формально добавленные типы, просто чтоб было, так требуют, значит - добавим, не приходя в сознание и не осознавая задачу, которую решают типы в коде, часто сгенерированные AI и совершенно непрозрачные для человека, а значит, не прошедшие ревью, хрупкие и абсурдные конструкции. Я видел код Ильи и говорил с ним про TS, курса я не видел, но общие принципы, которые он хочет донести, я поддерживаю, нужно писать просто, но писать просто это не так просто, усложнять гораздо проще. Посмотрите, как элегантно пишет Илья, у него есть, чему научиться https://javascript.ninja/typescript

✔️ Курс Patterns 2025 уже начался, пример того, что мы разбираем на созвонах у вас есть, вчера опубликовал лекцию про Referen
✔️ Курс Patterns 2025 уже начался, пример того, что мы разбираем на созвонах у вас есть, вчера опубликовал лекцию про Referential Transparency (ссылочную прозрачность) адаптированную для ООП и других парадигм, не нужно думать, что это только для ФП полезно, мы многое берем из ФП и адаптируем. Но все еще есть несколько мест, если вы не успели, можно догнать, неделя это не критичное отставание, заходим, цены как положено на черную пятницу https://nodeua.com/Patterns-2025

Спасибо AI, что объяснил всем, что код ничего не стоит, авторские права не нужны, важна способность поддерживать его работоспособность и оперативно решать задачи, а горы кода не ценность сама по себе, это просто но не для всех было очевидно, люди держались за свой говнокод, шифровали, хранили на флешках в сейфе, надеюсь, это закончилось

🧐 Используете ли вы ссылочную прозрачность (Referential Transparency) в своём коде?
Anonymous voting

🧐 last call, вы станете понимать такой юмор 👉 https://nodeua.com/Patterns-2025-paradigms
🧐 last call, вы станете понимать такой юмор 👉 https://nodeua.com/Patterns-2025-paradigms

Тут несколько примеров из завтрашних слайдов Containers
Box.of(42); Either.right(42); Promise.resolve(42);
let maybe: number | null = 42; type Pair = { a?: number; b?: number };
type Option<T> = { kind: 'some'; value: T } | { kind: 'none' };
std::optional<int>; std::tuple<int>; std::reference_wrapper<int>;
Nullable<int> maybe = 42; new StrongBox<int>(value); Tuple.Create(myIntValue);
Guards
func process(_ x: Int?) -> Int? {
  guard let v = x else { return nil }
  guard v >= 0 else { return nil }
  return v * 2
}
in JavaScript
const process = (x) => {
  if (x === null) return null;
  if (x < 0) return null;
  return x * 2;
};
Pattern matching
fn process(x: Option<i32>) -> Option<i32> {
  match x {
    None => None,
    Some(v) if v < 0 => None,
    Some(v) => Some(v * 2),
  }
}
in JavaScript
const match = (variant, handlers) => handlers[variant.tag](variant);
match({ tag: 'point', x: 10, y: 20 }, {
  point: ({ x, y }) => `(${x}, ${y})`,
  circle: ({ r }) => `radius: ${r}`
});
Do-notation
Do({ id: 15 })
  .chain(({ id }) => ({ id, name: 'marcus', age: 42 }))
  .chain(({ name, age }) => name === 'marcus' ? (log) => log(age) : () => {})
  .run()(console.log);
Pipeline operator
(({ id: 15 })
  |> read
  |> (({ name, age }) => name === 'marcus' ? (log) => log(age) : () => {})
)(console.log);
Declarative style
execute({
  read: { id: 15 },
  success: {
    match: { name: 'marcus' },
    success: { effect: { log: 'age' } },
    fail: { effect: 'noop' },
  },
})(reader)(console.log);
🧐 заходим, не стесняемся 👉 https://nodeua.com/Patterns-2025-paradigms

На воркшопе по парадигмам (на этих выходных) я решил развернуть их сравнение через свойства кода, которые мы достигаем благодаря следующим идеям и их комбинациям: - Control Flow: Statements, algorithm steps, Expression, Command-style, Declarative style - State: Mutable, Immutable, Copy-on-write, Stateless - Contexts: Objects, Records, Closures, Containers, Modules - Branching: statement, expressions, guards, pattern matching - Iteration: Loops, Recursion, Iterators / Generators, Streams - Instantiation: Operator new, Creational patterns like Factory, Builder, Closures, Containers, Cloning - Inheritance: Classes (extends), Interfaces (implements), Prototype programming, Mixins, Composition, Aggregation, Partial/Curry, Traits - Primitive values: Scalars, Boxing, Value Objects, Containers - Purity: Pure functions, Functions with side effects, IO monads - Evaluation Flow: Function composition, Nested calls, Pipeline |> - Dependencies: pass, injection, global namespaces, service locators - Structural Control: Pattern matching, Nested if/else conditionals, Guards - Error handling: Total functions, Throwing exceptions, Error codes, Return null, undefined, Null objects, Option / Either / Result / Promise - Stability of Effects: Idempotent operations, Order-sensitive operations, Commutative / associative operations - Resource Control: Manual destruction, RAII / disposables, Region-based allocation - Concurrency Model: Shared-memory, Stateless, Message passing (Actor model),  Transactional - Asynchronity: Callback, Promise, Async/await, Future, Task, Async compose, Observer (EventEmitter, EventTarget, Signal), Streams and other abstractions - Other topics: Data Ownership, Code granularity, Point-free style, Referential transparency

🧩 Сегодня в 23:59 (GMT+3) поднимается цена на Patterns 2025, еще можно успеть https://nodeua.com/Patterns-2025 ⭐️ Воркшоп по парадигмам программирования 22-23 ноября Программа воркшопа: Суббота - с 11:00 до 14:00 Объектно-ориентированное программирование и обзор парадигм, как писать одновременно понятный и эффективный код, задания с проверкой, разбор решений в прямом эфире. Воскресенье - с 11:00 до 14:30 Функциональное программирование, реактивное, асинхронное, контрактное, автоматное и другие парадигмы и обзор характеристик кода, которые они дают. Для кого: если вы практикующий программист, но ощущаете, что ваши знания не системные, с пробелами и не упорядочены, то этот воркшоп очень быстро наведет порядок в большом объеме знаний и покажет практическое применение. Будут рассмотрены понятия: инкапсуляция, наследование, полиморфизм (Ad-hoc, Subtype, Parametric, Dynamic dispatch и другие), структурная композиция, агрегация, делегирование, дженерики, закон Деметры, чистые функции, функции первого класса, мутабельности против иммутабельности, ссылочная прозрачность, функции высшего порядка, композиция функций, каррирование, частичное применение, ADT, скрытое и явное состояние, ленивые вычисления, декларативный и императивный стиль, рекурсия против циклов, обобщенное программирование, функторы, монады и мное другое. Что говорят те, кто прошли воркшоп: начали понимать как оптимальнее решать свои задачи и ощутили уверенность в своих решениях, потому, что они были приняты не случайно и не потому, что всегда так делали или это единственное, что мы знали, а с пониманием разных подходов и характеристик кода, которые они дают, сильных и слабых сторон, получаемых в результате.

Напоминаю, в субботу и воскресенье 22-23 листопаду воркшоп по парадигмам. Раньше он был частью курса по паттернам, но я вынес его в отдельный воркшоп. Все, кто до завтра успеет записаться на курс по паттернам, попадают на воркшоп бесплатно. Владение несколькими парадигмами и разными стилями написания кода стало сейчас важным для практической работы, оно не только позволяет понимать код коллег и быстро вникать в соседние языки и платформы, но расширяет мышление и делает разработчика гибким и более конкурентоспособным. До начала курса по паттернам очень важно понимать базовые принципы ООП, ФП, процедурного и прототипного программирования, разные стили: асинхронный, реактивный, контрактный, декларативный. Отсидеться в одном фреймворке не удастся, свести все задачи к одной парадигме и стилю - тоже не выйдет. Паттерны дают готовые проверенные решения для часто встречающихся ситуаций, ускоряя разработку, повышая эффективность взаимодействия с AI, позволяют видеть структуру кода, управлять его характеристиками для построения надежных архитектурных решений. Знание парадигм помогает адаптировать паттерны для вашего конкретного случая, выбирать правильный инструмент под задачу, сокращая сложность и ошибки. Идеи ООП (инкапсуляция, структурная композиция, наследование, полиморфизм, делегирование, сокрытие, диспетчеризация, зацепление и связывание в коде) формируют устойчивые и поддерживаемые системы. Паттерны + парадигмы дают общую архитектурную грамотность, без которой невозможно строить продукты на JavaScript и TypeScript. Осваивая парадигмы и паттерны Вы развиваете инженерное мышление, умение работать с абстракциями, связями, ответственностями и потоками данных. Это фундамент, который превращает разработчика из автора скриптов на 1 раз в синьора, способного создавать масштабные, долгоживущие и надежные системы.

🧩 Через неделю мы начинаем курс Pattern 2025 Уже заполнено 70% мест, со среды цены поднимутся. https://nodeua.com/Patterns-2025 - Курс Patterns Mini уже завершился - В выходные будет воркшоп по парадигмам программирования - С понедельника начинается первая неделя 2025 года