Эволюция программ
Sep. 9th, 2011 01:00 pmПост одного френда навел на интересную аналогию: программы довольно неплохо подчиняются теории Дарвина.
Среда обитания -- это определенная предметная область, в которой используется программа. Среда обитания может быть жестко формализована (например, космос), а может -- и нет (игры и прочая фигня).
Очевидно, что есть естественный отбор и конкуренция (рынок). Сначала идет внутривидовой отбор (тестирование, продукт-менеджмент). Самые неудачные умирают сразу. Затем программа выходит в мир, и сталкивается в конкуренции с похожими. Где либо выживает, либо нет.
Изменчивость видов -- это постоянная доработка, новые версии и т.п. Если разработка останавливается -- программа либо умирает, либо становится реликтом. Изменчивость также отвечает на изменение внешних условий.
Мутации и скрещивание генов -- рефакторинг, включение новых библиотек и включение новых программистов.
И т.д.
В определенных случаях саму программу удается настолько формализовать, что эволюцию и естественный отбор в классе программ можно промоделировать (другой программой). Это называется Генетическим программированием (частный случай генетических алгоритмов).
Интересно, что по-моему у Иванова-Петрова была как-то дискуссия о том, что научные теории развиваются по похожим принципам. Более того, человеческая созидательная мысль сама по себе работает так же. При решении любой проблемы, человек, отталкиваясь от какого-то фундамента, пробует малые изменения, и в голове проводит естественный отбор идей и изменений. "Прыжки", совершаемые гениями, очень редки, и как правило лишь кажущиеся, когда промежуточные шаги просто не видны наблюдателю.
Среда обитания -- это определенная предметная область, в которой используется программа. Среда обитания может быть жестко формализована (например, космос), а может -- и нет (игры и прочая фигня).
Очевидно, что есть естественный отбор и конкуренция (рынок). Сначала идет внутривидовой отбор (тестирование, продукт-менеджмент). Самые неудачные умирают сразу. Затем программа выходит в мир, и сталкивается в конкуренции с похожими. Где либо выживает, либо нет.
Изменчивость видов -- это постоянная доработка, новые версии и т.п. Если разработка останавливается -- программа либо умирает, либо становится реликтом. Изменчивость также отвечает на изменение внешних условий.
Мутации и скрещивание генов -- рефакторинг, включение новых библиотек и включение новых программистов.
И т.д.
В определенных случаях саму программу удается настолько формализовать, что эволюцию и естественный отбор в классе программ можно промоделировать (другой программой). Это называется Генетическим программированием (частный случай генетических алгоритмов).
Интересно, что по-моему у Иванова-Петрова была как-то дискуссия о том, что научные теории развиваются по похожим принципам. Более того, человеческая созидательная мысль сама по себе работает так же. При решении любой проблемы, человек, отталкиваясь от какого-то фундамента, пробует малые изменения, и в голове проводит естественный отбор идей и изменений. "Прыжки", совершаемые гениями, очень редки, и как правило лишь кажущиеся, когда промежуточные шаги просто не видны наблюдателю.