10 главных причин провала сложных архитектур [ Innopolis University ]

  Рет қаралды 12,367

Yegor Bugayenko

Yegor Bugayenko

Күн бұрын

Пікірлер: 68
@Qnoize
@Qnoize Жыл бұрын
Егор Георгиевич звучит круто, как будто в универ 90х попал, Егор спасибо тебе за контент который ты делаешь! Твой вклад в развитие русскоязычного ИТ очень огромный
@yegor256
@yegor256 Жыл бұрын
Рад стараться, спасибо, что смотрите!
@dragneell9
@dragneell9 Жыл бұрын
Представление Егора это как отдельный вид искусства. Мне кажется именно так представляли вельмож в средние века.
@gulfstream1800
@gulfstream1800 Жыл бұрын
забавный комментарий)
@artemiy_uo
@artemiy_uo Жыл бұрын
Егора нужно клонировать! Как всегда ценно, точно, остро и главное практика доказывает что верно. ❤
@twoka
@twoka Жыл бұрын
аминь.
@xrollup
@xrollup Жыл бұрын
Егор, ваша книжка по ООП - шедевр. Читал и периодически вскакивал и орал: "Да! Именно так!". Спасибо вам за нее.
@yegor256
@yegor256 Жыл бұрын
Приятно) Спасибо за отзыв!
@vladimirtatarsky9928
@vladimirtatarsky9928 Жыл бұрын
Спасибо за выкладывание такого крутого контента в открытый доступ.
@michaeldeyev8809
@michaeldeyev8809 Жыл бұрын
Спасибо за лекцию! Продолжайте пожалуйста выкладывать свои лекции!
@WarbeastMr
@WarbeastMr Жыл бұрын
Второй день смотрю нонстопом разные выступления и интервью Егора. Прям как бальзам на душу.
@yegor256
@yegor256 Жыл бұрын
спасибо на добром слове :)
@hakooplayplay3212
@hakooplayplay3212 Жыл бұрын
Отличная лекция. Очень интересно и полезно послушать мысли от опытного разработчика на такие высокие материи. Сам до этого не дойдешь, пока за 10+ лет не наломаешь дров. Благодарю
@ДмитрийКарпич
@ДмитрийКарпич Жыл бұрын
Спасибо за лекцию, было интересно. Пару мыслей озвучу, в принципе созвучных. 1) Код всегда пишется людьми для людей и должен быть понятен людям. Компьютер сам разберётся. 2) Синьор должен писать так чтобы понял любой джун. Если это не так, то перед вами просто престарелый джун, а не синьор.
@СтороннийНаблюдатель-ч6ф
@СтороннийНаблюдатель-ч6ф Жыл бұрын
Индустриальный ландшафт программирования был бы плоским и серым без такого неординарного спикера. Обожаю Егора.
@yegor256
@yegor256 Жыл бұрын
А я обожаю слушателей, которые оставляют комменты)
@vladimirmashkov
@vladimirmashkov Жыл бұрын
Прекрасный вебинар. Теперь бы его до руководства довести.
@silkproduction
@silkproduction Жыл бұрын
то, что нужно) спасибо!
@ЯрославМизгирев-р2р
@ЯрославМизгирев-р2р Жыл бұрын
Егор, спасибо! Очень полезные мысли вы даете на подумать.
@volodymyrlozovskyi9975
@volodymyrlozovskyi9975 Жыл бұрын
Как всегда топ, отличный и как всегда не тривиальный свод причин!
@twoka
@twoka Жыл бұрын
хороший обзор. 2 сча все через виртуалки фрилансеры на большие конторы работают, там уже все настроено индусами с кучей неактуального вики текста. резюмировал ты здесь все последние лет 10. так сказать жизнь в латеке или ппт. с магистра посмеялся в душе. любят у нас это, не отнять. хорошо выглядишь.
@АлександрШаповалов-в7в
@АлександрШаповалов-в7в Жыл бұрын
Как всегда топ.
@NikolasCapko
@NikolasCapko Жыл бұрын
По поводу тестирования архитектуры - для kotlin есть библиотека konsist, которая позволяет писать тесты архитектуры
@Владимир-д9и7о
@Владимир-д9и7о Жыл бұрын
Ура, хоть что-то на русском! Спасибо!
@tirnik707
@tirnik707 Жыл бұрын
Про tight сoupling интересно порассуждать. Например, есть сервис по работе с базой данных. И есть с десяток сервисов, которые используют этот сервис, как либу. И вроде бы нет прямой связи с бд, но по факту при добавлении нового поля в таблице - приходится сначала расширять метод в сервисе по работе с БД, а затем пробегаться по всем сервисам, которые его используют и расширять параметры там. Разве мы снизили coupling? Была связь десятка сервисов с бд, теперь связь десятка сервисов с новым сервисом + его связь с бд. Хороший ли это пример приминительно к coupling?
@yegor256
@yegor256 Жыл бұрын
Но связи этих сервисов с промежуточным модулем значительно "тоньше", чем были между ними и БД
@deniszhukovsky2260
@deniszhukovsky2260 Жыл бұрын
конкретно в вашем случае связность увеличивается из-за того что вы новый атрибут добавляете в контракт и потом на него оириентируетесь, если стараться применять объекты с поведением, инкапсулируя данные, связность системы будет значитально ниже и не так чувствительна к добавлению нового атрибута. В идеале у вас должно быть 2 точки интеграции: 1. место где данные читаются/записываются из/в базу и инкапсулируются в объект не покидая его 2. место вывода данных на экран либо в поток, но за это должен отвечать сам объект тогда все изменения будут в рамках одной сущности, понятное дело что легче сказать чем сделать, но главная идея это сокрытие данных насколько это возможно
@tirnik707
@tirnik707 Жыл бұрын
@@deniszhukovsky2260 вы говорите о связности или сцеплении?)) Так как увеличение связанности это хорошо, а вот сцепления плохо. Ваши рассуждения не очень понял. Я привёл пример из реального проекта, это частая практика. У этого есть свои плюсы, но как пример по уменьшению сцепления, на мой взгляд, не самый лучший.
@user-fg6ng7ej6w
@user-fg6ng7ej6w Жыл бұрын
такие обзорные доклады, которые сжато и четко излагают принципы разработки - всегда интересно смотреть. спасибо пункт 8 - ошибка - должно быть High Cohesion. (+ Low Coupling)
@mrfreelancerpaul6679
@mrfreelancerpaul6679 Жыл бұрын
Tight coupling или синоним high coupling - это антипатерн, Егор все верно написал, он же проблемы выделяет в своем докладе
@РустР
@РустР Жыл бұрын
это все прекрасно, жаль не работает в реальных условиях заказной разработки
@ievgenchesnokov1070
@ievgenchesnokov1070 Жыл бұрын
Когда я начинал программировать была популярна статья Фредерика Брукса "Мифический человеко-месяц", там была формула разделения ролей: "главный хирург - лично пишет код, второй пилот - код не пишет, но в курсе всего (на случай аварии с главным хирургом), специалист по языку, вспомогательный персонал. В то время таких объемных проектов, как теперь и в такие сжатые сроки никто не создавал, весьма популярной была идея второй итерации: сперва нужно "слепить уродца", а затем его переписать заново и этого достаточно.🙃
@vadimburavlev4773
@vadimburavlev4773 Жыл бұрын
Егор, хотелось бы поподробней про "сложный" и "простой" код. Есть мудреный и запутанный код, а есть просто "тупые" и необразованные читатели технически сложного кода. Где-то должна быть грань. Михаил Михайлович Жванецкий как-то сказал: «Раньше миром управляли умные. Это было жестоко. Умные заставляли тупых учиться. Тупым было тяжело. Теперь миром управляют тупые. Это честно, потому что тупых гораздо больше. Теперь умные учатся говорить так, чтоб тупым было понятно. Если тупой что-то не понял, это умного проблема. Раньше страдали тупые. Теперь страдают умные. Страданий стало меньше, потому что умных становится все меньше и меньше»
@alexeyfilin10
@alexeyfilin10 Жыл бұрын
Ваш вопрос имеет прямое отношение к собственно разработке архитектуры и его нужно объяснять отдельными лекциями. Если по-простому: 1. Если над кодом приходится думать (он сложный), то у него есть неочевидные побочные эффекты. Простой код не имеет побочных эффектов. 2. Из ролика показательно отношение времени чтения (90%) ко времени написания кода (10%). Тут я поправлю Егора, потому что программист не читает код (как это выглядит со стороны), программист в это время думает. И время размышлений тем меньше, чем продуманнее архитектура. 3. В общем виде для себя я сформулировал этот подход так: Если при изменении реализации любой части нужно ломать интерфейсы, то это плохая архитектура. Такой подход превращается в головную боль архитектора, но результат этого подхода будет качественный.
@yegor256
@yegor256 Жыл бұрын
"Сложный" программист и "умный" программист -- это разные качества. Представьте, что программист это преподаватель. Он передает свои знания другим программистам, другим поколениям программистов. Один делает это просто, понятно и доходчиво, а второй -- сложно, запутанно и непонятно. При этом и тот и другой -- грамотные и "умные" программисты.
@vadimburavlev4773
@vadimburavlev4773 Жыл бұрын
@@yegor256 ну это же ещё и очень субъективное восприятие. Кому-то код будет казаться понятным, а кому-то нет. Кто-то не может терпеть асинхронное программирование, кто-то не любит ООП и нормально делает процедурный структурный код. Для каждого из них отклонение от излюбленных траекторий будет сразу казаться "сложным и запутанным" кодом. Если память не изменяет, то в каком-то давнем видео у вас была дискуссия "зачем нужны эти стримы, есть же итератор, со стрима и все выглядит не так очевидно". Но это уже стандарт теперь, решают кучу вопросов, очень многим вполне понятны. Как уйти от субъективщины и "любимых тропинок" в этом случае?
@yegor256
@yegor256 Жыл бұрын
@@vadimburavlev4773 бремя ответственности за простоту понимания кода лежит на его авторе, я считаю. Конечно, автор может ожидать наличия каких-то базовых знаний у читателя, например что "стримы -- это хорошо и понятно". Равно как и учитель физики ожидает наличия знаний алгебры у своих учеников. Что есть "алгебра" для программиста -- вопрос открытый :)
@twobeerornottwobeer5973
@twobeerornottwobeer5973 Жыл бұрын
По поводу удаленки, у нас в команде общение по связи реже, больше пишем сообщения. Когда ты пишешь сообщения ты его обдумываешь, дабы не тратить время человека. А если бы сидели рядом это же постоянное дерганье.
@sergehog
@sergehog Жыл бұрын
Согласен с каждым пунктом!
@alexUnion
@alexUnion Жыл бұрын
Практически все эти проблемы регулярно встречаю, к сожалению
@ringnull
@ringnull Жыл бұрын
Ждемс лекции по разным архитектурам.
@siberiancreator
@siberiancreator Жыл бұрын
Про анализ архитектуры может углубиться и всё-таки выпустить в свет какой-то вердикт? Типа "автоматическая проверка архитектуры невозможна". Или "проверка архитектуры - так сложно, что это невыгодно". Или "почему проверку архитектуры ещё не изобрели? потому что людям/бизнесу не хочется качества, им хочется денег". Или "индустрия идёт не туда" Или, наоборот, "анализ архитектуры это просто. внедряйте и пожинайте плоды. вот доклад как это сделать и почему это надо" И аргументировать как-то.
@yegor256
@yegor256 Жыл бұрын
Можно попробовать, но все это будут теоретические рассуждения. На практике показать нечего (по крайней мере мне)
@siberiancreator
@siberiancreator Жыл бұрын
@@yegor256 я о том и писал, что если это возможно на практике (хотя бы базовые вещи), то стоит попробовать и рассказать о полученном опыте. Например: кол-во импортов соседних пакетов с другими модулями не больше двух на весь модуль (во всех классах модуля, если модуль не адаптер или прокси); реализация/декларирование больше двух фабрик в модуле; В полиморфных массивах вызов у объектов функций, которых нет в интерфейсе (а только в классах); Зарезервировать короткие имена для счётчиков, файловых переменных и соединений и отсекать любые другие короткие названия переменных меньше какого-то порога. Можно ещё copilot натравить проверять осмысленность названий переменных (но это уже не формализовать); Класс реализует слишком много интерфейсов (вся цепочка наследования) - низкая специфичность. И всё в таком духе, для начала. Описанное же вроде бы несложно делать, а на качестве проекта может сказаться.
@artemgri9188
@artemgri9188 Жыл бұрын
Фраза про чтение кода 90% принадлежит не профессору Зуеву, а опубликована в книге дядюшка Боб много лет назад. Там ещё было что "компьютер прочитает любой скомпилированный код, лишь бы он выполнял нужную последовательность операций для АЛУ. А вот человек - нет". И это 100% факт
@МихаилГагин-л5с
@МихаилГагин-л5с Жыл бұрын
Если вся кодовая база покрывается тестами, есть ли тогда смысл писать на строго типизированных языках? Ведь теперь признание работоспособности когда лежит уже не на компиляторе ,а на наборе тестов!
@aleksandrsokolov3734
@aleksandrsokolov3734 Жыл бұрын
Всегда полезно. Как дела с Zerocracy?
@refloader
@refloader Жыл бұрын
В топ10 только 9 пунктов
@freedomplayer2388
@freedomplayer2388 Жыл бұрын
Как между собой уживаются первые 2 причины, в контексте стремления избежать потери знания всей архитектуры проекта? Где решение по 1-ому пункту "один ответственный архитектор" повышает этот риск, так как на одного архитектора становится больше завязано ответственности и знаний, и где решение по 2-ому пункту "работа не в одной локации", наоборот, стремится снизить риск потери знаний о проекте, путём увеличения документируемой коммуникации и практики работы в разных окружениях. То есть с одной стороны делаем одного человека ключевым для всей архитектуры - если он уйдёт, будут проблемы, а с другой - диверсифицируем знания об архитектуре (или об отдельных модулях?) на уровне команды.
@artemgri9188
@artemgri9188 Жыл бұрын
Такие люди (21:30) точно существуют :) Мне капец как важно чтобы код и мой, и моих подчинённых был качественный.
@quadrant6912
@quadrant6912 Жыл бұрын
А что за прослойка между сервисами и бд? Вы сказали там может быть свой язык. Подскажите плз, какие используются средства для реализации.
@dmprkp6792
@dmprkp6792 Жыл бұрын
Хз, про архитектуру последние два пункта. Остальное про организацию процессов
@EshkinKot1980
@EshkinKot1980 11 ай бұрын
Какое отношение всё сказанное кроме первого пункта имеет к архитектуре?
@mormeoi
@mormeoi Жыл бұрын
Монорепозиторий делают не для того чтобы был единый релизный цикл у всего, это невозможно, это делают для того, чтобы когда ты меняешь свою либу была возможно прогнать с ней чужие тесты.
@yegor256
@yegor256 Жыл бұрын
А "прогнать чужие тесты" разве не часть релизного цикла?
@mormeoi
@mormeoi Жыл бұрын
@@yegor256 Часть. Возможно, мы под словом "единый релизный цикл" понимаем разное. Я сюда вкладываю еще время отведения релизных бранчей и раскатку артефактов. Ты можешь жить в монорепе и выкатываеться раз в полгода, а твой сосед по монорепе - раз в неделю. Наверно лучше назвать это не единый релизный цикл, а одинаковый релизный цикл.
@CodeForLiving-ic8ck
@CodeForLiving-ic8ck Жыл бұрын
Есть еще одна причина провалов сложных архитектур. Она описана в известной книге Йордана "Смертельный марш" или в переводе на русский название книги было "Путь камикадзе". Так вот: люди - идиоты. 🙂
@artemgri9188
@artemgri9188 Жыл бұрын
Егор, почти любой менеджер будет воспринимать свой проект как стартап, а следовательно не давать внедрять практики, линтеры, покрытие. Мол или мы сейчас что-то выкатим клиентам или у нас закончатся деньги и мы не получим следующий раунд (мы не успеем к дате, наш клиент, которому мы наврали с три короба, уйдёт). И что тут делать, говнокодить?
@johnins1646
@johnins1646 Жыл бұрын
Егор, чем отличаются 1 и 4 причины? Сначала вы говорите что за модуль должен отвечать один человек, а потом говорите что это плохо.
@yegor256
@yegor256 Жыл бұрын
За всю систему один человек. А вот у модулей внутри системы "владельцев" быть не должно.
@Comm1ted
@Comm1ted 10 ай бұрын
всё хорошо, но 720п это печально
@yegor256
@yegor256 10 ай бұрын
согласен
@SunnyDays-888
@SunnyDays-888 Жыл бұрын
@ПашаБезликий
@ПашаБезликий Жыл бұрын
Егор, твои рекомендации неизбежно приводят к нищите всех программистов и дают безграничные возможности владельцам денег, как тем, кто может лучше всех мотивировать вклад
@yegor256
@yegor256 Жыл бұрын
Приводят к нищете ленивых плохих программистов, я бы сказал
@watermelonjones625
@watermelonjones625 Жыл бұрын
У него ж свой вайб.. что давайте выгоним всех тупых и ленивых.. Вот тогда заживём))
PMBA 6/10: Resources Management [project management crash course] [eng sub]
1:23:10
Егор Бугаенко - Объектно-ориентированное вранье
44:52
JPoint, Joker и JUG ru — Java-конференции
Рет қаралды 139 М.
BAYGUYSTAN | 1 СЕРИЯ | bayGUYS
36:55
bayGUYS
Рет қаралды 1,9 МЛН
Quilt Challenge, No Skills, Just Luck#Funnyfamily #Partygames #Funny
00:32
Family Games Media
Рет қаралды 55 МЛН
SQM 1/24: Lines of Code [software quality crash course] [eng sub]
1:24:27
Управление памятью и сборщиком мусора в Go
47:26
Московский клуб программистов
Рет қаралды 13 М.
Как программисту найти пару?
21:59
Sergey Nemchinskiy
Рет қаралды 59 М.
Знание и опыт в программировании
17:28
ВСЁ О РУССКИХ ЛИНУКСАХ (2023)
15:42
PLAFON - Канал о линуксе
Рет қаралды 106 М.
BAYGUYSTAN | 1 СЕРИЯ | bayGUYS
36:55
bayGUYS
Рет қаралды 1,9 МЛН