emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc. – Telegram
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
3.48K subscribers
119 photos
15 videos
22 files
1.14K links
Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, Extreme Programming, SDLC, Agile, etc.

Chat: https://news.1rj.ru/str/emacsway_chat

Persistence: https://dckms.github.io/system-architecture/
Download Telegram
И куча других интересных видео:
- https://iasaglobal.org/Public/Public/News/News.aspx

[UPDATE]: если у кого-то не работает, то все видео здесь:
- https://m.youtube.com/c/IasaGlobalVideo

#SoftwareArchitecture
Старина Kent Beck написал очередную бомбовую статью про качественный код:
"Tune Software Development for Rate of Change, not Rate of Progress"
https://medium.com/@kentbeck_7670/tune-software-development-for-rate-of-change-not-rate-of-progress-56f93c15a769

Очередной бесценный аргумент для тех, кто вынужден спегетти-кодить не по своему желанию.

#SoftwareDesign
🔥8
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
"Validations and invariants" by Vladimir Khorikov - https://khorikov.org/posts/2022-06-06-validation-vs-invariants/ #DDD
"Crossing aggregate boundaries" by Vladimir Khorikov ( @vkhorikov )
- https://khorikov.org/posts/2022-06-13-crossing-aggregate-boundaries/

> I hear this guideline a lot as well.

Тоже слышал эту фразу много раз, как правило от тех, кто эту книгу сам не читал. Именно поэтому очень важно получать информацию из первоисточника, где V.Vernon сопровождает эту информацию еще целым рядом дополнительной информации, в которой он не только допускает, но и рекомендует в некоторых случаях фиксировать несколько агрегатов одной транзакцией.

#DDD
🔥4👍3
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Несколько мыслей о профессиональных общественных объединениях. Слово организация происходит из др.-греч. ὄργανον «орудие, инструмент; машина; орган», далее из праиндоевр. *worg- (*werg-) «делать». А слово объединение - от слова единство. Праслав. *edinъ…
Подведу небольшие итоги недели, которая выдалась довольно насыщенной и непростой. Наше объединение имеет шансы перерасти в полноценную ассоциацию. Все мое свободное время (и даже часть моего сна) были посвящены разработке проекта Устава, о котором я уже говорил. Пока еще рано говорить о его финализации или хотя бы стабилизации, но, по крайней мере, уже есть с чем работать и развивать итеративно с учетом практических наблюдений.

Это совершенно новый для меня вид деятельности и, признаюсь, дается не всегда просто. Огромное спасибо @sergey486 и @elukianov за участие, @inikolski за информационную поддержку по обзору уставов существующих ассоциаций и за идею групп-сателлитов, @WatchTh15 за решающий аргумент в выборе организационно-правовой формы объединения, а также всем, кто поддержал информационно наше объединение своими репостами.

Если вы разделяете наши цели и готовы сплотить усилия для их достижения, обращайтесь в Onboarding Bot: @ru_arc_bot . Как вы видите, цели перед нами стоят реальные, не бутафорные, и направлены на решение реальных проблем, с которыми специалисты регулярно сталкиваются в практической деятельности, а иногда даже меняют место работы в надежде от них избавиться.

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

P.S.: Самый важный урок, который я вынес за последнее время: "здоровый сон - важнее всего". Все остальное - неважно, если затуманенный и полусонный мозг, ослабленный перенесенным ковидом, не может своевременно и ясно аргументировать позицию. Нет ничего хуже, чем потерять ход мысли в нужный момент или не увидеть противоречия, лежащие на поверхности. Наконец-то я понял смысл лозунга "Будь готов!"🔥🙂

#Goal
👍14🔥7🤔2
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Существуют некоторые вещи, которые являются ключевыми. Профессиональная задача архитектора - эти вещи выявлять. 📝 “Architecture is about the important stuff. Whatever that is” - Ralph Johnson [Здесь шла речь о принципе, который со времен Гераклита используется…
Самое долгожданное событие в архитектурном мире наступило - материалы монументального многолетнего труда в области управления сложностью, одного из лучших авторов современности 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
🔥21👍9
Russian Association of Software Architects
На Snowbird meeting обсуждались принципы "Bill of Rights", один из которых гласит: 📝 "You [programmer] have the right to produce quality work at all times." Причем: 📝 "During the Snowbird meeting, Kent Beck said that the goal of Agile was to heal the divide…
Возьмем, к примеру, повальную проблему низкого качества кода, о которой я говорил (да и вы тоже). На первый взгляд может показаться, что если все хотят её решить, значит, ничто не препятствует решению этой проблемы. Отсюда даже можно сделать вывод о том, что изменение состава ассоциации не может повлиять на её цели. Мол, ведь ассоциация и должна выражать цели большинства.

Однако, мы живем с осознанием факта того, что эта проблема в отрасли существует, и существует она массово. Я знаю многих людей, которые сменили место работы по причине недовольства качеством кода. Да и сам этого не избежал в свое время.

Достоверно известно, что эта проблема ведет к падению velocity со скоростью, близкой к геометрической прогрессии, а значит, к стремительному падению рентабельности и конкурентоспособности проекта. Разве является это чей-то целью? Но если это не является ничьей целью, то почему эта проблема все еще существует и прогрессирует?

Причины здесь три:

1. Как говорил Кент Бек: "Краткосрочные индивидуальные цели часто конфликтуют с долгосрочными социальными целями. Общество решает эту проблему при помощи набора ценностей, подкрепленных мифами, ритуалами, наказаниями и наградами. Без уважения к этим ценностям люди забывают о социальных нуждах и стремятся реализовать свой собственный индивидуальный краткосрочный интерес."
-- "Extreme Programming Explained" 1st edition by Kent Beck, "Chapter 7. Four Values", перевод ООО Издательство "Питер"

В погоне за бизнес-выгодой в краткосрочной перспективе, часто жертвуются технические интересы долгосрочной перспективы.

Добавим еще то, что проблема может быть как успешно решена во благо всех, так и, наоборот, кем-то корыстно эксплуатируема в ущерб остальным - все зависит от того, какие цели преследовать. Увы, но чем больше проблем существует на рынке, тем легче залезть в чужой карман.

2. Этот конфликт усиливается когнитивными искажениями, например, "Эффектом Недавнего", "Эффектом Края", "Ошибкой Планирования" и другими, которые преуменьшают существенность долгосрочных интересов в сознании представителей бизнеса, создают иллюзию отдаленности наступления их последствий и линейности характера их влияния.

3. Как ни банально это звучит, но имеет место элементарная нехватка как управленческой, так и технической грамотности, преодолению которой зачастую препятствует "Эффект Даннинга-Крюгера".

Как видите, для решения проблемы в масштабах отрасли, одного только недовольства ею недостаточно. Чтобы решить проблему, требуется:

1. Высокий уровень грамотности для анализа проблем, выявления точных целей и постановки эффективных задач. В данном конкретном случае требуется глубокое знание в Software Design, управлении процессами разработки и теории внедрения изменений.
2. Чистота и единство общих целей, высокий уровень морально-деловых качеств.
3. Консолидация индивидуальных усилий в организованную силу, способную преодолеть силы сопротивления, подпитывающие существование решаемой проблемы.

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

Как же можно решить проблему? Для её решения требуется изменить сложившиеся стереотипы и изменить общественное мнение. А для этого нужно привлечь массовое внимание к самой проблеме и способам её решения. К счастью, о решении этой проблемы было много написано, но, к сожалению, мало кем читано.

А для того, чтобы обладать потенциалом, достаточным для привлечения массового внимания, нужно консолидировать усилия лидеров общественного мнения, что и является задачей такого объединения. Почему, например, о "Неделе высокой моды" в Москве слышали многие, а о "Неделе качественного кода" не слышал никто? Разве с модой у нас дела обстоят хуже, чем с ежедневным количеством WTF на работе?

Мы решили эту ситуацию исправить и начать цикл тематических месячников с целью концентрации внимания общественности на конкретных проблемах и способах их решения.

#Goal
👍6🔥6😁1
Рождается ли в споре истина? Хочу поделиться своими мыслями из обсуждения в публичном чате канала объединения.

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

В спорах сходится два мнения. Мнения могут быть противоречивы, т.к. они могут производиться разным подмножеством опыта двух субъектов спора.

Максимум, что можно достигнуть в споре - это выработать "коллективное мнение". Но оно производится все тем же ограниченным, хотя теперь уже и объединенным, мнением. Это пока еще не знание. Для обретения знания нужно обратиться к максимально широкому опыту индустрии, произвести широкую дивергентную исследовательскую фазу, выявить все существующие в отрасли мнения, обнаружить их противоречия, и путем обобщения и систематизации вывести такую непротиворечивую форму информации, которая, в определенных обстоятельствах, может стать знанием. А эта активность выходит далеко за пределы спора и отличается от спора именно тем, что субъекты не настаивают на своей ограниченной позиции, и прилагают все усилия для максимального расширения того опыта, которым эта позиция формируется.

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

[UPDATE]: Вспомнилось: каждый хочет, чтоб правда была на его стороне, но не каждый хочет быть на стороне правды.

#SoftSkills
👍8🔥8🤔1
Две статьи о том, что проблема гонки сообщений в шине может решаться на уровне бизнес-логики. Одна из них - от Vaughn Vernon. Он даже видит в этом превосходство DDD.

1. "Modeling Uncertainty with Reactive DDD" by Vaughn Vernon reviewed by Thomas Betts
2. "Nobody Needs Reliable Messaging" by Marc de Graauw

#DDD #Microservices #DistributedSystems
👍7🔥2
👀 Новое видео на канале!
Топ жести на собеседовании: https://youtu.be/KdmYL8TJEIA

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

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

🙏 Не забудьте поставить лайк и подписаться на YouTube канал, если видео вам понравилось!
🔥2👍1
Forwarded from Russian Association of Software Architects (Ivan Zakrevsky)
Друзья, спасибо за ответы. Честно говоря, было неожиданно наблюдать лидерство DDD под конец опроса. И все-таки, в конце "Принципы качественного кода" отыграли свое и сравняли счет. С них мы и начнем. Посвятим принципам качественного кода июль месяц.

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

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

#Trend
👍1
Forwarded from Russian Association of Software Architects (Eugene Lukianov)
С чего начинается качественный код? Как говорил профессор Преображенский, разруха начинается с головы. И он был прав. Вернее, с «Закона Миллера»:

💬 «Магическое число семь плюс-минус два» («кошелёк Миллера», «закон Миллера») — закономерность, обнаруженная американским учёным-психологом Джорджем Миллером, согласно которой кратковременная человеческая память, как правило, не может запомнить и повторить более 7 ± 2 элементов.

Конечно, всегда найдутся желающие поспорить с Миллером, но только не Dijkstra:

💬 "The competent programmer is fully aware of the strictly limited size of his own skull; therefore, he approaches the programming task in full humility"
("хороший специалист всегда осознает строго ограниченные размеры своего черепа, поэтому подходит к задачам с максимальной скромностью.")
—Edsger W. Dijkstra, 1972

И авторы KISS Principle с ним охотно согласились бы:

💬 "Be Humble, don't think of yourself as a super genius, this is your first mistake. By being humble, you will eventually achieve super genius status =), and even if you don't, who cares! your code is stupid simple, so you don't have to be a genius to work with it."
("Будьте скромны, не считайте себя супергением — это ваша первая ошибка. Оставаясь скромным, вы в конечном итоге достигнете уровня супергения, и даже если нет, какая разница. Ваш код должен быть прост настолько, что вам не нужно быть гением, чтобы работать с ним.")
—"
KISS principle"

В принципе, «Закона Миллера» предопределяет потребность не только в качественном коде, но и в ставшей популярной в наши дни Team First Architecture.

#SoftwareDesign
1
Forwarded from Russian Association of Software Architects (Ivan Zakrevsky)
Chat Digest

💬 Огненное видео от Майкла Нигорда:
- https://news.1rj.ru/str/ru_arc_chat/1072

💬 Ряд мега-полезных файлов по архитектурной таксономии:
- https://news.1rj.ru/str/ru_arc_chat/1062

💬 Атрибуты качества и их влияние на выбор архитектурного подхода к ядру системы:
- https://news.1rj.ru/str/ru_arc_chat/998

💬 Architecture Characteristics Worksheet:
- https://news.1rj.ru/str/ru_arc_chat/1005

💬 Матрица решений по выбору типа базы данных:
- https://news.1rj.ru/str/ru_arc_chat/1052

💬 Архитектура = структуры + текстуры. Качество кода - это одна из текстур:
https://news.1rj.ru/str/ru_arc_chat/972

💬 Про асинхронные и синхронные стили коммуникации:
- https://news.1rj.ru/str/ru_arc_chat/956
- https://news.1rj.ru/str/ru_arc_chat/935
- https://news.1rj.ru/str/ru_arc_chat/896

💬 Чем отличается простой микросервис от BC?
https://news.1rj.ru/str/ru_arc_chat/832

💬 Стратегические паттерны DDD:
- https://news.1rj.ru/str/ru_arc_chat/813
- https://news.1rj.ru/str/ru_arc_chat/821

💬 Чем отличается Бизнес-процесс от Workflow?
- https://news.1rj.ru/str/ru_arc_chat/757

💬 Как легче всего думать о Бизнес-логике?
- https://news.1rj.ru/str/ru_arc_chat/737

💬 С чего начинается EventStorming?
- https://news.1rj.ru/str/ru_arc_chat/734

💬 Есть ли альтернатива для синхронных доменных событий в FP?
- https://news.1rj.ru/str/ru_arc_chat/710

💬 Microservices and the First Law of Distributed Objects:
- https://news.1rj.ru/str/ru_arc_chat/701

💬 Distributed transaction patterns for microservices compared:
- https://news.1rj.ru/str/ru_arc_chat/691

💬 Ищут ли люди в споре истину?
- https://news.1rj.ru/str/ru_arc_chat/651

💬 Какую проблему решают агрегаты и почему они возникли?
- https://news.1rj.ru/str/ru_arc_chat/646

💬 Помогает ли EventStorming предотвратить ошибки при моделировании агрегатов?
- https://news.1rj.ru/str/ru_arc_chat/636

💬 Если человек прав, то почему к нему не всегда прислушиваются?
- https://news.1rj.ru/str/ru_arc_chat/628

💬 Какая роль микросервисов в топологии команд?
- https://news.1rj.ru/str/ru_arc_chat/466

💬 Откуда легче всего начинать искать терминологию по Software Engineering:
- https://news.1rj.ru/str/ru_arc_chat/441

💬 Как разрабатываются стандарты?
- https://news.1rj.ru/str/ru_arc_chat/412

💬 Чем отличаются Architecture, Design и Implementation?
- https://news.1rj.ru/str/ru_arc_chat/361

💬 Считает ли Robert C. Martin микросервисы архитектурой и все ли с ним согласны?
- https://news.1rj.ru/str/ru_arc_chat/352

💬 О собеседованиях по System Design:
- https://news.1rj.ru/str/ru_arc_chat/329

💬 Что не так с названием SRP, и почему он зачастую работает наоборот?
- https://news.1rj.ru/str/ru_arc_chat/312

💬 Не могу заплатить за книгу. Что делать?
- https://news.1rj.ru/str/ru_arc_chat/295

💬 Архитектурная карта победителей O'Reilly:
- https://news.1rj.ru/str/ru_arc_chat/273

💬 О метамоделях:
- https://news.1rj.ru/str/ru_arc_chat/270

💬 Что читать по DDD?
- https://news.1rj.ru/str/ru_arc_chat/268

💬 Каталоги и матрицы устарели и не соответствуют вызовам времени. Что применить взамен?
- https://news.1rj.ru/str/ru_arc_chat/250

💬 Метамодель GoF:
- https://news.1rj.ru/str/ru_arc_chat/246

💬 Шаблоны стабильности от Майкла Нигорда:
- https://news.1rj.ru/str/ru_arc_chat/241

💬 Читать ли синюю книгу от Эванса? Не устарели ли она?
- https://news.1rj.ru/str/ru_arc_chat/235

💬 Мега-статья о жертвенной архитектуре:
- https://news.1rj.ru/str/ru_arc_chat/161

💬 Почему не все проекты успешны?
- https://news.1rj.ru/str/ru_arc_chat/160

💬 Эффекте новизны Хотторна от изучения новых технологий:
- https://news.1rj.ru/str/ru_arc_chat/159

#ChatDigest
👍4
Нужно ли мне репостить сюда сообщения из @ru_arc , одним из сооснователей которого я являюсь?
Anonymous Poll
59%
Не нужно, ведь всегда можно подписаться на @ru_arc . Читать одно и то же в двух каналах неудобно.
41%
Нужно - мне не хочется подписываться на оба канала.
👍1
emacsway-log: Software Design, Clean Architecture, DDD, Microservice Architecture, Distributed Systems, XP, Agile, etc.
Нужно ли мне репостить сюда сообщения из @ru_arc , одним из сооснователей которого я являюсь?
Непростой выбор. Простое большинство есть, но до квалифицированного большинства (2/3) недотягивает... 🤔...

С одной стороны, если вы подписаны на этот канал, значит, нас что-то объединяет. А для объединения как раз создан канал @ru_arc

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

В объединенном канале ( @ru_arc ) у нас синтезируется новый контент, обнаруживаются новые ракурсы уже известной мне ранее информации, что придает ей новую интересность. Возникают вещи, которые я хотел бы видеть и здесь тоже.
👍5👎5
Forwarded from Russian Association of Software Architects (Eugene Lukianov)
Проще всего пояснить "Закон магического числа 7 ± 2" этой картинкой☝️(кликните для увеличения). Как говорится, лучше один раз увидеть. Такой же процесс происходит, когда уровень сложности рассматриваемого фрагмента кода превышает возможности краткосрочной памяти человека.

Просто ваши глаза не могут увидеть все 12 точек одновременно. Ninio's extinction illusion. Twelve black dots cannot be seen at once. Ninio, J. and Stevens, K. A. (2000) Variations on the Hermann grid: an extinction illusion. Perception, 29, 1209-1217.

#SoftwareDesign
🔥10👍5
Интересно, что Общая теория конфликта выросла из диалектики, по крайней мере К.Маркс был диалектиком:
- https://ru.m.wikipedia.org/wiki/Конфликтология

#SoftSkills
Forwarded from Russian Association of Software Architects (Eugene Lukianov)
Какую же задачу решает качественный код?

💬 "Nothing kills speed more effectively than poor internal quality."
—"Planning Extreme Programming" by Kent Beck, Martin Fowler

💬 "... the activity of design is not an option. It must be given serious thought for software development to be effective."
—"Extreme Programming Explained" by Kent Beck

💬 "The only way to make the deadline — the only way to go fastis to keep the code as clean as possible at all times."
—"Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin

💬 "In most contexts higher quality ⇒ expensive. But high internal quality of software allows us to develop features faster and cheaper."
—"Tradable Quality Hypothesis" by Martin Fowler

💬 "The value of good software design is economic: you can continue to add new functionality quickly even as the code-base grows in size."
—"Design Stamina Hypothesis" by Martin Fowler

💬 "The fundamental role of internal quality is that it lowers the cost of future change. But there is some extra effort required to write good software, which does impose some cost in the short term."
—"Is High Quality Software Worth the Cost?" by Martin Fowler

💬 "The whole point of good design and clean code is to make you go faster - if it didn't people like Uncle Bob, Kent Beck, and Ward Cunningham wouldn't be spending time talking about it."
—"Technical Debt Quadrant" by Martin Fowler

💬 "If you're a manager or customer how can you tell if the software is well designed? It matters to you because poorly designed software will be more expensive to modify in the future."
—"Is Design Dead?" by Martin Fowler

Сама по себе скорость разработки - это еще не цель. Это только задача в достижении цели.

Да, темпы разработки имеют имеют очевидные цели, такие как:
- экономический эффект за счет удешевления разработки,
- уменьшение ущерба упущенной выгоды от задержки выхода на рынок (time-to-market) новых бизнес-фич,
- повышение конкурентоспособности за счет ускорения адаптируемости к скороточно меняющимся условиям рынка...

Но есть еще одна цель, часто упускаемая из виду, та самая, которая имеет фундаментальное значение для анализа и архитектуры. И непонимание этой цели часто приводит к тому, что либо качество кода жертвуется в угоду краткосрочным бизнес-интересам, либо наоборот, качество делается ради качества где надо и не надо, выстраивая тем самым против себя глухую стену непонимания и обороны со стороны представителей бизнеса. Но об этом уже в другой раз.

#SoftwareDesign
👍4🔥3