Трехконтурная разработка: вместо того, чтобы генерировать с помощью AI миллионы строк кода в одном репозитории можно разделить это на 2 или три цикла.
Первый контур: технологический стек
Второй контур: параметризованные модули
Третий контур: продукт
Основная идея:
- Каждый следующий контур сужает пространство решений
- AI особенно эффективен, когда работает внутри заранее подготовленной системы ограничений
- Чем сильнее первый и второй контуры, тем меньше кода требуется третьему, тем меньше контекста нужно AI, тем проще ревью, тестирование, сопровождение и миграции.
Эти и другие вопросы обсуждаем каждый четверг на созвоне сообщества https://www.patreon.com/c/tshemsedinov
Первый контур: технологический стек
Здесь сосредоточены основные инженерные усилия: runtime, протоколы, хранение данных, безопасность, наблюдаемость производительность, управление памятью и конкурентностью, инфраструктура, стабильные контракты и точки расширения. Этот код пишется редко, долго и дорого. Его создают лучшие инженеры вместе с AI, тщательно тестируют, профилируют и переиспользуют во множестве продуктов. Первый контур уменьшает кодовую базу второго на несколько порядков.
Второй контур: параметризованные модули
Это крупные готовые возможности: аутентификация, платежи, уведомления, workflow, отчёты, интеграции, роли и права, биллинг, отчеты и т.д. Здесь используются метапрограммирование, кодогенерация, схемы, зависимые типы, декларативные контракты и динамическая диспетчеризация. Модуль не реализует один конкретный сценарий. Он представляет семейство сценариев и перенастраивается через метаданные, политики, схемы и обработчики. Второй контур уменьшает кодовую базу третьего на несколько порядков.
Третий контур: продукт
Продукт собирается из готовых узлов. В нём остаются: модель предметной области, схемы данных, бизнес-правила, политики, конфигурация модулей, небольшое количество уникальных обработчиков, связи между бизнес-процессами. В результате полноценный продукт может состоять из нескольких сотен или нескольких тысяч строк кода, конфигурации и схем.
Основная идея:
- AI особенно эффективен, когда работает внутри заранее подготовленной системы ограничений
- Чем сильнее первый и второй контуры, тем меньше кода требуется третьему, тем меньше контекста нужно AI, тем проще ревью, тестирование, сопровождение и миграции.
Эти и другие вопросы обсуждаем каждый четверг на созвоне сообщества https://www.patreon.com/c/tshemsedinov
❤8👍4👎3💯2🔥1
Object.freeze / seal / preventExtensions: сколько это стоит в V8
Бенчмарк на create / read / write для обычного объекта {} и трех режимов защиты: freeze, preventExtensions, seal.
- create: защита дороже обычного объекта ~в x4:
- read: разницы почти нет, все ~1.4–1.6 ns
- write: preventExtensions и seal пишут в существующие поля так же быстро, как
Вывод: читать frozen можно спокойно, дорого создавать (это обычно редко), а писать в freeze через try/catch не нужно, но в коде freeze может быть, если есть тесты, подтверждающие, что не пишем в поля
https://github.com/HowProgrammingWorks/Object
Бенчмарк на create / read / write для обычного объекта {} и трех режимов защиты: freeze, preventExtensions, seal.
- create: защита дороже обычного объекта ~в x4:
{} 5.7 ns, а для freeze/seal ~25 ns- read: разницы почти нет, все ~1.4–1.6 ns
- write: preventExtensions и seal пишут в существующие поля так же быстро, как
{}, а freeze в кидает исключение ~2245 ns (долго)Вывод: читать frozen можно спокойно, дорого создавать (это обычно редко), а писать в freeze через try/catch не нужно, но в коде freeze может быть, если есть тесты, подтверждающие, что не пишем в поля
https://github.com/HowProgrammingWorks/Object
❤4👍2🔥1
Что я понял по итогам работы над структурами данных для стандартной библиотеки Metarhia
Это же классическая тема, но ее мало кто хорошо осваивает в наше время, тем более в мире JS/Web разработки и во времена, когда все пишет AI. И даже если учили и знают, как делать хотябы простейший список, то нет привычки его использовати и знания остаются аккадемической теорией, невосстребованными вообще, а в коде массивы и объекты, ну максимум Set/Map. Почему же так случается?
- Обычно людей учат как устроены структуры данных внутри, а нужно учить, как их применять. Внутреннее устройство даже не всегда нужно знать.
- Нет хороших примеров использовани и нет культуры написания кода на структурах, так что, просто так это не поменять, нужно менять трек обучения.
- Еще вариант: добавить скилы для этого и заставить типовые случаи внедлять через AI, это наверно сейчас более актуально, людей быстро не переучить.
Я за последний месяц собрал свои наработки за последние 15 лет и сделал и продакшен-версии кода и учебные примеры, записал много лекций и стримов по структурам данных. Буду делать примеры и скилы, а пока вот продакшен-реди реализация самых нужных структур тут https://github.com/metarhia/metautil
Это же классическая тема, но ее мало кто хорошо осваивает в наше время, тем более в мире JS/Web разработки и во времена, когда все пишет AI. И даже если учили и знают, как делать хотябы простейший список, то нет привычки его использовати и знания остаются аккадемической теорией, невосстребованными вообще, а в коде массивы и объекты, ну максимум Set/Map. Почему же так случается?
- Обычно людей учат как устроены структуры данных внутри, а нужно учить, как их применять. Внутреннее устройство даже не всегда нужно знать.
- Нет хороших примеров использовани и нет культуры написания кода на структурах, так что, просто так это не поменять, нужно менять трек обучения.
- Еще вариант: добавить скилы для этого и заставить типовые случаи внедлять через AI, это наверно сейчас более актуально, людей быстро не переучить.
Я за последний месяц собрал свои наработки за последние 15 лет и сделал и продакшен-версии кода и учебные примеры, записал много лекций и стримов по структурам данных. Буду делать примеры и скилы, а пока вот продакшен-реди реализация самых нужных структур тут https://github.com/metarhia/metautil
❤11👍6🔥2🤝1
Passkey (вход без пароля)
Вместо пароля на устройстве создается криптографическая пара ключей:
- приватный остается у вас (телефон, ноутбук, ключ)
- на сервер уходит только публичный
При входе устройство подписывает запрос - фишинг и утечка пароля остаются в прошлом.
Минимальный пример на чистом Node.js и WebAuthn API: регистрация, вход, сессия.
https://github.com/HowProgrammingWorks/Passkey
Вместо пароля на устройстве создается криптографическая пара ключей:
- приватный остается у вас (телефон, ноутбук, ключ)
- на сервер уходит только публичный
При входе устройство подписывает запрос - фишинг и утечка пароля остаются в прошлом.
Минимальный пример на чистом Node.js и WebAuthn API: регистрация, вход, сессия.
https://github.com/HowProgrammingWorks/Passkey
👍18🔥8❤4
А тут альтернативный вариант входа без пароля:
- Хранение ключей в OPFS (в браузере)
- Для генерации Web Crypto (ECDSA P-256)
- Без использования Web Authn, Passkey
https://github.com/HowProgrammingWorks/ChallengeSignIn
- Хранение ключей в OPFS (в браузере)
- Для генерации Web Crypto (ECDSA P-256)
- Без использования Web Authn, Passkey
https://github.com/HowProgrammingWorks/ChallengeSignIn
👍5❤3🔥3
🧑💻 AI: зачем нужны структуры данных для JavaScript — практические примеры для бэкенда и фронтенда
Структуры данных в JavaScript обычно объясняют через их внутреннее устройство, API и оценку сложности Big O. А мы пойдем от реальных инженерных проблем: написание бизнес-логики, кода на JavaScript и TypeScript для backend и frontend, типовые проблемы в разработке: коррапт глобальных данных, гонку состояния, очереди, кеширование, история изменений, управление памятью и ресурсами.
Мы разберем, почему каждая структура решает определенную проблему, и уже как следствие, то что она что-то запрещает и чем за это приходится платить, но и какие плюсы мы получаем. От обычных Array, Object, Map и Set до Linked List, Persistent List, Heap, Circular buffer, Bloom filter, Stack, Queue, Append-only, Immutable lists and Records. Отдельно классифицируем структуры для доменного, продуктового, платформенного и системного кода.
https://www.youtube.com/live/qNAjrZ07un0
Структуры данных в JavaScript обычно объясняют через их внутреннее устройство, API и оценку сложности Big O. А мы пойдем от реальных инженерных проблем: написание бизнес-логики, кода на JavaScript и TypeScript для backend и frontend, типовые проблемы в разработке: коррапт глобальных данных, гонку состояния, очереди, кеширование, история изменений, управление памятью и ресурсами.
Мы разберем, почему каждая структура решает определенную проблему, и уже как следствие, то что она что-то запрещает и чем за это приходится платить, но и какие плюсы мы получаем. От обычных Array, Object, Map и Set до Linked List, Persistent List, Heap, Circular buffer, Bloom filter, Stack, Queue, Append-only, Immutable lists and Records. Отдельно классифицируем структуры для доменного, продуктового, платформенного и системного кода.
https://www.youtube.com/live/qNAjrZ07un0
YouTube
🧑💻 AI: зачем нужны структуры данных для JavaScript — практические примеры для бэкенда и фронтенда
Структуры данных в JavaScript обычно объясняют через их внутреннее устройство, API и оценку сложности Big O. А мы пойдем от реальных инженерных проблем: написание бизнес-логики, кода на JavaScript и TypeScript для backend и frontend, типовые проблемы в разработке:…
❤13👍6🔥3🤝1
Новый набор в гильдию Next Tick
За что тебе платят, когда код пишет модель? Ответ, с которым мы работаем в Гильдии: за работу с ограничениями, decision framework, архитектуру, review, широкое мышление, глубокую экспертизу, умение коммуницировать с людьми и агентам.
Вы знаете, что у меня есть курс по архитектуре, в нем 22 лекции по 2 часа и вот все материалы по архитектуре, которые я записал для NextTick почти не пересекаются с моим курсом, потому, что в NextTick другая цель и другой материал, который обычно не передают в статьях, книгах и докладах, это личный опыт, о нем рассказывают друзьям в неформальном общении, но оказалось, что это самое ценное, что позволяет быстро нарастить компетенции.
Некоторые темы по архитектуре, которые мы уже рассмотрели:
- AI и архитектура: кто кем управляет, зачем уменьшать сложность
- Почему "большие задачи" почти всегда ложь — и как дробить работу
- Вертикальные слайсы vs горизонтальные слои в архитектуре
- Acceptance criteria как проверяемый контракт
- Planning for AI: explicit outcome, границы, definition of done
- Не весь техдолг равен, как продать рефакторинг на языке ROI
- Rewrite vs refactoring, AI-assisted migration: где AI ускоряет, а где производит новый долг
- Мифология в программной инженерии
- Architecture review: что реально должно блокировать merge
- Реактивные вычисления, модель акторов, конечные автоматы
- Мультипарадигменное программирование и построение DSL-языков
- Функциональные и нефункциональные требования
- ADR (документирование архитектурных решений)
- Управление характеристиками кода для построения нужной архитектуры
Это только небольшая часть материалов, их мого, но не нужно на них набрасываться поглощая все сразу, все построено так, что можно находить те вещи, которые вам нужны прямо сейчас для работы, не обязательно проходить от начала до конца, это все независимые темы которые вы можете осваивать в любом порядке.
Что будет в ближайшее время:
- Как архитектурное ревью меняют продукт и команду
- Архитектурные границы и проектирование контрактов
- Нужных людей невозможно нанять. Их нужно выращивать
- Как развиваться на работе, а не деградировать
- Как влиять на коллектив через идеи, идеи сильнее приказов
- Как наладить менторство в коллективе и в чем его цель
- Risk assessment: как думать о том, что может пойти не так
Архитектура - это пересечение экономики и эстетики: предсказуемость из непредсказуемых частей, обратимые решения vs one-way doors, R&D вместо "надо все знать".
Заходите на сайт, там обзор и описание формата - https://nexttick.it/?utm_source=timur_tg_howprogworks
За что тебе платят, когда код пишет модель? Ответ, с которым мы работаем в Гильдии: за работу с ограничениями, decision framework, архитектуру, review, широкое мышление, глубокую экспертизу, умение коммуницировать с людьми и агентам.
Вы знаете, что у меня есть курс по архитектуре, в нем 22 лекции по 2 часа и вот все материалы по архитектуре, которые я записал для NextTick почти не пересекаются с моим курсом, потому, что в NextTick другая цель и другой материал, который обычно не передают в статьях, книгах и докладах, это личный опыт, о нем рассказывают друзьям в неформальном общении, но оказалось, что это самое ценное, что позволяет быстро нарастить компетенции.
Некоторые темы по архитектуре, которые мы уже рассмотрели:
- AI и архитектура: кто кем управляет, зачем уменьшать сложность
- Почему "большие задачи" почти всегда ложь — и как дробить работу
- Вертикальные слайсы vs горизонтальные слои в архитектуре
- Acceptance criteria как проверяемый контракт
- Planning for AI: explicit outcome, границы, definition of done
- Не весь техдолг равен, как продать рефакторинг на языке ROI
- Rewrite vs refactoring, AI-assisted migration: где AI ускоряет, а где производит новый долг
- Мифология в программной инженерии
- Architecture review: что реально должно блокировать merge
- Реактивные вычисления, модель акторов, конечные автоматы
- Мультипарадигменное программирование и построение DSL-языков
- Функциональные и нефункциональные требования
- ADR (документирование архитектурных решений)
- Управление характеристиками кода для построения нужной архитектуры
Это только небольшая часть материалов, их мого, но не нужно на них набрасываться поглощая все сразу, все построено так, что можно находить те вещи, которые вам нужны прямо сейчас для работы, не обязательно проходить от начала до конца, это все независимые темы которые вы можете осваивать в любом порядке.
Что будет в ближайшее время:
- Как архитектурное ревью меняют продукт и команду
- Архитектурные границы и проектирование контрактов
- Нужных людей невозможно нанять. Их нужно выращивать
- Как развиваться на работе, а не деградировать
- Как влиять на коллектив через идеи, идеи сильнее приказов
- Как наладить менторство в коллективе и в чем его цель
- Risk assessment: как думать о том, что может пойти не так
Архитектура - это пересечение экономики и эстетики: предсказуемость из непредсказуемых частей, обратимые решения vs one-way doors, R&D вместо "надо все знать".
Заходите на сайт, там обзор и описание формата - https://nexttick.it/?utm_source=timur_tg_howprogworks
🤣8❤3🔥3👍1🤝1
В NextTick мы регулярно проводим голосовые разборы для участников с платной подпиской. Один из последних стримов мы решили ненадолго открыть в Telegram-канале IT-Гильдии.
AI уже умеет ускорять разработку. Проблема в том, что бизнесу не нужен код быстрее. Ему нужны решенные задачи.
Запись будет в канале до 2 августа. https://t.me/itguild_next_tick
AI уже умеет ускорять разработку. Проблема в том, что бизнесу не нужен код быстрее. Ему нужны решенные задачи.
Это часовой разговор о том, что агентская эпоха уже меняет в работе разработчика: почему количество сгенерированного кода ничего не говорит о результате, где сохраняется ценность инженера и почему архитектура, code review и способность спорить с неверными решениями становятся важнее скорости написания кода. А еще — что изменения в GitLab, увольнения в Cloudflare и рост AI-рынка означают не для абстрактного «рынка труда», а для конкретного разработчика прямо сейчас.
Запись будет в канале до 2 августа. https://t.me/itguild_next_tick
🔥4❤1👍1🤝1
Почему в JavaScript мире нет культуры использования структур данных?
Их неправильно учат, точнее, правильно, но этого мало, такие знания полезны только на задачках с литкода и на собесах, а вот на практике люди сразу забывают про структуры данных и реальный код только: [], {}, Set, Map
Я поискал, как их обычно преподают
- как устроены внутри и как работают
- как оптимизировать: CPU, memory
- как оценить вычислительную сложность
- как оптимизировать под V8, GC
Но нет даже попыток показать:
- как применить на реальной задаче
- как они делают код понятнее
- как они помогают экономить на AI
1 августа покажу примеры на реальном коде для бизнес-логики, системного программирования, бекенда, фронтенда: https://youtube.com/live/qNAjrZ07un0
Их неправильно учат, точнее, правильно, но этого мало, такие знания полезны только на задачках с литкода и на собесах, а вот на практике люди сразу забывают про структуры данных и реальный код только: [], {}, Set, Map
Я поискал, как их обычно преподают
- как устроены внутри и как работают
- как оптимизировать: CPU, memory
- как оценить вычислительную сложность
- как оптимизировать под V8, GC
Но нет даже попыток показать:
- как применить на реальной задаче
- как они делают код понятнее
- как они помогают экономить на AI
1 августа покажу примеры на реальном коде для бизнес-логики, системного программирования, бекенда, фронтенда: https://youtube.com/live/qNAjrZ07un0
🔥23❤3👍3💯1