진화, 기술적으로
대부분 사람들이 진화를 적자생존 으로 배워 — 막연히 다윈주의, 막연히 경쟁적. OO 시각이 더 정확해. 진화는 상속 + 오버라이드, 선택 압력으로 정렬 이야.
실제 작동 방식 —
- 상속. 자식 생물이 부모로부터 게놈 (class 정의) 을 상속해. 거의 부모와 동일하게.
- 변이 (오버라이드). 복사 중 무작위 변화 — 점 변이, 삽입, 삭제, 중복. 각각이 상속된 코드의 작은 오버라이드. 대부분이 중립이고, 일부가 해롭고, 소수가 유익.
- 선택. 생물이 번식할 만큼 살아남거나 못 살아남거나. 오버라이드가 생존/번식을 도왔으면 다음 세대로 운반. 해롭게 했으면 안 운반되고.
- 반복. 수백만 세대 동안 유익한 오버라이드가 누적. class 정의가 drift. 결국 후손이 새 종이라 부를 만큼 달라져.
이게 정확히 OO 프로그래밍의 상속 + 오버라이드야 — 단, 오버라이드 생존이 단위 테스트가 아닌 실재로 판정. 선택 압력이 우주에서 가장 가혹한 QA 지.
공유된 base class 가 여전히 거기 있어
긴 base class chain 에서 상속해 — 척추동물, 포유류, 영장류, 호미닌, 호모 사피엔스. 매 조상의 오버라이드가 거의 다 코드 베이스에 남아 있고. 원래 목적을 더 이상 안 하는 base class 의 *흔적* 특질을 가져 —
- 소름 — 털 있는 조상이 부풀려 보일 때 유용했던 거. 지우지 않은 상속된 오버라이드.
- 사랑니 — 더 이상 안 먹는 식단에 맞춰진 어금니.
- 맹장 — 초식 조상에서 상속.
- 꼬리뼈 — 꼬리 있던 시절의 닻.
이게 *종 class 의 주석 처리된 method* 야. 아직 source 에 있고, 더 이상 호출되지 않아.
왜 어떤 종은 빨리 변하고 어떤 종은 안 변해
선택 압력이 refactor 속도를 결정해. 박테리아는 빨리 변이하고 거대한 인구를 가져 — 빨리 refactor 하지 (그래서 항생제 내성이 몇 달 안에 진화). 고래는 작은 인구로 천천히 번식 — class 정의가 천천히 drift. 패턴이 보편 — 단위 시간당 더 많은 번식, 더 많은 선택 압력, 더 빠른 refactor.
진화가 어딘가로 가는 진보가 아니야. 그저 inherit-mutate-select 의 loop, 수십억 년 동안. 그 loop 에서 나오는 모양이 살아남는 모양이야. 오늘 살아 있는 모든 종, 우리 포함, 첫 세포로 거슬러 올라가는 끊기지 않은 상속 chain 의 작동하는 오버라이드지.