Intelligent Systems Architecture – Telegram
Intelligent Systems Architecture
1.06K subscribers
29 photos
6 files
54 links
Про архитектуру и принципы построения систем на основе искусственного интеллекта — от моделей до AI-платформ.

Контент в канале защищён авторским правом.

Геннадий Круглов
@GKruglov
Download Telegram
«Чтобы лучше разглядеть гору, необходимо спуститься в долину. Чтобы рассмотреть долину, нужно подняться на гору». Принято считать, что это высказывание принадлежит Никколо Макиавелли

Кажется, всё очевидно и просто. Однако, мы часто замечаем, что при проектировании систем архитекторы и те, кто исполняет эту роль, не видят надсистемы и не учитывают интересы ключевых стейкхолдеров, как и не умеют выполнять декомпозицию на подсистемы.
👍3
Альтшуллер впервые предложил системный оператор в книге «Творчество как точная наука», 1979 г. Приведу несколько цитат и иллюстраций из этой книги:
«Технические системы существуют не сами по себе. Каждая из них входит в надсистему, являясь одной из ее частей и взаимодействуя с другими ее частями; но и сами системы тоже состоят из взаимодействующих частей - подсистем.

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

Впрочем, этого мало - на каждом этапе необходимо видеть линию развития: прошлое, настоящее и будущее (рис. 8).»
👍2
Забегая немного вперёд, хочу сказать, что умение переходить от системы к надсистеме и подсистемам, то есть перемещаться по системным уровням, повышать или понижать уровень абстракции — это главный навык системного мышления.

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

@IndustrialSoftwareArchitecture
👍2
Часто в одном предложении или высказывании можно увидеть как высокоуровневые абстракции, так и детали реализации на конкретном языке программирования. Такое смешение уровней абстракции значительно усложняет восприятие информации и затрудняет коммуникацию. Это довольно распространённая ошибка. И это свидетельствует о наличии "каши в голове».
👍2
Важно отметить, что на самом деле системы, надсистемы и подсистемы — это всё системы. То, чем является система в данный конкретный момент — надсистемой, подсистемой или собственно системой — зависит от уровня рассмотрения и от того, какая именно система интересует нас в данный момент. Чуть позже мы вернёмся к этому вопросу и добавим немного деталей.
В разных источниках системный оператор изображается по-разному. Мне нравится вариант, который представлен в книге Владимира Петрова «Талантливое мышление. ТРИЗ». Он привлекателен тем, что в этом варианте удобно отображать особенности программных систем. И на следующем шаге мы это увидим.

А сейчас приведу цитату из этой книги и ещё немного порассуждаю о системном операторе.
«Человек с рутинным мышлением рассматривает только саму систему. Более углубленный подход – выявить и исследовать части, из которых состоит система – подсистемы. Опытные люди выявляют, куда входит система, – определяют надсистему и окружающую среду. Это иерархическая структура»
👍2
#ИМХО #оффтоп

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

Помимо преимуществ, независимость и автономность может вызывать странные эффекты, истреблять холизм и разрушать целостность систем.

Что это значит на практике? На практике это означает невозможность успешной реализации крупных программ и масштабных кросс-продуктовых инициатив.
👍5🤔2😱1💯1
В посте выше я употребил термин «холизм». Давайте вспомним, что он означает.

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

"ХОЛИЗМ (греч. holos - целый) - понятие, связанное с разработкой в 20 в. системной методологии и системной парадигмы в познании. ...
Холистическая позиция заключается в приоритетном рассмотрении целого с точки зрения возникающих при взаимодействии элементов в системе новых качеств или целостных свойств, отсутствующих у составляющих систему ингредиентов." (Новейший философский словарь, А. А. Грицанов, 1999 г.)

В википедии даётся уточнение возникновения этого понятия:
"В узком смысле под холизмом понимают «философию целостности», разработанную южноафриканским философом и политическим деятелем Я. Смэтсом, который ввёл в философскую речь термин «холизм» в 1926 году, опираясь на идею, которая восходит к «Метафизике» Аристотеля, что «целое есть нечто помимо частей»".
👍2
Холистический подход вполне можно назвать системным. Приоритет в этом подходе отдаётся рассмотрению целого. При решении задач, в размышлениях и рассуждениях мы удерживаем в фокусе целое. Мы не сводим систему только к сокупности отдельных её элементов.
Сейчас в разных областях деятельности развивается междисциплинарность. Междисциплинарность предполагает использование холистического подхода.

Хороший пример — междисциплинарная медицина. Холистический подход в медицине предполагает проведение профилактических глубоких исследований и рассмотрение человеческого организма как единого целого, объединяя различные клинические направления.

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

Мы рассматриваем бизнес-архитектуру, архитектуру приложений, архитектуру данных и другие «архитектуры» как разные части единой архитектуры системы.
👍4
Холизм противопоставляется редукционизму. Что такое редукционизм мы рассмотрим в следующих постах.
"РЕДУКЦИОНИЗМ (от лат. reductio) — методологический принцип, согласно которому сложные явления могут быть полностью объяснены на основе законов, свойственных более простым." (Большой Энциклопедический словарь, 2000)

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

Мы разберём всю эту теорию на практике, включая её применение к модульным монолитам и микросервисам.
Познать сложную систему во всех деталях невозможно.

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

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

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

Холистический подход также называют целостным.
👍3
#ИМХО #оффтоп

Современная литература по архитектуре программных систем, включая книги по эволюционной литературе - это сплошной редукционизм. Рассмотрение архитектуры ведётся от кода, от кодовой базы. Авторы не просто за деревьями леса не видят, они не видят деревьев за ветками и листьями. Это, на мой взгляд, серьезная проблема.

У меня есть только одна гипотеза, почему так происходит. Я думаю, что литература "от кода" имеет потенциально больший охват и, конечно, продажи. Это подход, ориентированный на продажи.
👍4
А теперь вернёмся к системному оператору и разберёмся с сутью его «экранов». Также обсудим, в чём заключается преимущество системного оператора и что он не показывает в явном виде.
Понял, что нужны примеры. Не терпится их привести. После работы сегодня поделюсь несколькими кейсами системного (холистического) подхода и несистемного (Как бог на душу положит)
👍4
#кейс
Неудачный кейс:

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

Меры:
Оптимизация запросов, тюнинг базы данных.

Ошибка:
Изоляция наблюдаемого явления — медленное выполнение запросов и постоянная деградация производительности — и попытка устранения этой «проблемы» изолированно.

Результат:
Возможности оптимизации запросов и тюнинга базы данных исчерпаны, но выполнение запросов продолжает замедляться. Время потеряно...

В системном подходе:
Посмотреть на проблему шире, в целом. Возможно, стоит оптимизировать алгоритмы или сценарии бизнес-процессов (на более высоком уровне, в надсистеме), чтобы устранить такие «тяжелые» запросы (в рассматриваемой системе) в принципе. Или, например, проанализировать характер запросов и рассмотреть возможность смены типа базы данных, допустим, с реляционной на колоночную.
👍2