Являются ли Бог или Природа хорошими программистами? Почему любовь - это Баг?
Многим знакомо объектно-ориентрованное программирование (ООП), в котором есть принципы абстракции, инкапсулирования и полиморфизма, например. Более известна аббревиатура SOLID:
Давайте с вами представим, что мы - боги, которые хотят следующее поколение каких - то животных изменить. Мы хотим изменить их генетический код, хотим сделать их лучше, жизнь их хотим улучшить, или эффективность их жизни.
Я просто решил изучить SOLID, и мне легче понимать на примерах из биологии. Что-то новое я вряд ли скажу, просто интересны сами аналогии. Новое как раз могут сказать программисты, которые зайдут сюда и расширят данную метафору.
Принципы программирования генетического кода в экологии. SOLID. Первая буква S - выбери единственную обязанность изменения кода в этом поколении животных, о Великий Бог!
Давайте с вами двигаться по аббревиатуре SOLID. Первая буква - это принцип единственной обязанности.
Принцип единственной обязанности (Single Responsibility Principle) можно сформулировать так:
Каждый компонент должен иметь одну и только одну причину для изменения.
В C# в качестве компонента может выступать класс, структура, метод. А под обязанностью здесь понимается набор действий, которые выполняют единую задачу. То есть суть принципа заключается в том, что класс/структура/метод должны выполнять одну единственную задачу.
Вроде бы как мы должны применять данный принцип к отдельным органам животного, по этой логике. Но, с одной стороны, животное есть часть стада, стаи, социума, потому он один может быть носитель некоторой функции, которая работает недостаточно и мы хотим её поменять.
На самом деле эта функция должна работать не сама по себе хорошо, ну, например, животное должно максимально размножиться, а при этом не должен порушится весь экологический континуум, животные, среда, вода , воздух вокруг данных животных. Но в явном виде это требование, насколько мне известно, в животных не встроено, то есть, если животному дать волю, неограниченные ресурсы, то оно заполнит весь мир, например, если бы бактерии не умирали от условий внешней среды, уже за полгода бы они заполонили бы весь мир.
Потому в каком то приближении мы можем сказать, что мы можем применить первую букву аббревиатуры Solid к животному, как к целому объекту, а не как к его части. Потому что животное является частью популяции. И, как часть популяции, как носитель кода, оно выполняет главную задачу этого кода, причину существования этой популяции- это размножение.
Каким то образом такой код можно приравнять к компьютерным вирусам. Но насколько принципы SOLID применимы к жизни компьютерных вирусов, особенно тех, кто может менять свой программный код, я не знаю. Если знающие люди есть, расскажите в комментариях. Как происходит эволюция вирусов в компе?
Так как я не знаю, как эволюционируют компьютерные вирусы, то я не могу напрямую перенести эту логику в биологию и мне придется миксовать принципы программирования и принципы биологии, потому местами могут быть просадки в логике, если такие моменты будут, опишите их в комментах.
Давайте представим, что мы хотим так изменить существующее животное, что бы оно лучше размножалось. Для этого нам надо разобраться в том, какие ещё функции у нас выполняет данное животное и связаны ли они с размножением.
Вроде бы как общеизвестно, что основных потребностей у животных три: выживание, иерархия, размножение.
И можно рассматривать это как отдельные функции, а можно, как связанные.
Ведь, С одной стороны,мы должны линейно выполнить два предыдущих: выжить и иерархировать. Это говорит о взаимосвязи функций.
С другой стороны, есть животные, которым выживать и иерархию не нужно:
-подёнки, которые вроде как размножаются все, никакой иерархии и выживания нет, ну или есть моногамные
-сообщества коллективные, у которых выживание определяется структурой стада, а иерархия не нужна, потому что любое животное.
Это нам говорит о том, что размножение - это отдельная функция, не затрагивающая остальные в явном виде.
Нам надо выбрать далее, мы рассматриваем размножение как отдельную функцию или как всё ж таки не отдельную? Я пока рассмотрю как связанную, если вы хотите отдельную рассмотреть, в комментах опишите.
Если рассматривать размножение , как то, что идёт после выживания и иерархии, что являет собой главную причину изменения генетического кода, то размножению, как единственной обязанности, надо делегировать иерархию и выживание другим блокам генетического кода или структуры мозга. Хотя, может, это не делегирование, это наследование?
Если рассматривать размножение, как независящие, то ему делегировать ничего не нужно.
Если мы сначала должны выжить, а потом занять место в иерархии, и уже потом размножиться, тогда кусочки генетического кода, которые отвечают за выживание, не должны повторяться в иерархии, а кусочки кода иерархии не должны повторятся в размножении.
В программировании это означает, что если этот компонент отвечает только за размножиться, остальные функции, без которых не размножиться, компонент должен делегировать другим компонентам. Фактически базовый класс делегирует выполнение отдельных шагов процесса подклассам
Хотя иногда вроде как делегирование - это наилучший принцип для интерфейсов, а не для любых компонентов, классов, функций? Тут я не очень спец, я больше по естественным наукам, чем по программированию.
С другой стороны, это не только делегирование, но ещё и наследование? Какая то путаница. Если размножение будет свои части: выживание и иерархию - выделять в отдельные классы, они наследуются или это отдельные классы? Мне пока непонятно, если у вас есть ответ, напишите.
Давайте, пока этого ответа нет, вместо теории обратимся к практике.
Из практики программирования вроде бы легче вывести различные свойства живых существ. Понятно, что ДНК должно отвечать только за логику хранения данных. Естественный отбор - это валидация того, насколько измененные данные днк улучшают выживание.
При этом днк может уведомлять как организм, в котором оно действует, так и остальных животных вокруг, о том, что данные изменения привели к хорошим результатам. Скажем, данный самец стал альфой и потому у него серебристая спина.
Обработка ошибок - это что -то из разряда не дарвиновского наследования, ламаркизм. Когда изменения если не в коде, но в способах его чтения, могут быть развиты при жизни особи. Про логгирование, парсинг и маппинг знаю мало. Могу только сказать, что логирование это скорее инфа не для самого организма, а для окружающих людей, например. врачей или зоологов. Само животное может не понимать, что происходит.
Так является ли бог хорошим программистом?
Что ж, пока получается, что если мы хотим вменить организму функцию лучшего размножения, и прописать её в геноме, то лучше, если при этом будут улучшены функции выживания и иерархии, но это не точно. Это и есть первая буква принципа SOLID.
Однако я должен пока сказать, что природа сделала ровно наоборот, и частенько никакого улучшения размножения при улучшении выживания или иерархии, или при усилении иерархической борьбы не происходит.
Валидация случаев, когда одновременно максимально удовлетворяются все три потребности, не производилась. Механизма уведомления организма, что удовлетворение одной потребности мешает удовлетворению другой, нет. Прижизненная обработка ошибок в ДНК невозможна. Хотя есть некий ламаркизм.
Это приводит, например, к тому, что, чем лучше удовлетворены иерархическая потребность и выживание, тем меньше тебе нужен рядом находящийся половой партнёр для выживания или выпендрежа. Он нужен тебе только для любви. А любовь - это половой отбор. И если ты такой крутой и успешный, то мало кто тебе равен, как особи. А уж если ты самка, то вообще вокруг только каждый десяти тысячный тебе подходит для бесплатного быстрого репродуктивного секса при первой встрече....А на второй тебе уже этот самец не интересен, ушёл огонёк. И вот мы уже оказываемся в мышином рае 25.
В принципе, об этой ошибке Бога у меня целая есть отдельная подробная статья .
В принципе, какое то исправление этого бага есть, у животных половой отбор ускоряется только тогда, когда последующий год в несколько раз более урожайный, чем этот. Это некоторая обработка ошибок, а то и логгирование, когда лог ресурсов из прошлого года сравнивается с этим и происходит изменение в функции размножения. Бывает это редко, и потому полигамия включается редко. И потому мышиного рая 25 не происходит. Но у людей то это встречается часто! Достаточно часто если уж поколение новое живет не в два раза лучше предыдущего, то хотя бы заблуждается, что живет, имеет гордыню, юношенский максимализм, заблуждение, что живет много лучше. И потому включается усиленный половой отбор, а если так делать несколько поколений, то , кроме всего прочего, требования к половому и тем более брачному партнёру растут, как на дрожжах, и вот уже никто тебе не подходит. Популяция вымирает.
И что делать с точки зрения изменения генетического кода? Что нужно менять в особях, что бы не было мышиного рая 25? Чего не хватает? Логгирования? Механизма уведомлений пользователя о том, что он перешёл на другую половую программу, несовместимую в конечном счёте с его размножением?
Кроме того, часто размножение, иерархия и выживание могут мешать друг другу не только через механизм усилиения полигамии при повышении ресурности и защищенности внешней среды...Но и через разные странные пересечения физиологии и генетики.
Например, стимулирование центра боли, а иногда унижения, стимулирует рядом находящийся центр секса. Вроде бы выживание и иерархия не должна приносить боль и унижение! Но садо мазохисты думают иначе...