Как программист читает «Происхождение видов» Дарвина
Во время чтения «Происхождения видов путем естественного отбора» Чарльза Дарвина, меня не покидало стойкое дежавю. Позже я понял, что механизмы, описанные в книге сильно коррелируют с механизмами enterprise разработки в больших компаниях. Где в качестве условий окружающей среды выступают постоянно меняющиеся бизнес-требования и программисты, а в качестве организмов — код.
Для лучшей демонстрации этой идеи, я взял параграф из книги Дарвина и биологические термины заменил на термины из мира разработки. Сами предложения остались оригинальными. Язык немного специфичный, но в целом, думаю, понятный.
Глава V. Законы вариации. Краткий обзор
Наше незнание законов вариации глубоко. Ни в одном из 100 случаев мы не можем определить причину, почему та или другая функция изменилась. Но во всех случаях, где мы обладаем средствами для сравнения, оказывается, что образование меньших различий между разновидностями одного компонента вызывается действием тех же законов, что и больших различий между компонентами одной библиотеки. Перемены в условиях обычно вызывают только колеблющуюся вариабельность, но иногда ведут к прямым и определенным результатам: и эти результаты с течением времени могут сделаться более сильно выраженными, хотя в пользу этого еще не имеется достаточного доказательства. Привычка — в образовании конституциональных особенностей, использование — в улучшении функции и неиспользование — в их деградации и уменьшении во многих случаях кажутся мощными в своем действии.
Части гомологичные склонны варьировать одинаковым образом, а равно и связываться друг с другом. Модификация частей внешнего интерфейса действует на части внутренней структуры. Когда одна какая-нибудь часть сильно развивается, она, возможно, отвлекает ресурсы разработки от с нею смежных частей, и всякая часть структуры приложения, которая может быть устранена без ущерба, будет устранена. Изменения в строении в раннем возрасте могут воздействовать на части, развивающиеся позднее; несомненно, встречаются многочисленные случаи коррелятивной вариации, природу которой мы не способны понять. Части, многократно повторяющиеся, изменчивы как в своем числе, так и в строении, и это, вероятно, проистекает из отсутствия строгой специализации таких частей для какой-либо особой функции, так что их модификациям не препятствовал естественный отбор. Последствием этой же причины, быть может, является факт, что программные продукты, стоящие на низших ступенях зрелости программного продукта, более изменчивы, чем вышестоящие, вся структура приложения которых более специализирована. Функции рудиментарные, будучи бесполезными, не подпадают под действие естественного отбора и поэтому изменчивы. Признаки компонентов, т.е. признаки, которыми компоненты одной библиотеки стали различаться с того времени, как они ответвились от общего предка, более изменчивы, чем признаки библиотечные, т. е. такие, которые унаследованы издавна и у которых на протяжении указанного периода не возникали различия. В этих замечаниях мы касались специальных функций или частей, но тем не менее изменчивых, потому что они варьировали еще недавно и вследствие этого становились различными;, но во II главе мы видели, что тот же принцип применим и к проекту в целом. Мы убедились, что в области, заключающей много компонентов данной библиотеки, т. е. где недавно происходило значительное изменение и дифференцировка или где активно шло производство новых форм компонентов, в такой области и у таких компонентов мы и в настоящее время встречаем в среднем наибольшее число разновидностей. Сигнатуры функций очень изменчивы; они же сильно различаются у компонентов одной группы. Изменчивость одних и тех же частей структуры приложения обычно была полезной как для образования сигнатур функций между двумя протоколами взаимодействия одного компонента, так и образования компонентных различий между компонентами одной библиотеки. Всякая часть или функция, чрезмерно или исключительным образом развитые по сравнению с той же частью или функцией у родственных компонентов, должны были подвергнуться модификации в необычайных размерах со времени возникновения этой библиотеки; отсюда нам понятно, почему они еще часто изменчивы в гораздо более значительной мере, чем другие части, так как вариация представляет медленный и долго длящийся процесс и естественный отбор в подобных случаях не располагал до сих пор достаточным временем, чтобы осилить тенденцию к дальнейшей изменчивости и реверсии к менее модифицированному состоянию. Но когда компонент с необычайно развитой функцией сделался родоначальником многочисленных модифицированных потомков, что, согласно моему взгляду, должно быть крайне медленным процессом, требующим огромного промежутка времени, то в подобном случае естественный отбор уже успел сообщить этой функции постоянные черты, несмотря на необычайность её развития. Компоненты, унаследовавшие от своего общего предка почти одинаковую конституцию и подвергшиеся воздействию сходных условий, естественно, имеют наклонность давать аналогичные вариации или иногда возвращаются к некоторым признакам своих далеких предков. Хотя, из-за реверсии и аналогичной вариации, новые и важные модификации не могут возникать, такие модификации будут добавляться к прекрасному и гармоничному многообразию разработки.
Какова бы ни была причина, быть может, каждого слабого различия между версиями библиотеки — и причина для каждого из них должна существовать, — мы имеем основание полагать, что неуклонное кумулирование благоприятных различий вызвало все наиболее важные модификации строения в связи с жизненным циклом каждого компонента.
Термины, которые я заменил в оригинальном параграфе
- род → библиотека
- вид → компонент
- орган → функция
- особь → проект
- потомством и их родителями → версиями библиотеки
- питательные вещества → ресурсы разработки
- органические существа → программные продукты
- органической лестницы → зрелости программного продукта
- вторичные половые признаки → сигнатуры функций
- пол → протокол взаимодействия
- усиление, ослабление → улучшение, деградация
- твердые и наружные → внешний интерфейс
- мягкие и внутренние → внутренняя структура
- природа → разработка
Еще заменил термины, которые в данном контексте будут выглядеть странно:
- употребление → использование (так как слово выглядит немного устаревшим)
- организация → структура приложения (чтобы смысл был верным)
- образ жизни → жизненный цикл
Так же предлагаю ознакомиться с оригинальным параграфом, его я спрятал под спойлер.
Наше незнание законов вариации глубоко. Ни в одном из 100 случаев мы не можем определить причину, почему тот или другой орган изменился. Но во всех случаях, где мы обладаем средствами для сравнения, оказывается, что образование меньших различий между разновидностями одного вида вызывается действием тех же законов, что и больших различий между видами одного рода. Перемены в условиях обычно вызывают только колеблющуюся вариабельность, но иногда ведут к прямым и определенным результатам: и эти результаты с течением времени могут сделаться более сильно выраженными, хотя в пользу этого еще не имеется достаточного доказательства. Привычка — в образовании конституциональных особенностей, употребление — в усилении органа и неупотребление — в их ослаблении и уменьшении во многих случаях кажутся мощными в своем действии. Части гомологичные склонны варьировать одинаковым образом, а равно и связываться друг с другом. Модификация твердых и наружных частей действует на части мягкие и внутренние. Когда одна какая-нибудь часть сильно развивается, она, возможно, отвлекает питательные вещества от с нею смежных частей, и всякая часть организации, которая может быть устранена без ущерба, будет устранена. Изменения в строении в раннем возрасте могут воздействовать на части, развивающиеся позднее; несомненно, встречаются многочисленные случаи коррелятивной вариации, природу которой мы не способны понять. Части, многократно повторяющиеся, изменчивы как в своем числе, так и в строении, и это, вероятно, проистекает из отсутствия строгой специализации таких частей для какой-либо особой функции, так что их модификациям не препятствовал естественный отбор. Последствием этой же причины, быть может, является факт, что органические существа, стоящие на низших ступенях органической лестницы, более изменчивы, чем вышестоящие, вся организация которых более специализирована. Органы рудиментарные, будучи бесполезными, не подпадают под действие естественного отбора и поэтому изменчивы. Признаки видовые, т. е. признаки, которыми виды одного рода стали различаться с того времени, как они ответвились от общего предка, более изменчивы, чем признаки родовые, т. е. такие, которые унаследованы издавна и у которых на протяжении указанного периода не возникали различия. В этих замечаниях мы касались специальных органов или частей, но тем не менее изменчивых, потому что они варьировали еще недавно и вследствие этого становились различными;, но во II главе мы видели, что тот же принцип применим и к особи в целом. Мы убедились, что в области, заключающей много видов данного рода, т. е. где недавно происходило значительное изменение и дифференцировка или где активно шло производство новых видовых форм, в такой области и у таких видов мы и в настоящее время встречаем в среднем наибольшее число разновидностей. Вторичные половые признаки очень изменчивы; они же сильно различаются у видов одной группы. Изменчивость одних и тех же частей организации обычно была полезной как для образования вторичных половых различий между двумя полами одного вида, так и образования видовых различий между видами одного рода. Всякая часть или орган, чрезмерно или исключительным образом развитые по сравнению с той же частью или органом у родственных видов, должны были подвергнуться модификации в необычайных размерах со времени возникновения этого рода; отсюда нам понятно, почему они еще часто изменчивы в гораздо более значительной мере, чем другие части, так как вариация представляет медленный и долго длящийся процесс и естественный отбор в подобных случаях не располагал до сих пор достаточным временем, чтобы осилить тенденцию к дальнейшей изменчивости и реверсии к менее модифицированному состоянию. Но когда вид с необычайно развитым органом сделался родоначальником многочисленных модифицированных потомков, что, согласно моему взгляду, должно быть крайне медленным процессом, требующим огромного промежутка времени, то в подобном случае естественный отбор уже успел сообщить этому органу постоянные черты, несмотря на необычайность его развития. Виды, унаследовавшие от своего общего предка почти одинаковую конституцию и подвергшиеся воздействию сходных условий, естественно, имеют наклонность давать аналогичные вариации или иногда возвращаются к некоторым признакам своих далеких предков. Хотя, из-за реверсии и аналогичной вариации, новые и важные модификации не могут возникать, такие модификации будут добавляться к прекрасному и гармоничному многообразию природы.
Какова бы ни была причина, быть может, каждого слабого различия между потомством и их родителями — и причина для каждого из них должна существовать, — мы имеем основание полагать, что неуклонное кумулирование благоприятных различий вызвало все наиболее важные модификации строения в связи с образом жизни каждого вида.
Небольшое объяснение
После полной замены, я обратил внимание, что читать текст очень сложно (кто бы мог подумать?). Этому много причин. Одной из самых главных является выбранный параграф. Дело в том, что этот параграф включает в себя краткий пересказ всего, что было описано в самой главе, поэтому текст очень ёмкий и сжатый. К сожалению, мне не удалось найти другой подходящий параграф, в котором можно было бы такими минимальными телодвижениями провести замену терминов.
Чтобы текст не выглядел совсем уж бредовым, пару предложений разверну чуть подробнее.
Пример 1
Оригинал:
Когда одна какая-нибудь часть сильно развивается, она, возможно, отвлекает питательные вещества от с нею смежных частей, и всякая часть организации, которая может быть устранена без ущерба, будет устранена.
Пояснение этой идеи в главе V:
Крупные пасущиеся птицы редко летают, кроме тех случаев, когда спасаются от опасности; поэтому почти полное отсутствие крыльев у некоторых птиц, живущих или недавно живших на некоторых океанических островах, где нет хищных зверей, было вызвано, вероятно, их неупотреблением. Страус, правда, живет на континентах и подвергается опасностям, от которых он не в состоянии спастись полетом, но зато он защищается, лягаясь не хуже любого четвероногого. Мы можем предположить, что предок рода страусов походил образом жизни на дроф и что по мере увеличения размеров и веса его тела на протяжении ряда последовательных поколений его ноги употреблялись все более и более, а крылья — все менее, пока не стали неспособными к полету.
После замены терминов:
Когда одна какая-нибудь часть сильно развивается, она, возможно, отвлекает ресурсы разработки от с нею смежных частей, и всякая часть структуры приложения, которая может быть устранена без ущерба, будет устранена.
Пример из жизни: значки в профиле Хабра сейчас выглядят как просто дивы с бордером, а когда-то это были красивые иконки. Очевидно на поддержку и развитие этих значков ресурсы не выделяются. Однако читать и перемещаться по комментариям сейчас намного удобнее, чем в стародавние времена. Видимо разработка комментариев оттягивает на себя часть ресурсов с разработки иконок.
Пример 2
Оригинал:
Признаки видовые, т. е. признаки, которыми виды одного рода стали различаться с того времени, как они ответвились от общего предка, более изменчивы, чем признаки родовые, т. е. такие, которые унаследованы издавна и у которых на протяжении указанного периода не возникали различия.
Пояснение этой идеи в главе V:
Поясним это на простом примере: если бы в более крупном роде растений некоторые виды имели синие цветки, а другие — красные, то окраска была бы только видовым признаком, и никого не удивило бы, если бы один из синих видов изменился в красный, или наоборот;, но если бы все виды имели синие цветки, то окраска была бы родовым признаком, и ее изменение представлялось бы уже явлением более необыкновенным.
После замены терминов:
Признаки компонентов, т.е. признаки, которыми компоненты одной библиотеки стали различаться с того времени, как они ответвились от общего предка, более изменчивы, чем признаки библиотечные, т. е. такие, которые унаследованы издавна и у которых на протяжении указанного периода не возникали различия.
Пример из жизни:
Если вы используете в проекте, например, кнопки из CSS Bootstrap фреймворка, то очевидно, что чаще будет меняться содержимое классов .btn или .btn-primary, чем переименовывание этих классов во что-нибудь в духе .g-button или g-button-first
Заключение
Хоть и статья получилась такой, полусерьёзной, но в любом случае, думаю что нам многое можно взять у природного эволюционного процесса и перенести в разработку.
P.S.: Большое спасибо моим друзьям и коллегам. Они не подозревали, для чего подсказывают мне термины.