Уря! Выпуск про .net уже доступен для просмотра. И все равно мы там в середине скатились в обсуждение clean code, solid и потом заели все агентами 🙂 https://www.youtube.com/watch?v=7uj6IxxW13w
Альтернативные ссылки: Аудио | vk
Альтернативные ссылки: Аудио | vk
YouTube
Как Microsoft развивает .NET: производительность, Developer Experience и AI / Сергей Тепляков #88
🔹 Присоединяйся к курсу «ИИ для разработчиков» https://ru.hexlet.io/programs/ai-for-developers?utm_source=youtube
Кажется, впервые за последние двадцать лет разработчики всерьёз перестали понимать, что будет ценным через пять лет. Языки программирования…
Кажется, впервые за последние двадцать лет разработчики всерьёз перестали понимать, что будет ценным через пять лет. Языки программирования…
🔥44❤10👍10😍2🤔1
Впечатления от конфы и первого выступления
Хайлоад прошел, я сижу в коворкинге и восстанавливаю силы для завтрашнего старта на тимлиде. Поделюсь наблюдениями и расскажу про ближайшие планы. За пять лет, что я не был на конфах, много чего поменялось. Например если тогда везде был фудтех, то сейчас сплошной финтех и экосистемы.
На стендах победил формат когда тебя водят по станциям и ты выполняешь разные задания, а потом участвуешь в общем розыгрыше. Довольно прикольно и везде очереди. Я смог пройти один стенд до конца и выиграл бутылку для воды, которую через 10 минут где-то потерял.
Что касается людей, то какое то эпическое количество технических директоров и технических руководителей. Из удивительного для меня, все какие-то очень высокие. Я привык быть одним из самых высоких в округе, а тут как-то аж не по себе было среди великанов.
На этом хайлоаде впервые запустили стрим по ИИ. Народу туда ломилось так много, что пройти внутрь было невозможно, я в итоге ни одного доклада так и не послушал. Да и в целом не то чтобы я их слушал, потому что без остановки общался в кулуарах. Ребята из ПК, старые друзья, знакомые которых не видел лет по 10-15, бывшие студенты хекслета и мои подписчики тоже были тут.
Во второй день конфы в 10 утра был и мой мастер-класс на два часа, который во многом являлся компиляцией из курса "ии для разработчиков". Честно говоря я довольно сильно переживал из-за того, что до сих пор не умею и не совсем понимаю как показывать людям агентный кодинг так чтобы это было интересно, но вроде кто подходил после, говорили что им понравилось. Кстати когда я спросил, сколько людей в аудитории полностью пишет код агентами, руки подняло процентов 20-30%.
Сейчас я весь наполнен знаниями о том кто чем живет, как внедряется ии в компаниях, что по людя, что по бизнесу, куда мы все идем и как с этим жить. Про это пока писать не буду, впереди еще пару конференций плюс большой воркшоп.
Собственно, 4-5 июля в Москве будет аж двухдневный воркшоп с утра до вечера, где участники под моим присмотром и с моими рекомендациями будут создавать проект через агентов, прокачивая себя в том как это делать максимально эффективно. Билеты на это добро в открытом доступе с возможностью платить от компании. Если что заходите на огонек.
p.s. придется еще недельку потерпеть, пока все это не закончится 🙂
Telegram | YouTube | AI Клуб
Хайлоад прошел, я сижу в коворкинге и восстанавливаю силы для завтрашнего старта на тимлиде. Поделюсь наблюдениями и расскажу про ближайшие планы. За пять лет, что я не был на конфах, много чего поменялось. Например если тогда везде был фудтех, то сейчас сплошной финтех и экосистемы.
На стендах победил формат когда тебя водят по станциям и ты выполняешь разные задания, а потом участвуешь в общем розыгрыше. Довольно прикольно и везде очереди. Я смог пройти один стенд до конца и выиграл бутылку для воды, которую через 10 минут где-то потерял.
Что касается людей, то какое то эпическое количество технических директоров и технических руководителей. Из удивительного для меня, все какие-то очень высокие. Я привык быть одним из самых высоких в округе, а тут как-то аж не по себе было среди великанов.
На этом хайлоаде впервые запустили стрим по ИИ. Народу туда ломилось так много, что пройти внутрь было невозможно, я в итоге ни одного доклада так и не послушал. Да и в целом не то чтобы я их слушал, потому что без остановки общался в кулуарах. Ребята из ПК, старые друзья, знакомые которых не видел лет по 10-15, бывшие студенты хекслета и мои подписчики тоже были тут.
Во второй день конфы в 10 утра был и мой мастер-класс на два часа, который во многом являлся компиляцией из курса "ии для разработчиков". Честно говоря я довольно сильно переживал из-за того, что до сих пор не умею и не совсем понимаю как показывать людям агентный кодинг так чтобы это было интересно, но вроде кто подходил после, говорили что им понравилось. Кстати когда я спросил, сколько людей в аудитории полностью пишет код агентами, руки подняло процентов 20-30%.
Сейчас я весь наполнен знаниями о том кто чем живет, как внедряется ии в компаниях, что по людя, что по бизнесу, куда мы все идем и как с этим жить. Про это пока писать не буду, впереди еще пару конференций плюс большой воркшоп.
Собственно, 4-5 июля в Москве будет аж двухдневный воркшоп с утра до вечера, где участники под моим присмотром и с моими рекомендациями будут создавать проект через агентов, прокачивая себя в том как это делать максимально эффективно. Билеты на это добро в открытом доступе с возможностью платить от компании. Если что заходите на огонек.
p.s. придется еще недельку потерпеть, пока все это не закончится 🙂
Telegram | YouTube | AI Клуб
1🔥37👍15❤7👎3😁2🤔1💩1👨💻1👀1
T-shaped снова в моде?
Подняли тут вопрос, о том что мы снова движемся от специализации в T-shaped специалистов. Компании планируют сокращать персонал и одновременно с тем надеятся на усиление текущих специалистов за счет ИИ. В некоторых случаях это потребует замены текущих команд или как минимум отдельных людей, на агентно-ориентированных.
В обиход входит слово tiny teams. По представлениям сбера (это их инициатива), это компактные команды в несколько человек с большой степенью автономности находящиеся внутри ai sdlc, где все процессы изменены, где все знания доступны агентам и так далее. В общем ai native организации, вместо (зачеркни ненужное) бирюзовых, agile и других слов.
Пару мыслей про это от меня и других ребят, с которыми мы кулуарно общались. Во-первых сама тенденция возврата к фулстек режиму, во многом определяется не тем что у нас появился ИИ, а тем что идет общий экономический спад и компании сжимаются. А в таких случаях обязанности перераспределяются среди оставшихся. И наоборот, когда все активно развивается, происходит дробление обязанностей так как людей становится все больше и процессы становятся все сложнее.
Сейчас же ИИ действительно позволяет увеличить производительность, что само по себе приводит к укрупнению зон ответственности, но это явление временное. Когда агенты станут такой же обыденностью как персональные компьютеры (представьте разницу между теми у кого они были и у кого их не было в 80 годы), то для увеличения производительности труда снова придется дробить ответственности и брать больше людей.
Во-вторых, есть серьезные опасения, что сильных спецов в принципе всегда было мало, а тут мы как будто бы хотим лучших их лучших. Откуда их брать? И насколько людей действительно хватит? Мы не можем бесконечно масштабироваться, ИИ очень быстро уперся в ограничения кожанных. А комфотная работа для многих превратилась в изматывающий марафон на скорости стометровки.
Через 5 лет мы будем оглядываться назад и говорить о том, как все было очевидно, вот это работает, а вот это бы не заработало никогда. Как говорится, знал бы прикуп жил бы в Омске
Telegram | YouTube | AI Клуб
Подняли тут вопрос, о том что мы снова движемся от специализации в T-shaped специалистов. Компании планируют сокращать персонал и одновременно с тем надеятся на усиление текущих специалистов за счет ИИ. В некоторых случаях это потребует замены текущих команд или как минимум отдельных людей, на агентно-ориентированных.
В обиход входит слово tiny teams. По представлениям сбера (это их инициатива), это компактные команды в несколько человек с большой степенью автономности находящиеся внутри ai sdlc, где все процессы изменены, где все знания доступны агентам и так далее. В общем ai native организации, вместо (зачеркни ненужное) бирюзовых, agile и других слов.
Пару мыслей про это от меня и других ребят, с которыми мы кулуарно общались. Во-первых сама тенденция возврата к фулстек режиму, во многом определяется не тем что у нас появился ИИ, а тем что идет общий экономический спад и компании сжимаются. А в таких случаях обязанности перераспределяются среди оставшихся. И наоборот, когда все активно развивается, происходит дробление обязанностей так как людей становится все больше и процессы становятся все сложнее.
Сейчас же ИИ действительно позволяет увеличить производительность, что само по себе приводит к укрупнению зон ответственности, но это явление временное. Когда агенты станут такой же обыденностью как персональные компьютеры (представьте разницу между теми у кого они были и у кого их не было в 80 годы), то для увеличения производительности труда снова придется дробить ответственности и брать больше людей.
Во-вторых, есть серьезные опасения, что сильных спецов в принципе всегда было мало, а тут мы как будто бы хотим лучших их лучших. Откуда их брать? И насколько людей действительно хватит? Мы не можем бесконечно масштабироваться, ИИ очень быстро уперся в ограничения кожанных. А комфотная работа для многих превратилась в изматывающий марафон на скорости стометровки.
Через 5 лет мы будем оглядываться назад и говорить о том, как все было очевидно, вот это работает, а вот это бы не заработало никогда. Как говорится, знал бы прикуп жил бы в Омске
Telegram | YouTube | AI Клуб
Telegram
Хекслет
Программы обучения - https://ru.hexlet.io/courses
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
1👍74❤26🤔9🔥5💯4👎2👀1
Придумал термин "Преждевременная спецификация", когда агенту сразу говорят как нужно решить задачу с техническими деталями, вместо того, чтобы исследовать, собирать контекст и задавать открытые вопросы в духе "Как обычно решают подобную задачу?", "Какие есть лучшие практики?"
p.s. Заканчиваются две сверхнасыщенные недели из-за которых я не записывал видео и почти ничего не писал. Скоро войду в нормальный режим и буду выдавать вкусностей, очень уж много всего накопилось
Telegram | YouTube | AI Клуб
p.s. Заканчиваются две сверхнасыщенные недели из-за которых я не записывал видео и почти ничего не писал. Скоро войду в нормальный режим и буду выдавать вкусностей, очень уж много всего накопилось
Telegram | YouTube | AI Клуб
Telegram
Хекслет
Программы обучения - https://ru.hexlet.io/courses
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
❤73👍43🔥19😁3💯3🤔1🤡1👀1
Архитектурные практики
Прошло чуть больше полугода, как я перестал писать код руками, за редкими исключениями. Но несмотря на это, я просматриваю его глазами. Где-то внимательнее, где то по диагонали, в зависимости от степени влияния на структуру кода и логику. И каждый раз спрашиваю себя, а какими принципами я руководствуюсь?
Пишу этот пост, чтобы порефлексировать с одной стороны и заложить на будущее темы, которые буду разбирать. ИИ это хорошо для кодинга, но инженерия никуда не девается.
Все происходит над подсознательном уровне, я работаю в давно знакомом мне проекте и хотя бы примерно понимаю что и где происходит, задачи которые я делаю тоже понятны, все таки и в разработке давно и сам проект не гугл. Но он достаточно большой и сложный, чтобы можно было просто забить на архитектуру и делать как придется.
Наверное главное, за чем я слежу и что прорабатываю глубоко это онтология проекта: сущности, свяжи между ними и границы ответственности. Причем речь не идет о том, чтобы попытаться полностью повторить реальный мир, наоборот, идет попытка создать систему, с одной стороны, простой, с другой нужно учесть все необходимые требования от нормализации до поддержки историчности при изменениях (там где это надо). Связь m2m сложнее o2m, это будет проявляться и в запросах и в коде. Можно ли не усложнять? А если мы работаем с иерархией сущностей, надо ли делать одну таблицу с полями сразу для всего, но чтобы каждый тип использовал свое подмножество или нам надо создавать разные таблицы? А как потом их объединять? Денормализация или внешний поиск? И обязательно инварианты. Какие состояния в системе вообще допустимы? Что не должно происходить никогда? Какие связи обязательны, какие опциональны.
Здесь мы имеем дело и со смыслами и с технической имплементацией на уровне хранилища и, в моем случае, ORM. Можно ли в этом случае довериться ии? Обсуждать, спрашивать совет и просить рассказать плюсы и минусы разных вариантов это прямо хорошо, но принимать решение точно надо самому, потому что слишком дорого потом придется платить за неудачно принятые решения. А они точно будут.
Примерно такая же история с api. Если внешние ручки спроектированы плохо, потом мы обалдеем тащить это легаси через года и пространство.
Между первым (моделями) и вторым (api) собственно и лежит большая часть кода в типовых веб-приложениях. Да ее пишет ИИ, но на базе заложенной архитектуры. Причем она достаточно стандартна. У нас есть слой сервисов, где выполняются бизнес-операции и проверяются инварианты. Рядом находится слой авторизации и события. К этому примыкает инфраструктурный слой с асинхронными джобами, очередями, мидлварами и тому подобным.
Я отдельно выношу обработчики http, dto и валидациями данных запроса и ответа. Все это вообще не надо писать самостоятельно, сейчас, когда легко доступен design-first, лучше пользоваться генераторами типа openapi-generator, которые создают все автоматом на базе openapi. Все что остается, это вписать в нужные места вызовы своих сервисов и правильно сформировать ответ. Даже если обходиться без генерации, ии отлично справится опираясь на существующий код, если он написан нормально.
Отдельный большой блок связан с микросервисной архитектурой, но я пишу про нее редко, потому что живу в монолите (хотя и с кучей сервисов, асинхронных джоб и обвязок вокруг). Оставляю эту тему другим блогерам 🙂
Ну и фронтенд, с ним ситуация явно проще, особенно если использовать готовые библиотеки компонентов и сгенерированные sdk для api. Да, во фронте есть свои заморочки связанные с безопасностью, отсутствием коннекта, локальным стейтом, ошибками, идемпотентностью и другими интересными темами. И конечно без понимания базы, сделать что-то серьезное будет сложно.
Все? Нет конечно, самое интересное начинается когда надо думать об обратной совместимости, следить за транзакционными границами, идемпотентностью и конкурентностью. И тесты, которые ии по дефолту пишет плохо. Вот это все не будет происходить само по себе и хорошо бы знать, как оно устроено под капотом.
Что еще упустил?
Telegram | YouTube | AI Клуб
Прошло чуть больше полугода, как я перестал писать код руками, за редкими исключениями. Но несмотря на это, я просматриваю его глазами. Где-то внимательнее, где то по диагонали, в зависимости от степени влияния на структуру кода и логику. И каждый раз спрашиваю себя, а какими принципами я руководствуюсь?
Пишу этот пост, чтобы порефлексировать с одной стороны и заложить на будущее темы, которые буду разбирать. ИИ это хорошо для кодинга, но инженерия никуда не девается.
Все происходит над подсознательном уровне, я работаю в давно знакомом мне проекте и хотя бы примерно понимаю что и где происходит, задачи которые я делаю тоже понятны, все таки и в разработке давно и сам проект не гугл. Но он достаточно большой и сложный, чтобы можно было просто забить на архитектуру и делать как придется.
Наверное главное, за чем я слежу и что прорабатываю глубоко это онтология проекта: сущности, свяжи между ними и границы ответственности. Причем речь не идет о том, чтобы попытаться полностью повторить реальный мир, наоборот, идет попытка создать систему, с одной стороны, простой, с другой нужно учесть все необходимые требования от нормализации до поддержки историчности при изменениях (там где это надо). Связь m2m сложнее o2m, это будет проявляться и в запросах и в коде. Можно ли не усложнять? А если мы работаем с иерархией сущностей, надо ли делать одну таблицу с полями сразу для всего, но чтобы каждый тип использовал свое подмножество или нам надо создавать разные таблицы? А как потом их объединять? Денормализация или внешний поиск? И обязательно инварианты. Какие состояния в системе вообще допустимы? Что не должно происходить никогда? Какие связи обязательны, какие опциональны.
Здесь мы имеем дело и со смыслами и с технической имплементацией на уровне хранилища и, в моем случае, ORM. Можно ли в этом случае довериться ии? Обсуждать, спрашивать совет и просить рассказать плюсы и минусы разных вариантов это прямо хорошо, но принимать решение точно надо самому, потому что слишком дорого потом придется платить за неудачно принятые решения. А они точно будут.
Примерно такая же история с api. Если внешние ручки спроектированы плохо, потом мы обалдеем тащить это легаси через года и пространство.
Между первым (моделями) и вторым (api) собственно и лежит большая часть кода в типовых веб-приложениях. Да ее пишет ИИ, но на базе заложенной архитектуры. Причем она достаточно стандартна. У нас есть слой сервисов, где выполняются бизнес-операции и проверяются инварианты. Рядом находится слой авторизации и события. К этому примыкает инфраструктурный слой с асинхронными джобами, очередями, мидлварами и тому подобным.
Я отдельно выношу обработчики http, dto и валидациями данных запроса и ответа. Все это вообще не надо писать самостоятельно, сейчас, когда легко доступен design-first, лучше пользоваться генераторами типа openapi-generator, которые создают все автоматом на базе openapi. Все что остается, это вписать в нужные места вызовы своих сервисов и правильно сформировать ответ. Даже если обходиться без генерации, ии отлично справится опираясь на существующий код, если он написан нормально.
Отдельный большой блок связан с микросервисной архитектурой, но я пишу про нее редко, потому что живу в монолите (хотя и с кучей сервисов, асинхронных джоб и обвязок вокруг). Оставляю эту тему другим блогерам 🙂
Ну и фронтенд, с ним ситуация явно проще, особенно если использовать готовые библиотеки компонентов и сгенерированные sdk для api. Да, во фронте есть свои заморочки связанные с безопасностью, отсутствием коннекта, локальным стейтом, ошибками, идемпотентностью и другими интересными темами. И конечно без понимания базы, сделать что-то серьезное будет сложно.
Все? Нет конечно, самое интересное начинается когда надо думать об обратной совместимости, следить за транзакционными границами, идемпотентностью и конкурентностью. И тесты, которые ии по дефолту пишет плохо. Вот это все не будет происходить само по себе и хорошо бы знать, как оно устроено под капотом.
Что еще упустил?
Telegram | YouTube | AI Клуб
Telegram
Хекслет
Программы обучения - https://ru.hexlet.io/courses
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
👍48❤17🔥4🤔3👎1🏆1👀1
Фух, смог в промежутках между поездками и выступлениями записать видео: youtube.com/watch?v=6w6NstwWb1Y Я знаю вы уже соскучились 🙂 Забирайте и наслаждайтесь
Альтернативные ссылки: Аудио | vk
Альтернативные ссылки: Аудио | vk
YouTube
Как ИИ меняет разработку в 2026: главные инсайды с крупнейших IT-конференций / Кирилл Мокевнин
🔹 Присоединяйся к курсу «ИИ для разработчиков» https://ru.hexlet.io/programs/ai-for-developers?utm_source=youtube
За последние недели я выступил на нескольких крупнейших IT-конференциях, провёл воркшопы, пообщался с инженерами, тимлидами и руководителями…
За последние недели я выступил на нескольких крупнейших IT-конференциях, провёл воркшопы, пообщался с инженерами, тимлидами и руководителями…
❤40👍19🔥11🤔2😱1👀1
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁40😭9🌚8👍3❤1👎1👏1😢1🖕1😎1
Отставить гусары! Я тестирую кнопку "direct messages" (чтобы туда писали по коммерческим предложениям). В телеге вообще столько всего надобавляли, надо посмотреть и потыкать (а вы блин палите и страшно что то нажимать)
37😁75🤣31🎉4❤2🤮2👌2
Please open Telegram to view this post
VIEW IN TELEGRAM
5😁42👍13
Иммутабельная денормализация
Изучение баз данных всегда сопровождается понятием нормализации, а конкретно первыми тремя формами, которые задают нам ограничения, помогающие правильно разложить все по таблицам. И это действительно база, без которой нормально работать не получится. Но есть, как обычно, нюансы.
В реальных проектах выясняется, что нормализованные данные сложно соединять и выбирать. При глубоком уровне зависимостей, чтобы добраться до внешней сущности, нужно либо соединять 5 таблиц, либо делать 5 запросов. Пример из Хекслета. У нас есть программа обучения, которая состоит из модулей, в которые входят темы которые состоят из уроков, которые состоят из юнитов (теория, практика, тесты). На это все накручено много логики по прогрессу и отображению. В такой структуре, вопросы типа "какой урок следующий по порядку?" заставляют поломать голову.
В таких ситуациях мы начинаем денормализацию данных. В основном она сводится к добавлению внешних ключей на косвенно связанные сущности, например, урок связан с программой обучения через модуль. Здесь мы добавляем ключ на программу прямо из урока, что позволяет выполнять запросы на уроки одной программы без необходимости соединять таблицы.
В принципе это довольно базовая концепция с которой знакомы большинство разработчиков, но дальше начинается самое интересное. Как только мы делаем денормализацию, то сразу упираемся в необходимость синхронизировать данные. Если поменялось в одном месте, надо не забыть поменять и в другом месте. Это цена денормализации и ее надо платить.
> Кстати есть такой концепт как синхронизирующие триггеры, которые вешают только для того, чтобы синхронизировать подобные данные. Когда-то я его активно использовал, но сейчас не стал бы
Но есть и альтернативный подход, который иногда работает лучше. Вместо того, чтобы синхронизировать денормализованные данные, мы можем пересмотреть саму систему и сделать данные иммутабельными (неизменяемыми), чтобы их не нужно было синхронизировать. Например в том же примере с уроками, мы сделали так, что урок принадлежит одной программе и не может перемещаться между программами. А это значит, что мы можем записать в урок все внешние ключи, которые никогда не поменяются. В таком случае цена денормализации это занятое место ключами, чем обычно можно пренебречь.
А что касается бизнес-логики? Да, такой подход работает не всегда, но, как показала практика, его можно использовать намного чаще чем кажется. Например в нашем случае это даже наоборот хорошо, иначе получается ситуация, что при переносе урока нужно переносить прогресс, что значительно усложняет логику и создает странное впечатление, когда в середине программы вдруг появляются пройденные уроки. При этом сама процедура довольно редкая, поэтому если кому-то придется пройти два раза один и тот же урок (перенос в нашем случае это копирование), то ничего страшного не случается.
Но есть места где без синхронизации данных не обойтись никак. В основном это касается статусов, они могут меняться и за ними нужно следить.
p.s. Вы денормализуете данные? Для каких задач?
Telegram | YouTube | AI Клуб
Изучение баз данных всегда сопровождается понятием нормализации, а конкретно первыми тремя формами, которые задают нам ограничения, помогающие правильно разложить все по таблицам. И это действительно база, без которой нормально работать не получится. Но есть, как обычно, нюансы.
В реальных проектах выясняется, что нормализованные данные сложно соединять и выбирать. При глубоком уровне зависимостей, чтобы добраться до внешней сущности, нужно либо соединять 5 таблиц, либо делать 5 запросов. Пример из Хекслета. У нас есть программа обучения, которая состоит из модулей, в которые входят темы которые состоят из уроков, которые состоят из юнитов (теория, практика, тесты). На это все накручено много логики по прогрессу и отображению. В такой структуре, вопросы типа "какой урок следующий по порядку?" заставляют поломать голову.
В таких ситуациях мы начинаем денормализацию данных. В основном она сводится к добавлению внешних ключей на косвенно связанные сущности, например, урок связан с программой обучения через модуль. Здесь мы добавляем ключ на программу прямо из урока, что позволяет выполнять запросы на уроки одной программы без необходимости соединять таблицы.
В принципе это довольно базовая концепция с которой знакомы большинство разработчиков, но дальше начинается самое интересное. Как только мы делаем денормализацию, то сразу упираемся в необходимость синхронизировать данные. Если поменялось в одном месте, надо не забыть поменять и в другом месте. Это цена денормализации и ее надо платить.
> Кстати есть такой концепт как синхронизирующие триггеры, которые вешают только для того, чтобы синхронизировать подобные данные. Когда-то я его активно использовал, но сейчас не стал бы
Но есть и альтернативный подход, который иногда работает лучше. Вместо того, чтобы синхронизировать денормализованные данные, мы можем пересмотреть саму систему и сделать данные иммутабельными (неизменяемыми), чтобы их не нужно было синхронизировать. Например в том же примере с уроками, мы сделали так, что урок принадлежит одной программе и не может перемещаться между программами. А это значит, что мы можем записать в урок все внешние ключи, которые никогда не поменяются. В таком случае цена денормализации это занятое место ключами, чем обычно можно пренебречь.
А что касается бизнес-логики? Да, такой подход работает не всегда, но, как показала практика, его можно использовать намного чаще чем кажется. Например в нашем случае это даже наоборот хорошо, иначе получается ситуация, что при переносе урока нужно переносить прогресс, что значительно усложняет логику и создает странное впечатление, когда в середине программы вдруг появляются пройденные уроки. При этом сама процедура довольно редкая, поэтому если кому-то придется пройти два раза один и тот же урок (перенос в нашем случае это копирование), то ничего страшного не случается.
Но есть места где без синхронизации данных не обойтись никак. В основном это касается статусов, они могут меняться и за ними нужно следить.
p.s. Вы денормализуете данные? Для каких задач?
Telegram | YouTube | AI Клуб
Telegram
Хекслет
Программы обучения - https://ru.hexlet.io/courses
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
👍30❤14😐4🔥3👏1🤪1
Новый выпуск подкаста про Agile, Scrum и ИИ трансформацию уже доступен https://youtu.be/FhthTCoR3uw?is=X5GCG6XrrFds65ws В этот раз с Асхатом Уразбаевым мы вспоминаем как это было и куда пришло. Взлеты и падения, культы карго и трансформации в компаниях. А что в конце? Дейли не нужен, вот такие пироги
Telegram | Аудио | vk
Telegram | Аудио | vk
YouTube
Асхат Уразбаев о взлёте и падении Agile: почему Scrum изменил индустрию и что происходит сейчас #89
🔹 Присоединяйся к курсу «ИИ для разработчиков» https://ru.hexlet.io/programs/ai-for-developers?utm_source=youtube
В этом выпуске мы поговорили с Асхатом Уразбаевым — одним из самых известных Agile-консультантов в России, основателем ScrumTrek и человеком…
В этом выпуске мы поговорили с Асхатом Уразбаевым — одним из самых известных Agile-консультантов в России, основателем ScrumTrek и человеком…
1🔥24👍11❤5
Программирование с явно выделенным состоянием
Одна из моих любимых тем, про которую не устаю говорить. В модели данных часто бывает ситуация, когда состояние выражено не прямым образом, а косвенно. Буквально вчера я реализовывал кастомные тарифы под конкретных пользователей. Отличие такого тарифа от обычного сводится к тому, заполнено ли поле user_id в тарифе или нет. Если не заполнено, то значит это общий тариф, если заполнено, значит под конкретного пользователя и другие его не могут видеть.
Это вполне рабочая схема и она встречается повсеместно, особенно в связке с датами типа deleted_at, но она обладает одним очень важным недостатком. Понимание того, что эта запись находится в особом состояние вычисляется через косвенный признак или, что хуже, через набор признаков. Об этом надо думать и каждый раз вспоминать и выуживать эту информацию.
Сейчас, в эру агентного программирования, это стало еще важнее. Агент может догадаться до правила, но ему нужно на это время и отдельный анализ. Можно конечно написать об этом в правилах, но зачем, когда можно просто поправить модель данных? Все что требуется, это введение текстового поля со статусом, которое явным образом скажет о происходящем с этой записью.
В общем не полагайтесь на то как заполнены поля, вводите нужные статусы, которые явно будут говорить о том что происходит. Заодно это дает более удобную аналитику и выборки
Telegram | YouTube | AI Клуб
Одна из моих любимых тем, про которую не устаю говорить. В модели данных часто бывает ситуация, когда состояние выражено не прямым образом, а косвенно. Буквально вчера я реализовывал кастомные тарифы под конкретных пользователей. Отличие такого тарифа от обычного сводится к тому, заполнено ли поле user_id в тарифе или нет. Если не заполнено, то значит это общий тариф, если заполнено, значит под конкретного пользователя и другие его не могут видеть.
Это вполне рабочая схема и она встречается повсеместно, особенно в связке с датами типа deleted_at, но она обладает одним очень важным недостатком. Понимание того, что эта запись находится в особом состояние вычисляется через косвенный признак или, что хуже, через набор признаков. Об этом надо думать и каждый раз вспоминать и выуживать эту информацию.
Сейчас, в эру агентного программирования, это стало еще важнее. Агент может догадаться до правила, но ему нужно на это время и отдельный анализ. Можно конечно написать об этом в правилах, но зачем, когда можно просто поправить модель данных? Все что требуется, это введение текстового поля со статусом, которое явным образом скажет о происходящем с этой записью.
В общем не полагайтесь на то как заполнены поля, вводите нужные статусы, которые явно будут говорить о том что происходит. Заодно это дает более удобную аналитику и выборки
Telegram | YouTube | AI Клуб
Telegram
Хекслет
Программы обучения - https://ru.hexlet.io/courses
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
Сообщество @hexletcommunity AI Клуб @hexletclub
Поддержка @hexlet_help_bot
👍47❤15🔥6💯2👎1🤔1👨💻1👀1