Хочется почитать какую-нибудь стоящую книгу по разработке или около-разработческой тематике.
Что можете порекомендовать из относительно новых?
Что можете порекомендовать из относительно новых?
EventStorming можно использовать не только для моделирования и исследования систем, но и для планирования (в немного упрощеной форме). Отличное средство от хаоса в голове, особенно в сложных запутаных проектах.
Youtube | ВК
Youtube | ВК
YouTube
Как перестать тонуть в задачах и увидеть картину целиком
Покажу, как через EventStorming можно не только исследовать предметку, но и планировать проекты. Разгружаем голову, видим роли, артефакты и последовательность шагов — всё в одном месте.
🎯 Телеграм-канал с кучей полезной информации: https://t.iss.one/stringconcat…
🎯 Телеграм-канал с кучей полезной информации: https://t.iss.one/stringconcat…
🔥16
Евгений
Немножечко откровений от Капитана Очевидность. Как вы наверное в курсе, существует 2 способа задания идентификаторов. - Естественные идентификаторы, которые натурально идентифицируют объект. Н-р СНИЛС, SSN, номер паспорта. - Суррогатные идентификаторы…
Хотите кек? Попалась недавно система, где первичный ключ — это персональные данные (не буду говорить какие, потому что вендор себя опознает). Ну а чё, гениально же! Зато сразу понятно, кто есть кто — никакой анонимности, никаких лишних UUID. Правда, теперь все интеграции должны соблюдать законы о ПДн, проходить аудиты и жить по регламентам. Зато — очень удобно. А главное — персональные данные ведь никогда не меняются, да?
😁45🤣8🔥5❤🔥1❤1
Лайтовый видос про набор паттернов, который мы используем для самообразования и получения максимального выхлопа. Несмотря на кажущуюся простоту и очевидность, бустануться можно очень неплохо. Приятного просмотра!
YouTube | ВК
YouTube | ВК
YouTube
8 паттернов работы с пет-проектами для МАКСИМАЛЬНОЙ ПРОКАЧКИ
Пет-проект - это не игрушка для джуна, а мощное средство для прокачки своей квалификации. В видео разбираемся, какие подходы могут дать максимальный эффект, сэкономят ваше время и вернут страсть к работе
🎯 Телеграм-канал с кучей полезной информации: htt…
🎯 Телеграм-канал с кучей полезной информации: htt…
🔥20👍5
Что тут происходит?
Поскольку количество подписчиков существенно увеличилось, то необходимо прояснить.
Мы — Женя и Серёжа. Инженеры и идейные задроты. В разработке на двоих — уже почти 30 лет.
Начинали, когда никакой айтишечки толком и не было, а разраб получал максимум двадцаху, и то если работу найдет. С тех пор мы прошли весь путь — от зелёных разработчиков до руководителей и архитекторов. Жрали г… (ну вы поняли), падали, вставали и снова шли в прод.
👨💻 Серёжа (слева) — Staff Software Engineer в Jago Bank. Руководит разработкой Core Banking. Более 13 лет в индустрии, включая ThoughtWorks, где код — это не просто текст, а философия. Руководил распределёнными командами инженеров, запускал банковские приложения в Сингапуре, переводил монолиты в микросервисы и спасал проекты когда остальные уже опустили руки. Развивал инженерные практики до уровня Elite по DORA-метрикам.
🤖 Женя (справа) — технический директор в Satori. Занимается проектированием банковского софта, а так же руководит разработкой AI-агентов в области интеграции систем. Делал карточный процессинг в Яндекс.Кассе и Банке 131, выводил в прод систему мониторинга инсайдерской торговли в Behavox (UK), писал алгоритмы диагностики заболеваний в AbeHealth, делал телеком и автопроекты, включая электромобили «АТОМ».
Спикер ArchDays, КРАБР и Podlodka, научный редактор перевода книги Learning Domain-Driven Design.
Мы столько раз наступали на грабли, что уже различаем их по звуку удара об лоб.
Со временем мы заметили одну вещь: почти все ошибки повторяются из раза в раз.
Сначала это был наш пет-проект, способ собрать свой опыт и не сойти с ума.
Но оказалось, что всё это нужно не только нам.
Так появился наш курс «Разработка без боли и сожалений»,
где мы рассказываем, как:
- Собирать требования и исследовать предметку,
- Моделировать домен и писать тесты,
- Строить взаимодействие с внешним миром,
- Как всё это красиво натягивать на DDD и Чистую Архитектуру.
и многое другое
Здесь мы делимся практиками, которые помогают строить технологии и команды без выгорания и хаоса.
А этот канал — для тех, кто неравнодушен к своему делу. Если вы здесь, значит, вам важно делать хорошо, понимать, как и зачем всё устроено,и не мириться с «ну и так сойдёт», а мы вам стараемся по возможности помогать.
Спасибо, что вы с нами ❤️
Поскольку количество подписчиков существенно увеличилось, то необходимо прояснить.
Мы — Женя и Серёжа. Инженеры и идейные задроты. В разработке на двоих — уже почти 30 лет.
Начинали, когда никакой айтишечки толком и не было, а разраб получал максимум двадцаху, и то если работу найдет. С тех пор мы прошли весь путь — от зелёных разработчиков до руководителей и архитекторов. Жрали г… (ну вы поняли), падали, вставали и снова шли в прод.
👨💻 Серёжа (слева) — Staff Software Engineer в Jago Bank. Руководит разработкой Core Banking. Более 13 лет в индустрии, включая ThoughtWorks, где код — это не просто текст, а философия. Руководил распределёнными командами инженеров, запускал банковские приложения в Сингапуре, переводил монолиты в микросервисы и спасал проекты когда остальные уже опустили руки. Развивал инженерные практики до уровня Elite по DORA-метрикам.
🤖 Женя (справа) — технический директор в Satori. Занимается проектированием банковского софта, а так же руководит разработкой AI-агентов в области интеграции систем. Делал карточный процессинг в Яндекс.Кассе и Банке 131, выводил в прод систему мониторинга инсайдерской торговли в Behavox (UK), писал алгоритмы диагностики заболеваний в AbeHealth, делал телеком и автопроекты, включая электромобили «АТОМ».
Спикер ArchDays, КРАБР и Podlodka, научный редактор перевода книги Learning Domain-Driven Design.
Мы столько раз наступали на грабли, что уже различаем их по звуку удара об лоб.
Со временем мы заметили одну вещь: почти все ошибки повторяются из раза в раз.
Сначала это был наш пет-проект, способ собрать свой опыт и не сойти с ума.
Но оказалось, что всё это нужно не только нам.
Так появился наш курс «Разработка без боли и сожалений»,
где мы рассказываем, как:
- Собирать требования и исследовать предметку,
- Моделировать домен и писать тесты,
- Строить взаимодействие с внешним миром,
- Как всё это красиво натягивать на DDD и Чистую Архитектуру.
и многое другое
Здесь мы делимся практиками, которые помогают строить технологии и команды без выгорания и хаоса.
А этот канал — для тех, кто неравнодушен к своему делу. Если вы здесь, значит, вам важно делать хорошо, понимать, как и зачем всё устроено,и не мириться с «ну и так сойдёт», а мы вам стараемся по возможности помогать.
Спасибо, что вы с нами ❤️
🔥47❤35👍3🤝2
Недавно наткнулся на codecrafters.io — прикольный сервис, где можно с нуля реализовать всякие штуки вроде Redis, Git, SQLite и прочее непотребство.
По нашей классификации это пет-проекты класса «Минимализм» — когда ты не строишь продукт, а воссоздаёшь готовую технологию, чтобы понять, как она устроена внутри.
Каждое задание там — это разбор под капотом: сетевые протоколы, файловые форматы, системы хранения, парсеры и всё то, что обычно «просто работает».
Есть бесплатный тариф, так что можно попробовать без вложений.
Мы сами пока не юзали, но выглядит интересно
По нашей классификации это пет-проекты класса «Минимализм» — когда ты не строишь продукт, а воссоздаёшь готовую технологию, чтобы понять, как она устроена внутри.
Каждое задание там — это разбор под капотом: сетевые протоколы, файловые форматы, системы хранения, парсеры и всё то, что обычно «просто работает».
Есть бесплатный тариф, так что можно попробовать без вложений.
Мы сами пока не юзали, но выглядит интересно
CodeCrafters
The Software Pro's Best Kept Secret.
Real-world proficiency projects designed for experienced engineers. Develop software craftsmanship by recreating popular devtools from scratch.
👍21🔥7❤2
Forwarded from Artem Brannt
Я юзал с целью "освоить незнакомый язык на реальном проекте", мне понравилось. Из прикольного - все проекты делаются по baby steps (например, Redis начинается с задания "сделайте TCP-сервер, который отвечает PONG на PING на нужном порте), это сильно помогает постепенно въехать в новую технологию. Из не очень прикольного, но по-своему полезного - в заданиях обычно пишут, что делает, но практически не дают пояснений, как; если непонятно, приходится лезть в документацию, в другие решения, которые там же можно посмотреть, или спрашивать у ChatGPT). Бесплатно дают доступ к одному проекту, который меняется каждый месяц, плюс, когда они добавляют новый проект, у него есть период бета-тестирования, когда он тоже бесплатен.
🔥12👍1
Когда-то давно мне приспичило разобраться как работает Linux. Нашёл Linux From Scratch — проект, где ты буквально собираешь систему с нуля. Но это упоротый вариант.
В итоге я остановился на Arch Linux — почти как Gentoo, только без бесконечной пересборки мира.
Поднимал сети вручную, вкорячивал модули ядра, правил grub.cfg, шаманил с udev и драйверами.
Естественно, сейчас я уже всё это забыл и зову админа чтобы подключить сетевой кабель. Но тогда, когда я занимался прошивками и разрабатывал под Linux, это дало мне дикий буст к пониманию того, как система устроена изнутри. И вот это как раз пет-проект класса «Минимализм» — когда ты воссоздаёшь базовый слой, чтобы прочувствовать механику. Но есть опасность — после таких экспериментов у вас может прорасти свитер
В итоге я остановился на Arch Linux — почти как Gentoo, только без бесконечной пересборки мира.
Поднимал сети вручную, вкорячивал модули ядра, правил grub.cfg, шаманил с udev и драйверами.
Естественно, сейчас я уже всё это забыл и зову админа чтобы подключить сетевой кабель. Но тогда, когда я занимался прошивками и разрабатывал под Linux, это дало мне дикий буст к пониманию того, как система устроена изнутри. И вот это как раз пет-проект класса «Минимализм» — когда ты воссоздаёшь базовый слой, чтобы прочувствовать механику. Но есть опасность — после таких экспериментов у вас может прорасти свитер
🔥23
🔧 Немного закулисья нашей разработки
Редко удаётся рассказать — и тем более показать — детали рабочих процессов. Обычно всё покрыто коммерческой тайной. Но сегодня хочу приоткрыть занавес и поделиться тем, над чем мы работаем.
Интеграции — это огромный пласт работы между системами, несмотря на кажущуюся простоту. Постоянное перекладывание данных, развешивание JSON’ов и выпиливание XML’ей лобзиком. Мы пробовали автоматизировать это стандартными агентами, курсорами и другими универсальными инструментами. Фиксировали правила, добавляли ограничения — но идеального результата не получили.
И честно говоря, я не разделяю всеобщих восторгов по поводу ИИ-тулзов общего назначения: да, в части случаев они экономят время, но количество допилок напильником там порой слишком велико (в последнее время я прям таки заставляю себя ими пользоваться, чтобы понять ограничения). Иногда проще вручную запилить, нежели объяснять электронному болвану что от него требуется. А ещё есть важная проблема — многие из этих агентов отправляют данные непонятно куда, а далеко не каждая компания может позволить себе делиться внутренней информацией с внешними сервисами.
Поэтому мы делаем ставку на другое: узкоспециализированную систему, заточенную под конкретный фреймворк и конкретные задачи интеграции. Вот, даже лендос склепали.
Наш подход — максимально декомпозировать каждый шаг, а то что можно сделать обычными алгоритмами — сделать ими и не выпендриваться. Так можно выжать максимум даже из относительно слабых моделей, которые легко развернуть на своей инфраструктуре. Но чтобы заставить модель уверенно решать даже узкую задачу, приходится серьёзно повозиться: продумывать промпты, писать на них тесты и т.д.
В идеале мы хотим прийти к циклу обратной связи, где модель сама исправляет свои ошибки, а участие человека сводится к минимуму (хотя полностью это невозможно ввиду природы LLM).
Система у нас состоит из двух ключевых модулей:
1. Генератор кода
2. Фреймворк с четкой структурой, в который этот код встраивается
На вход подается описание желаемого выхлопа, а так же документация целевых систем. На выходе — код, который реализует желаемую интеграцию, встроенную в фреймворк.
Сейчас я работаю над промптами, тестирую разные подходы и собираю первые результаты. И — что приятно — кое-что уже начинает работать (по крайней мере мне так кажется).
В следующих постах расскажу подробнее, что получилось, какие грабли встретились, и как вы сможете применить эти идеи у себя.
Продолжение следует 👇
Редко удаётся рассказать — и тем более показать — детали рабочих процессов. Обычно всё покрыто коммерческой тайной. Но сегодня хочу приоткрыть занавес и поделиться тем, над чем мы работаем.
Интеграции — это огромный пласт работы между системами, несмотря на кажущуюся простоту. Постоянное перекладывание данных, развешивание JSON’ов и выпиливание XML’ей лобзиком. Мы пробовали автоматизировать это стандартными агентами, курсорами и другими универсальными инструментами. Фиксировали правила, добавляли ограничения — но идеального результата не получили.
И честно говоря, я не разделяю всеобщих восторгов по поводу ИИ-тулзов общего назначения: да, в части случаев они экономят время, но количество допилок напильником там порой слишком велико (в последнее время я прям таки заставляю себя ими пользоваться, чтобы понять ограничения). Иногда проще вручную запилить, нежели объяснять электронному болвану что от него требуется. А ещё есть важная проблема — многие из этих агентов отправляют данные непонятно куда, а далеко не каждая компания может позволить себе делиться внутренней информацией с внешними сервисами.
Поэтому мы делаем ставку на другое: узкоспециализированную систему, заточенную под конкретный фреймворк и конкретные задачи интеграции. Вот, даже лендос склепали.
Наш подход — максимально декомпозировать каждый шаг, а то что можно сделать обычными алгоритмами — сделать ими и не выпендриваться. Так можно выжать максимум даже из относительно слабых моделей, которые легко развернуть на своей инфраструктуре. Но чтобы заставить модель уверенно решать даже узкую задачу, приходится серьёзно повозиться: продумывать промпты, писать на них тесты и т.д.
В идеале мы хотим прийти к циклу обратной связи, где модель сама исправляет свои ошибки, а участие человека сводится к минимуму (хотя полностью это невозможно ввиду природы LLM).
Система у нас состоит из двух ключевых модулей:
1. Генератор кода
2. Фреймворк с четкой структурой, в который этот код встраивается
На вход подается описание желаемого выхлопа, а так же документация целевых систем. На выходе — код, который реализует желаемую интеграцию, встроенную в фреймворк.
Сейчас я работаю над промптами, тестирую разные подходы и собираю первые результаты. И — что приятно — кое-что уже начинает работать (по крайней мере мне так кажется).
В следующих постах расскажу подробнее, что получилось, какие грабли встретились, и как вы сможете применить эти идеи у себя.
Продолжение следует 👇
🔥29❤2👍1
Смотрел код — и заметил прекрасное. Зацените, как там проверяется время:
То есть просто отрезают миллисекунды в надежде, что тест «успеет» в ту же секунду. А если через миллисекунду тикнет новая? Ну да, можно же начать резать минуты… или часы…
Так и рождаются моргающие тесты, которые то проходят, то падают — чистое веселье.
Что с этим делать?
Нормальный путь — зафиксировать время через
Красоты мало, зато:
• время контролируется снаружи;
• тесты становятся предсказуемыми;
• и никто больше не бегает от внезапно наступившей секунды.
Если же душа просит простых и понятных решений, в JUnit можно тупо повторять тест несколько раз. Прокатило один раз — и ладно, галочка зелёная.
Ещё вариант: не сравнивать даты напрямую, а мерить
Ну и последний способ — попробовать замокать статический метод
P.S.: Если понадобятся дополнительные лайфхаки по созданию говнокода — зовите, всегда рад помочь.
event.createdAt.truncatedTo(ChronoUnit.SECONDS) shouldBe OffsetDateTime.now().truncatedTo(ChronoUnit.SECONDS)
То есть просто отрезают миллисекунды в надежде, что тест «успеет» в ту же секунду. А если через миллисекунду тикнет новая? Ну да, можно же начать резать минуты… или часы…
Так и рождаются моргающие тесты, которые то проходят, то падают — чистое веселье.
Что с этим делать?
Нормальный путь — зафиксировать время через
Clock.fixed() или Clock.offset() и передавать этот Clock внутрь всего, что генерирует OffsetDateTime.now(clock).Красоты мало, зато:
• время контролируется снаружи;
• тесты становятся предсказуемыми;
• и никто больше не бегает от внезапно наступившей секунды.
Если же душа просит простых и понятных решений, в JUnit можно тупо повторять тест несколько раз. Прокатило один раз — и ладно, галочка зелёная.
Ещё вариант: не сравнивать даты напрямую, а мерить
Duration.between(…) и проверять, что разница в пределах пары миллисекунд. А когда CI сервер начнет тормозить и тесты снова станут моргать — добавите еще пару секунд, делов то.Ну и последний способ — попробовать замокать статический метод
now(), если сможете конечно. P.S.: Если понадобятся дополнительные лайфхаки по созданию говнокода — зовите, всегда рад помочь.
😁28👌5👍1👾1