Search
Write a publication
Pull to refresh

Comments 15

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

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

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

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

Сухой итог - архитектура это действительно компромисс. Компромисс между сложностью системы и ее возможностью адаптироваться к неизвестному будущему. Работа архитектора - не сводится к подбору компонентов под требования (хотя и это тоже надо делать). Настоящая работа архитектора (его насмотренность, опыт в отрасли и т.д.) - это сказать вам СЕЙЧАС как надо сделать, чтобы ПОТОМ каждый раз оказывалось: "...могла ли природа предполагать что нам понадобятся очки? А как удачно расположены наши уши!...". То есть, внешний мир изменяясь предъявляет новые требования к вашей системе - и внезапно оказывается что относительно небольшой кровью она может к ним адаптироваться. А у конкурента, который строил как лачуги в мумбае - нет!...

Довольно забавно.

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

Другой пример хорошей архитектуры - это человек.

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

И как-бы проблемы со спиной коленями и много чем ещё не дадут соврать - получилось сильно не очень.

Я сказал "хорошей архитектуры", а не "идеальной". Оно выжило при нескольких глобальных похолоданиях, заселило все континенты кроме Антарктиды, живет во всех климатических поясах от Сахары до Чукотки. Понятно, что человека никто не проектировал - я это привожу как пример "случайно удачной" архитектуры которая прошла эволюционный отбор и оказалась достаточно хороша для широкого круга применений. А другие - более специализированные виды - нет... Вопрос об идеальной архитектуре я бы оставил открытой, ибо в какой-то момент вы упретесь в Парето-оптимальность и сможете только менять одни недостатки на другие...

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

Понятно, что человека никто не проектировал - я это привожу как пример "случайно удачной" архитектуры которая прошла эволюционный отбор

Я могу лишь в очередной раз предложить вернуть логику в программу обучения.

Логика в программе обучения - это прекрасно. Однако здравый смысл никто вам не отменит, ибо всякая достаточно сложная система либо неполна, либо противоречива. :-) Живите с этим. На всякий случай объясню еще раз. Человека никто не проектировал (если только вы не сторонник креационистской теории - но это уже к теологам, а не ко мне). Однако, практика показала что результат получился исключительно удачным. И мы можем указать на решения, которые делают его таковым.

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

Нет, нет, и еще раз нет!

Так а что конкретно нет?

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

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

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

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

Другой пример хорошей архитектуры - это человек.

Вот только человек это буквально пример эволюционирующей архитектуры.

Нет - потому что я вижу и замечаю тенденцию последних лет этак пяти-семи - снижение планки требований к архитектору и вульгаризацию его работы. Уже мы перестали требовать от архитектора опыта работы вообще и в предметной области в частности. Уже мы сводим работу архитектора к правильной записи таблицы NFR/QA и подбору по другой таблице тактик и компонентов. И я никак не могу понять - откуда это, блин, идет! Понятно что в ИТ всё девальвируется, но не до такой же степени! Завтра у нас LLM архитектором станет такими темпами!

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

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

И я настаиваю, что именно учет незаявленных, неосознанных, и несуществующих в моменте требований - это и есть то, для чего привлекается архитектор. Заказчик имеет право НЕ привлекать его к работе, и по-честному - не в каждом проекте архитектор нужен. Просто в последнее время модно везде его пихать и делать вид что без архитекта программисты не знают как код писать с учетом не только FR, но и NFR. Но это - следствие девальвации инженерной профессии в разработке ПО. Раньше - умели!

Так а где в статье вообще говорится о том, что задача архитектора — это только записывать NFR-ы, или что архитектор может не иметь опыта?

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

Так я вроде нигде не описывал, зачем привлекается архитектор или кто он вообще такой. Это вообще отдельная тема для холивараразговора.

Просто, несмотря на то что я во многом не согласен с вашим мнением, я не до конца понимаю, как то, что написано в статье, противоречит вашему видению того, кто такой архитектор.

Сравнивать архитектуру зданий и ПО в принципе некорректно. Архитектура ПО живая — она может меняться и меняется постоянно. В ПО мы не связаны так, как в реальном мире — мы всегда можем перенести конюшню с первого этажа в отдельный загон

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

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

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

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

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

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

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

Другой пример хорошей архитектуры - это человек.

Как раз пример отвратительной "архитектуры".

Вот архитектор вам на то и архитектор, чтобы объяснить ПОЧЕМУ вы должны некоторый ресурс потратить сейчас даже если не видите в этом необходимости. Потому что если этого не делать - тогда это просто инженерия: вот требования, вот нормы, бах-трах, подписывай акт хозяин - мы все сделали. Надо оно вам, не надо оно вам - это не инженера проблема, а заказчика.

У архитектора - задача сложнее. Он должен понять чем заказчик живет и что у него болит. И да, предложить решение в рамках существующих ресурсных ограничений. Например, в СССР архитекторы с учетом ограничений предложили массовое панельное домостроение. А в США - suburbs с деревянными каркасниками. А если все совсем плохо - архитектор может вам вообще сказать что с такими ресурсами ничего строить не получится...

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

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

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

Очевидно, что при проектировании архитектуры необходимо придерживаться общих принципов проектирования - KISS и YAGNI. Но не менее важным является BDUF, при котором необходимо отделять основное от второстепенного с разделением на этапы (планированием) и проектировать не только с учетом контекста, но и с определенными заранее границами. Есть еще принцип DRY, по которому, если говорить об архитекторе, не нужно повторять одну и ту же логику в разных местах, а выносить в библиотеки и модули или, еще лучше, в отдельную функцию. Эти принципы куда более специфичны для архитектуры, чем более общие KISS и YAGNI.

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

Поверьте, если бы все постоянно про это не забывали, я бы этого не добавлял.

Но не менее важным является BDUF

Возможно, у вас какое-то своё понимание BDUF, но традиционно он ассоциируется с Waterfall'ом и тем, что мы дизайним всё и сразу — в противовес эволюционирующей архитектуре.

Есть еще принцип DRY

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

Sign up to leave a comment.

Articles