Как стать автором
Обновить

Ограничение проектирования систем на уровне сознания

Время на прочтение11 мин
Количество просмотров20K
Я рад приветствовать вас, дорогие читатели.

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

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

Несколько слов для аудитории

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

Занимательный эффект


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

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

Иногда, подолгу размышляя над решением задачи и не приходя к нужным результатам, я бросал все, считая, что задача слишком сложна, что я не могу прийти к лаконичному решению. Я думал, что стоит отложить все на время, чтобы дать возможность себе отдохнуть. Самое интересное начиналось дальше — я мог делать все что угодно, но решение приходило спонтанно. Я думаю многим знакомо это ощущение, когда идея внезапно возникает в сознании, захватывая полностью разум: представьте себе, вы читаете книгу или статью и, отвлекаясь от чтения (но «читая глазами текст»), вдруг понимаете, что ваше сознание полностью заполнено некими мыслеобразами, анализируя которые, вы приходите к впечатляющему выводу — я так долго искал это решение!

Однажды я прочитал знаменитую статью Алана Тьюринга «Могут ли машины мыслить?» и столкнулся с утверждением, которое в очередной раз заставило меня подумать над всплесками активности моего сознания:

«Можно сказать, что человек «вставляет» в машину ту или иную идею, и машина, прореагировав на нее некоторым образом, возвращается затем к состоянию покоя, подобно фортепианной струне, по которой ударил молоточек. Другое сравнение: атомный реактор, размеры которого не превышают критических. Идея, вводимая человеком в машину, соответствует здесь нейтрону, влетающему в реактор извне. Каждый такой нейтрон вызывает некоторое возмущение, которое в конце концов замирает. Но если величина реактора превосходит критические размеры, то весьма вероятно, что возмущение, вызванное влетевшим нейтроном, будет нарастать и приведет в конце концов к разрушению реактора. Имеют ли место аналогичные явления в случае человеческого разума и существует ли нечто подобное в случае машин? В первом случае, кажется, следует дать утвердительный ответ. Большинство умов, по-видимому, являются «подкритическими», т.е. соответствуют, если пользоваться приведенным выше сравнением, подкритическим размерам атомного реактора. Идея, ставшая достоянием такого ума, в среднем порождает менее одной идеи в ответ. Несравненно меньшую часть умов составляют умы надкритические. Идея, ставшая достоянием такого ума, может породить целую «теорию», состоящую из вторичных, третичных и еще более отдаленных идей.» (Алан Тьюринг «Могут ли машины мыслить?», VII. Обучающиеся машины)

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

От занимательного эффекта к серьезному изучению


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

Скажу откровенно, в моменты осознания скорее я думал о чем угодно, но только не о работе.

Иногда у меня возникали странные философские мысли, что тело является тонким клиентом, а все вычисления происходят где-то «в облаке», и мы можем лишь желать, инициировав «поисковый запрос» системе. Ведь по большому счету так оно и было, эмпирически я не мог осознанно найти путь между задачей и ее решением, так как мои попытки решений были локальными и не имели масштабного значения. Иными словами, проектируя отношения в базе между несколькими таблицами, невозможно осознать, какой должна быть структура в целом. Но парадокс существовал и не давал мне покоя, я часто подолгу сидел ночами, выискивая материалы по теме, я хотел разобраться в чем причина. «Может быть я схожу с ума?», — это тоже была одна из рабочих версий =).

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

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

Эксперименты и основные выводы


На основе ряда экспериментов я сделал следующие выводы:

1. Сознание = функциональная логика

Ядро нашего сознания (то, что мы называем наше «Я») несет в себе функциональную логику и не обладает памятью. Ядро сознания оперирует образами, которые мы осознаем как собственное воображение. С точки зрения наблюдаемых мною зависимостей, система (воображение) состоит из нескольких уровней — собственно, ядро сознания и область сверхоперативного доступа к информации.

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

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

2. Разрушение образа

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

3. Восстановление образа

Для того, чтобы противодействовать деградации детализации, ядро нашего сознания обращается к сверхоперативной памяти с целью восстановить в кратчайшие сроки утраченную информацию. Это своеобразный «кеш» или «регистры» нашего сознания и объем этого информационного банка крайне ограничен!

4. Ограничение объемов «кеш-памяти»

Размер области сверхоперативной памяти сильно ограничен. Чтобы проверить ограничения собственного «кеша» можно провести простой эксперимент:

Представьте себе маленький шарик, для вас очевидно, что он один. Затем последовательно представляйте хаотично разбросанные (не образующие группы) шарики, не считая их количество, а четко понимая сколько их, например: два, затем три, четыре, пять… до тех пор, пока вы не осознаете, что не можете удержать это количество в воображении и не можете сказать сколько их, опеределяя их количество как «много». Это и есть предел. Бо́льшим количеством элементов сознание не может оперировать, переходя на уровни абстракции.

4.1. Простые следствия ограничения

Чем меньше объектов, тем проще восприятие (ниже порог вхождения).

На мой взгляд, религия разрабатывалась именно с целью уменьшения количества основных объектов (триединство и т.д.), чтобы сделать идею доступной 100% населения.

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

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

5. Переход к абстракциям

Абстрагирование как базовый элемент оптимизации: когда наше сознание нативно подходит к ограничениям объема сверхоперативной памяти, происходит процесс объединения элементов в абстрактные объекты. Например, вы представляете себе все те же шарики, один, два, три… но затем естественным для вас образом начинаете группировать их в образе в ряды и столбцы, образуя три ряда по три шарика, четыре по три, затем 5х5 и т.д., при этом не сомневаясь в том, что вы явно осознаете без счета их количество. На самом деле ядро сознания абстрагирует набор конкретных элементов в один абстрактный объект, при этом не имеет значения сам образ (строка из элементов, матрица из элементов и т.д.), важно лишь количество образов, выделяемых как сущность.

На нашей планете порядка 7 000 000 000 отдельных личностей, но мы воспринимаем их как «человечество».

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

Это означает, что существует физический предел сложности проектирования систем, имеющий в основе ограничение на уровне сознания разработчика.


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

6. Временное увеличение «кеш-памяти»

Сознание может пребывать в состоянии временного увеличения объема сверхоперативной памяти. Это и есть причина всплесков производительности. В некоторое временно́е окно ядро сознания начинает работать в каком-то ином режиме (состояние транса, вдохновение, муза — называйте кому как угодно, лично я предпочитаю термин «дзен»), в котором оно способно захватить и оперировать значительно более сложными образами, чем в стандартном режиме. В эти моменты мы можем наблюдать то, что принципиально не видим в нормальном состоянии. Идеи более яркие, впечатляющие, значительно более масштабные и детализированные, решения мгновенны, картина четкая и ясная. Это своего рода форсаж, временное увеличение адресации памяти нашим «цпу», позволяющее «запустить более объемное ПО».

Логическое мышление является механизмом входа в состояние транса. Когда мы многократно обдумываем пути решения, повторяя цепочки причинно-следственных связей в нашем воображении, то мы невольно являемся инициаторами своего рода полиморфизма в механизме ядра и сферхоперативной памяти. Для нашего «Я» такая подмена заметна лишь по косвенным признакам (например, замечая, что работа идет на ура).

Наверняка где-нибудь видели (например, в документальных фильмах), как шаманы произносят повторяющиеся фразы нараспев погружаясь в транс… Наверняка встречали информацию по погружению в гипнотическое состояние… А не тоже самое ли мы делаем, когда в состоянии концентрации раздумываем над алгоритмом, постоянно прокручивая аналогичные логические цепочки в воображении, а затем часто, сменив контекст (вид деятельности) мы в изумлении начинаем «видеть»?

Не зря фраза звучит именно так: «У меня возникла / появилась (мгновенно) идея!», вместо «я долго работал и собрал идею из мыслей».

7. Уровни хранения интерпретируемой информации

Общая схема уровней работы сознания по увеличению латентности доступа:
— Ядро («Я вообразил!»)
— Сверхоперативная память («Я представляю и вижу образ неизменным»)
— Обычная память («Секунду, сейчас вспомню… Да, точно, вспомнил!»)
— Внешняя память («Подождите, не так быстро. Я запишу.»)

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

8. Связи тоже объекты

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

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

9. Переосмысление старых принципов

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

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

Еще я бы добавил: если вы видите «спагетти»-код, это не значит, что логика его исполнения в чем-то плоха, и он написан садистами-извращенцами. Это просто говорит о том, что количество функциональных элементов и взаимосвязи между ними не умещаются в области сверхоперативной памяти вашего сознания, и вы не можете представить и осознать картину в целом. В свою очередь из этого следует: либо автор крайне одаренный индивид, который допускает удобство разработки сложных запутанных и неочевидных для стороннего наблюдателя / читателя алгоритмов в погоне за какими-то субъективно выбранными критериями (метапрограммирование, рефлексия?), либо вы изучаете систему не на том уровне абстракции, залезая в дебри реализации и заполняя область сверхоперативной памяти низкоуровневыми объектами, тем самым, повышая порог вхождения, так как разработчики оперировали при проектировании более высокоуровневыми объектами: модули, структуры, объекты, агенты и т.д.

P.S.

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

Пускай, эта небольшая заметка будет подобна нейтрону, влетевшему в реактор вашего сознания.

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

И напоследок: весь смысл в том, что мы можем искать смысл ;)
Теги:
Хабы:
Всего голосов 128: ↑118 и ↓10+108
Комментарии96

Публикации

Истории

Работа

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань