Работа над ошибками, или Как выйти из тупика?

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

Перезагрузка, горячий перезапуск, рестарт. Любому айтишнику не важно, начал он с БЭСМ или уже со смартфона: «перезагрузка» — слово знакомое и наполненное вполне прикладным смыслом. Однако на сей раз не о прикладном аспекте. Почему бы не посмотреть на вопрос несколько шире, чем обычно? Постараемся раздвинуть рамки понятия «перезагрузка» до философии в позитивистском ключе. Например, если в теории катастроф под катастрофой подразумевается качественное изменение параметров системы, скажем, переход количества в качество, то здесь речь идет скорее о достижении некоего тупикового состояния и способе выхода из него. Итак, начнем.

Состояние перед перезагрузкой

Для начала следует понять, что же такое «предперезагрузочное» или «зависшее» состояние и в чем его отличительные черты.

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

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

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

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

Развитие системы

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

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

Оппозитно, состоянию смерти можно трактовать «Жизнь» как непрерывную смену состояний системы. То есть на стреле времени живая система постоянно «прыгает» из состояния в состояние. Для нее есть «до» и есть «после». Система жива. Тут и возникает риторическое замечание: «Мало жить. Как жить?» По всей видимости, и застой, и развитие, и катастрофы можно охарактеризовать как специфические типы переходов из состояния в состояние живой системы.

Предлагаю опять же обратиться к интуитивно понятным примерам. Вот, скажем, человек. Он родился, живет, ходит в детский садик. С каждым днем он выговаривает все больше слов. Играет в развивающие игры, и тут — бац. Школа. Теперь он учится, переходит из класса в класс. И снова — бац. Институт, работа, пенсия. Каждый раз были этапы стабильности, а между ними — качественные скачки. Теперь другой пример. Не пошел человек в институт, а выбрал военное училище. Поехал воевать в далекую страну, стал местным героем, и выбрали его в итоге местным лидером. В социуме про такие ситуации говорят: «жизнь круто поменялась». Смысл тоже вроде понятен. А вот еще некий Вася. Он, наоборот, пошел после школы в ПТУ, стал там хорошим сантехником, полюбил алкоголь и 50 последних лет жизни работал в районном ЖЭКе. Как-то вроде он и функционировал, но глядя на Васю как на социальный организм его состояние нельзя назвать развитием. Теперь предлагаю то же самое рассмотреть с точки зрения некой формализации. Пусть это будет система «Человек».

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

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

«Эволюция». Здесь, на стреле времени, происходит изменение того подмножества состояний, в котором система сейчас «циклится». Я использую понятие «цикл» не в примитивном понимании, именно как последовательный обход состояний, а скорее, как некое блуждание в ограниченном подмножестве состояний. Однако за каждый переход «элементарный шаг» — если угодно, количество выбывших и вошедших в цикл состояний — много меньше, чем количество уже вовлечённых в цикл состояний. Самый близкий пример — процесс питания. Мы созданы из того, что едим, и за бесконечное время все наши атомы должны замениться. Но процесс поступления и вывода материи весьма умеренный, и мы сохраняем свою целостность как система, хотя и эволюционируем.

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

Итак, перезагрузка

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

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

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

Смысл перезагрузки

Теперь представим себе ситуацию, когда зависание все же произошло. Какая может быть самая простая стратегия реагирования? «Господи! Как я тут оказался?» Дальше, видимо, следует подумать, как и где была сделана ошибка. Фактически это обратный прогон действий до состояния, когда все было хорошо. Затем нужно вспомнить, что система у нас вероятностная (стохастическая), то есть все переходы возможны, но с разными вероятностями. При «отмотке» назад и повторном запуске есть шанс попасть в другую ветвь переходов. Вспомним экзамены в вузе. Попадается билет, который не выучил, надо идти на переэкзаменовку, где будет перезапущена ветвь ответов. Как минимум выучить этот неудачный билет, ибо вдруг экзаменатор тебя запомнил и вероятность вопросов по нему близка к единице.

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

• Во-первых, мы теряем набор достигнутых состояний системы. Например, абзац из этой статьи. А может, хорошее и обжитое за много лет место или даже дело.

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

Однако в перезагрузке есть необходимость. Ведь чем характеризуется состояние зависания? «Мы уже не можем эволюционировать». То есть сама себя, на основании смены состояний, система уже не может вывести на режим развития. Пройдя точку невозврата, бесполезно вычленять отдельные факторы и говорить, что если бы вот это фактор был другим, то все бы было иначе. Хочется спросить, кто это вам его «пододвинет»? Каждый фактор был именно таким, каким он должен был быть при том режиме функционирования системы. Тут возникает вопрос: коль скоро в сложных реальных системах нет ничего детерминированного, что считать моментом начала «зависания»?

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

Дел в том, что, например, наш организм постоянно подвергается влиянию «враждебной руки» микробов. Они действуют с таким упорством, которому некие более осязаемые «враждебные руки» могли бы позавидовать. Однако даже немолодой, но тренированный организм на это никак не реагирует. Напротив, даже молодой, но хилый организм чувствителен ко всему. Фактически речь идет о том, что коль скоро любая система существует во взаимодействии с другими, то на нее влияет поток внешних воздействий. Это и есть то, чем занимается теория управления. Правда, в своем классическом виде она оперирует такой же классической математикой «осьмнадцатого» века. И многие под ТУ понимают именно это и только это. Если же посмотреть на вопрос шире, то наша дискретная стохастическая система как часть универсума постоянно подвергается его воздействию. Если обобщить все, что там вовне происходит как некий «ветер», становится понятно, что он бывает как попутным, так и встречным. Отсюда получаем набор вариантов:

• В идеальной ситуации «безветрия» интервал «застоя» будет стремиться сжаться в атомарное состояние. В принципе вероятностные процессы самой системы всегда не дадут ему сойтись. Будет некая зона, характеризуемая как эволюция или коллапс с вероятностью ХХ процентов.

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

• При «встречном ветре» поднимается верхняя граница. Опять же применительно к экономике можно стагнировать, даже имея некий эволюционный потенциал. Если он оказывается не достаточным, то система так или иначе находится в зоне застоя.

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

Опубликовано 04.02.2016

Похожие статьи