StringConcat - разработка без боли и сожалений – Telegram
StringConcat - разработка без боли и сожалений
3.44K subscribers
87 photos
9 videos
3 files
209 links
Полезный блог от разработчиков для разработчиков. Наш сайт: howto.stringconcat.ru
Download Telegram
Интересный материал от Ивана @emacsway_log о балансе между Prediction и Adaptation и о том, что маятник снова несется в сторону Prediction.

Что это вообще такое?
Prediction — проектирование заранее или наперед. Делаем то, что нужно будет в будущем. Любой агиле-коуч вам скажет, что это зло.
Adaptation — проектируем по мере возникновения потребности, адаптируемся к условиям, оттягиваем принятие решения на более поздний момент.

Во все времена в разработке был и тот и другой аспект, но в разных пропорциях. До недавнего времени лидерство было на стороне Adaptation, но кажется Prediction снова набирает обороты. В общем, будем посмотреть.

По нашим субъективным ощущениям, наибольший вклад в такое движение принесли легковесные техники как, например, Event Storming и т.д. Если раньше Prediction был дорогим, долгим и вгонял разработчиков в депрессию, то сейчас, благодаря таким инструментам можно получить годный результат за вполне адекватную цену.
👍11🔥1
Webinar Software architecture the hard parts. Нил Форд и Марк Ричардсон 9 февраля будут рассказывать о Granularity and coupling in microservices. Ну и собственно о своей новой книге.
Спешите зарегистрироваться!

Певая их книга Fundamentals of software architecture просто must read. Так что, я считаю доклад нужно слушать обязательно. Английский язык
🔥5👍2
Год только начался, а мы уже устали и подвыгорели.

О выгорании мы писали ещё в прошлом году.

А сегодня говорим о том, чего в прошлой статье не было: весёлых друзьях выгорания, мотивации, шагах к выходу. И о таблетках, конечно же. Как без таблеток.

Что ещё следует знать о выгорании

Читайте, пишите в комменты, спрашивайте, может быть чем-то сумеем помочь.
👍8🔥2
Forwarded from DDDevotion
Вышел новый техрадар thoughtworks.com/radar

Что приглянулось, чтоб подробнее поразбираться:
- транзакционная архитектура https://martinfowler.com/articles/patterns-legacy-displacement/transitional-architecture.html

- КУПИДон https://dannorth.net/2022/02/10/cupid-for-joyful-coding/

- Четыре ключевые метрики https://www.thoughtworks.com/radar/techniques?blipid=1298

- Сальса https://slsa.dev/

- https://www.testcontainers.org/

и многое другое.

Как вам эта версия радара? Что вы отметили для себя на будущее?
Участившиеся случаи нахождения дыр размером с ангар для дирижабля дает нам повод наконец-то задуматься о существующих процессах разработки. Как заведено в индустрии? Делаем фикс, даем как следует "настояться" ветке с ним, затем Его Величество Тимлид может быть смержит получившееся безобразие в свободное от заказа воды в офис время. Далее передаем на ручное тестрование в отдел QA, где фикс будет протестирован согласно плану в Q2 следующего года.

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

В первую очередь в голову приходит мысль об организации SSDLC и мысль вполне себе правильная и годная. Но только будет ли толк от всех ваших дастов, састов, аппсеков и прочих секурити-чемпионов, если банальный фикс у вас заезжает на прод целый месяц? Если же вы задумываетесь о том, как построить стабильный процесс с быстрой реализацией, деплоем и минимумом проблем, то в качестве начальной точки настоятельно рекомендуем ознакомиться с исследованием Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations.

Суть такова. Исследователи проанализировали работу большого количества команд (около 2000 компаний) и выявили статистически значимые организационные и технические факторы, которые влияют на скорость, стабильность и качество разработки и даже на скорость выгорания отдельного разраба. Чтобы вас заинтриговать - некоторые вещи, которые они обнаружили покажутся контринтуитивными и могут случайно сломать вашу картину мира. К примеру, только что начатый проект (который мы конечно же сделаем правильно) не обязательно разрабатывается быстрее и стабильнее чем старое пожухлое легаси, с которым никто не любит возиться. А если точнее — явной корреляции между новизной и скоростью нет.

Окончательные выводы исследователей довольно сильно пересекаются с нашим субъективным опытом, поэтому с нашей точки зрения исследование вполне себе заслуживает доверия. Не пожалейте времени на чтение, оно того однозначно стоит.
👍6😢2😁1
Работая с тактическими паттернами DDD, в очередной раз убеждаешься какой же этот ваш DDD "душный" в хорошем смысле слова. Вот буквально на днях пилили небольшой объект-значение, отражающий количество (при этом количество может быть дробным значением). И в процессе запилки возникли вопросы вида
- Какие могут быть максимальные и минимальные значения?
- Какая должна точность дробной части?
- Как округляется значение при выполнении арифметических операций?
- Какие вообще арифметические операции допустимы, с какими аргументами и в каких диапазонах?
- Как вести себя при переполнении?

И это довольно простой класс, ничего особенного. В обычном случае пишут что-то вроде fun calculate(float: count) и забивают, мы же уделяем столько внимания казалось бы такой незначительной чиселке. И в итоге может показаться, что все это не нужно. Да и вообще тратим больше времени - нужно подумать, написать тесты, etc. Но это не совсем так, ведь мы получаем:
- Снижение когнитивной нагрузки. Мы работаем над небольшим независимым кусочком кода и за счет этого яснее видим граничные случаи.
- Сами тесты получаются проще и шустрее, их дешевле поддерживать. Местами очень хорошо заходит property-тестирование
- Самый главный пункт - мы защищаемся от нелепых багов вида "нам передали отрицательное число в качестве количества, а мы его пропустили, потому что забыли провалидировать. Теперь надо полбазы перетряхнуть на проде, чтобы устранить последствия".
- За счет инкапсуляции упрощается сам код, ведь нам не нужно таскать и копипастить разного рода проверки.

Итого, если количество тестов и растет, то время на их написание (незначительное) компенсируется отсутствием детсадовских багов, а так же более читабельным и поддерживаемым кодом.
22👍12💩2🔥1
Вдогонку к предыдущему посту. Мне кажется, что мы отчасти утратили способность видеть какие-то абстракции как в коде, причем как на уровне классов, так и на уровне целых модулей. Не берусь утверждать, но если нас попросить замоделировать, скажем, небольшой UI-фреймворк для рисования окошек в ООП-парадигме, то в итоге мы получим что-то вроде классических WindowService, ButtonService и прочих *Service, настолько мы привыкли к шаблонам типа контроллер-сервис-дао. Поэтому при проектировании мы частенько используем следующий прием: закрываем глаза и представляем как бы мы спроектировали программу/модуль/класс, если бы все данные гарантировано помещались бы в ОЗУ и никогда оттуда не исчезали. Забудьте про все идентификаторы, слои доступа к данным и тому подобное. Попробуйте прикинуть хотя бы на бумажке как это могло бы выглядеть. Думаю, основную суть вы уловили.

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

Мы же уделяем повышенное внимание удобству локальной разработки и следуем концепции "одной кнопки" (ну или скрипта если хотите). Идея состоит в том, чтобы частые и не очень действия на локальном компе можно было выполнить одной "кнопкой". Что это может быть
- Прогон всех тестов
- Запуск приложения со всеми зависимостями (н-р через docker-compose)
- Сборка докер-образа
- Подготовка окружения
- Накатка тестовых данных
- Прогон линтеров и статанализаторов
- etc
В общем все, что вам вздумается и потребуется. Причем у самих "кнопок" не должно быть параметров (зашиты врутри или есть по-умолчанию), либо их должно быть по минимуму, если без параметров совсем никак.

Что мы получаем, применяя такой подход:
- сниженную когнитивную нагрузку - больше не нужно помнить все параметры и комбинации действий, которые приводят к нужному результату, как следствие экономим время и душевные силы. По хорошему, мы вообще должны забыть о таких вещах. Если вы не помните как запускать приложение, а все при этом работает и разрабатывается - хороший знак.
- быстрый старт для новичков - скачал репо, жмакнул скрипт и все готово, можно браться за весло
- возможность организации труЪ-СI, ведь непрерывная интерграция - это процесс, а не билд-сервер. Билд-сервер при этом нажимает практически те же "кнопки"
- из предыдущего пункта можем получить экономию средств, так как какие-то вещи мы можем проверить локально и быстро, нежели ждать своей очереди на билде и возвращаться к нему в случае паденя. Да и тачки у разрабов обычно гораздо быстрее, нежели дохлые билд-сервера.

Да, такое нужно поддерживать, не все операции можно прогнать локально, и вообще какой-никакой порядок должен быть в проекте. Но зато вы разгружаете голову и экономите кучу нервов и времени, а используя такие вещи в повседневной рутине, вы тем самым снижаете затраты на поддержку инструментов. В общем-то это банальная автоматизация, но по нашему мнению крайне важный элемент разработки. Собсна, любой новый проект (ну или даже старый, где такого нет) мы начинаем с такого рода автоамтики. В общем, настоятельно рекомендуем попробовать подход, если еще не применяете.
👍10🔥7👏1
Всем привет! Мы тут решили немного скооперироваться с ребятами из других каналов, (таких как @emacsway_log и других) и замутить совместный тг-канал. Будем публиковать туда значимые материалы, как свои так и не очень, проводить архитектурные и управленческие мероприятия. Надеемся, что со временем получится создать полноценную ассоциацию арихитекторов и сломать убеждение, что говнокод - это норма. Наш же канал никуда не девается, как и прежде будем публиковать свои рабочие ситуации (благо материала сейчас набралось столько, что не успеваем разобрать), наблюдения, анонсы, а так же планируем новые виды развлечений форматы.

Подробности в первом посте нового канала RSAA. Добро пожаловать!
🔥7
Новое видео на канале Continuous Integration — это не Сервер и даже не Jenkins.

Continuous Integration упоминается еще в XP практиках Кента Бека задолго до появления CI Серверов. Но это прекрасное понятие трансформировалось в "Jenkins Стоящий в углу", и зачастую он уже не то что не помогает разработке а только тормозит ее.

Мы нашли 3 вопроса (в книге Accelerate), которые стоит задать себе чтобы понять насколько хорош ваш Continuous Integration процесс
👍8
Привет! Мы доработали формат нашего курса по разработке энтерпрайза и добавили самостоятельное обучение. Теперь можно не ждать, пока наберётся группа, а начать хоть со следующего понедельника.

Если сомневаетесь, посмотрите лекцию из курса:

Архитектура с высоты птичьего полета (1 час 15 минут)

Материал поможет вам начать писать здоровый код и порицать тех, кто пишет плохой 😉

Подробнее о курсе
1. Ждать группу не нужно. Начинайте в любой момент.
2. Самостоятельный формат курса доступен по двум тарифам — Экспресс (без домашек) и Базовый (с домашками и всем таким). Тарифы на сайте.
3. Талантливых учеников рекомендуем в ThoughtWorks.

Будут вопросы — пишите @dubrova_a
👍4🤮2
ООП vs функциональное программирование? Или все же они прекрасно дополняют друг друга?
Смотри новое видео на нашем канале https://www.youtube.com/watch?v=3rhP73g9z5U

Каждый знает что такое инкапсуляция. Это же один из столпов ООП!
В видео мы показываем как можно этой инкапсуляции добиться, элегантно сочетая ООП и функциональщину.
Не забываем подписываться на канал, чтобы не пропустить новые видосики.
Самое долгожданное событие в архитектурном мире наступило - материалы монументального многолетнего труда в области управления сложностью, одного из лучших авторов современности Vladik Khononov ( @vladik_kh ) начали выходить в публичность:
- https://youtu.be/d6BeLhm3a0s

Предыдущая его книга стала самой понятной и популярной в области DDD. До появления его книги разобраться с трудами Эванса и Вернона можно было только ценой титанических усилий, что сдерживало распространение DDD.

Новая его книга консолидирует труды Larry Constantine, Tom DeMarco, Meilir Page-Jones, David L. Parnas, Robert C. Martin, и вооружает нас принципом, способным легко отыскивать победные решения в задачах любого уровня сложности.

[UPDATE]: Ждем вторую часть это keynote с ddd europe - "fractal geometry of software design". Через пару месяцев должны опубликовать.

#SoftwareDesign #MSA #DDD #SoftwareArchitecture
👍1
Forwarded from Grisha Skobelev
Всем привет 👋
В рамках книжного клуба { между скобок } мы организовали интервью с тем самым Мартином Клеппманном книгу которого мы прочитали. Обсудим книгу, поговорим про будущее data systems и о новых исследованиях Мартина:
📍 https://www.inkandswitch.com/local-first/
📍https://automerge.org/

Встречаемся 30 июня в 20:00 по мск

Martin Kleppmann is a researcher in distributed systems and security at the University of Cambridge, and author of the bestselling book Designing Data-Intensive Applications (O'Reilly Media). Previously he was a software engineer and entrepreneur, co-founding and selling two startups, and working on large-scale data infrastructure at LinkedIn.

Ссылка на подключение будет чуть позже в чате https://news.1rj.ru/str/backend_megdu_skobkah

Также закидывайте ваши вопросы для Мартина в гугл форму https://forms.gle/ZCGNfZ42JJDNsEcd8
🔥7
👀 Новое видео на канале!
Топ жести на собеседовании: https://youtu.be/KdmYL8TJEIA

Что делают большинство разработчиков, когда им нужно провести собеседование? Правильно, гуглят 100 вопросов на собеседование на ${любимый_язык}. А потом мы все жалуемся, что на собеседованиях творится какая-то вакханалия.

В общем, разбираем типичные ошибки интервьюверов и выясняем, почему в каждой компании собеседование должно быть уникальным.

🙏 Не забудьте поставить лайк и подписаться на YouTube канал, если видео вам понравилось!
👍9