Pull to refresh

Comments 28

Не приведено ни проблем ни личного опыта. Ну, архитектура должна быть бизнес ориентированной. Хорошо...

Некий mindmap, набор абстрактных рекомендаций

Ну это, как бы "by design": когда пытаешься вывести принципы - они будут абстрактными. Но я всё таки постарался кратко привести некоторые примеры ошибок и кейсов.

Но думаю может в будущем сделать ещё статью о применении этих принципов на конкретном примере.

Повторю еще раз мысль которую продвигаю по поводу и без. :-) Архитектура - это учет сейчас ограничений, которые не описаны, неизвестны, и может быть даже еще не существуют. Проектирование с учетом нефункциональных требований которые уже записаны - это простая (на самом деле НЕ простая, но все же инженерная!) задача. А еще архитектура - это искусство компромиссов. Потому что бесплатных улучшений не бывает. Если вы заложите гибкость там где она не нужна - это лишние затраты. Если вы не заложите гибкость там где она потом понадобится - это переделки и еще большие затраты. Задача архитектора - провести продукт по струнке между "over-engineered" сейчас и "better discard and develop from scratch" послезавтра.

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

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

Как раз все более менее понятно - из стратегии продукта и фирмы.

Интересно , а инженеры проектирующие мосты, самолеты , заводы , электростанции работают по таким же принципам выбора архитектуры при эскизном проектировании ?

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

В этом и состоит вопрос вопросов - почему IT-инженерия считается отдельной отраслью инженерии?

Вспоминается классическое - "Если бы программисты строили дом".

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

Так я уже ответил на эту вашу "заковырку".

1. Есть "задача-проект". Построить типовой дом \ типовой сайт (с прицелом чтобы его удобно было эксплуатировать).
2. Есть "задача-процесс". Создать МКС, написать "сайт" facebook.

Прикол в том, что большинство "настоящих инженеров в физическом мире" - работают над задачами типа "1" - типовой дом по проекту ХХ.YY.NNNN, только на 2 метра длиннее.

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

То есть суть работы "типового физического инженера" и "типового IT-инженера" довольно существенно отличается.

суть работы "типового физического инженера" и "типового IT-инженера" довольно существенно отличается.

Да, всё именно так . тут соглашусь, и вряд ли ситуацию можно как то изменить

https://rutube.ru/video/899db0d951e205bda942a1dba77e44de/?r=a

Неплохо. Хоть ктото догадался что архитектуру (систему) надо проектировать в разных разрезах. Но отсутствует связь между вот таким ТЗ и собственно кодом - какие паттерны применять и почему

Типа как нарисовать сову? :)
Да, возможно попробовать сделать некоторый навигатор по паттернам на основе ответов на ключевые вопросы, но все таки архитектура ПО не такой hard science, как например написание кода, поэтому там всегда будет место для свободного полета мысли.

UFO landed and left these words here

Следуем общему принципу каскадности — решения более низкого уровня основываются на том, что стоит на более высоком уровне.

Новые, прорывные, пионерские продукты имеют перевёрнутую пирамиду чем у вас. Всё начинает с кода. - (Facebook, YouTube, Google) , а дальше куда вывезет!

Если вы оттолкнетесь от принципов, перечисленных в статье, ваша архитектура перестанет быть произвольной, переусложненной, недостаточной.

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

Это касается "типового программостроения". Оно довольно однообразно строится и также без сожаления сносится потом.

Прорывные продукты делает 0 01% программистов.

Возможно и меньше 0.01% - но тем удивительнее их появление, которое переворачивает пирамиду!

1) Исключения есть всегда и везде и, как известно, они лишь подтверждают правило.

2) Эти прорывные продукты и придуманы программистами, то есть, они и есть заказчики продукта. И они думали о нем КУЧУ времени, делали много исследований перед тем, как начать реально писать продукт. Так что не такая она и перевернутая, много частей этой пирамиды у них в голове.

1) Исключения есть всегда и везде и, как известно, они лишь подтверждают правило.

Это так, но это неверно. - Более строго "исключение подверждает наличие правила, а вовсе не верность этого правила."

2) Эти прорывные продукты и придуманы программистами, то есть, они и есть заказчики продукта.

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

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

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

Кстати, сегодня в одной рассылке пришёл мне такой текст. Почему сегодня?- я не знаю. Но так произошло:

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

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

Обычно процесс выглядит примерно так:

1. Глубоко поймите проблему.

2. Определите точное решение.

3. Создайте осознанный и предсказуемый опыт.

4. Поставьте готовый продукт, который ведет себя именно так, как и ожидалось.

Но, как замечает Патрик Морган, ставший дизайнером и писателем, некоторые из лучших вещей на Земле были изобретены не так. Большинство по-настоящему монументальных изобретений начинались не с проблемы, а с наблюдения.

Александр Флеминг не собирался открывать антибиотики ; он просто заметил странную белую плесень, растущую в его чашке Петри (привет, пенициллин).

Заметки на стикерах были неудачным экспериментом с клеем .

Даже LLM, отмечает Морган, вероятностны, а не детерминированы — они сопротивляются полному пониманию, и их результаты всегда немного неожиданны (по замыслу). Проблемы, которые они решают, все еще остаются в некотором роде TBD .

История Моргана сосредоточена на разработке опыта ИИ, но, я думаю, что суть в том, что каждый может принять близко к сердцу: иногда лучшие решения приходят, когда вы просто следуете своим инстинктам, делаете то, что вам интересно, и выясняете, где вы можете использовать это позже. «Решения в поисках проблем» не всегда являются пустой тратой времени.

Имея это в виду, Морган меняет свой процесс проектирования. Вместо того, чтобы начинать с проблемы, он начинает с намерения.

1. Имейте намерение — представление о том, чего вы пытаетесь достичь.

2. Экспериментируйте, повторяйте и двигайтесь вперед, не имея особой ясности.

3. Откройте для себя неожиданный прорыв — он работает, но не так, как вы думали.

4. Вы изучаете прорыв, совершенствуете его, а затем выясняете, почему он работает.

(Харрис Соккель)

Не согласен с вами насчет Facebook, Google, YouTube: все эти продукты хоть и были созданы программистами, но их архитектура и то, как они создавались - было основано на довольно понятных целях чего хотели авторы. Авторы YouTube делали сервис знакомств с видео - от этого им надо было решить как это видео хранить и показывать.

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

И я не стал бы делить продукты на 100% инновационные и 100% типовые. Да, большинство не пишет БД и языки программирования, не создает сверхнагруженные софт для Гугл, и не обучает новые нейронки, но задач достаточно сложных хватает.

Не согласен с вами насчет Facebook, Google, YouTube: все эти продукты хоть и были созданы программистами, но их архитектура и то, как они создавались - было основано на довольно понятных целях чего хотели авторы. Авторы YouTube делали сервис знакомств с видео - от этого им надо было решить как это видео хранить и показывать.

Вот вы сами написали, что они делали, - сервис знакомств с видео (YouTube), сервис для обсуждения студенток универа (Facebook), и алгоритм ранжирования страниц (BackRub - он же потом Google) - и вот вопрос- этот их код породил потом тех гигантов что они стали сейчас или что?

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

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

То есть можно переиначить известное "Когда б вы знали, из какого сора. Растут стихи, не ведая стыда" в " Когда б вы знали, из какого кода растут системы, покоряя мир".

В целом не буду спорить - цепочка в стартапах частая: создаем какой продукт, решаем, что его можно переиспользовать для другого рынка, более широкой аудитории, гипотеза оказывется успешная, и вот наш велосипедик должен гнать по трассе под 150км/ч.

можно переиспользовать для другого рынка

Верно. Другой рынок:

"О. вместо со своими бывшими сотрудниками за невероятно короткий срок сумел построить миллиардный банковский бизнес в Мексике. Их финтех-компания Plata стала первым единорогом в Латинской Америке с 2022 года"

решения более низкого уровня основываются на том, что стоит на более высоком уровне

И прям сразу за этим рисунок, где всё наоборот. Ну как же так)

Хаха, я только сейчас заметил... Пирамидку хотелось на основание поставить.

Выходит, я один читал вашу статью внимательно и вдумчиво, а вы даже плюсик мне не поставили. Нехорошо)

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

Да, согласен пирамидка видимо не удачная метафора тут совсем

Если поменять названия слоев местами, то все будет хорошо. И заодно взять меня на работу.

Забавно наблюдать, как люди в комментариях, даже у статей, где суть описана в названии, продолжают сетовать на отсутствие "волшебной таблетки" в тексте. В том или ином виде.

Автору - спасибо)

Sign up to leave a comment.

Articles