같은 문제, 네 다른 해법
비행이 지구에서 최소 네 번 따로 진화했어 — 곤충, 익룡 (멸종한 비행 파충류), 새, 박쥐. 각 lineage 가 독립적으로 풀었고 — 어느 쪽도 다른 쪽에서 비행을 상속하지 않았어. 새가 익룡에서 날개를 받은 게 아니고, 박쥐가 새에서 받은 게 아니지.
각각이 다른 구현으로 끝났어, 모두 같은 인터페이스 (fly()) 아래에서 —
- 곤충. 키틴으로 만든 날개 (외골격이랑 같은 재료). 안에 뼈가 없어. 흉부를 비틀어 날개를 움직이는 간접 근육이 동력.
- 익룡. 엄청 길어진 네 번째 손가락 위에 늘어난 피부 막. 속 빈 뼈, 거대한 날개.
- 새. 변형된 팔에 깃털 부착. 팔뼈는 짧고, 깃털이 양력 대부분을 만들고.
- 박쥐. 길어진 손가락들 사이 (익룡과 다른 손가락) 늘어난 피부 막. 현대 lineage 야 — 포유류, 파충류가 아니라.
이게 다형성이야 — 같은 인터페이스, 다른 구현. 생물학자가 *수렴진화* 라 불러. 다른 lineage, 다른 상속 chain, 같은 문제 모양, 비슷할 만큼의 해법, 인터페이스가 명확하지.
수렴진화는 보기 시작하면 어디나 있어
- 눈. 척추동물 눈 (뒤-앞 망막), 문어 눈 (앞-뒤 망막), 곤충 겹눈, 갯가재 눈.
see()인터페이스의 다른 구현, 독립적 진화. - 반향정위. 박쥐와 돌고래 둘 다 음파로 항해. 포유류지만 6 천만 년+ 독립 진화로 갈라짐. 같은 인터페이스, 두 다른 코드 베이스.
- 유선형 몸. 참치 (어류), 돌고래 (포유류), 어룡 (멸종 파충류). 같은 몸 모양 (유체역학 인터페이스), 세 다른 조상.
- 진사회성. 벌, 개미, 흰개미, 벌거숭이두더지쥐. 다른 lineage 가 독립적으로 같은 군체 아키텍처를 발견했어.
OO 시각에 무엇을 의미해
다형성이 무관한 lineage 에서 계속 등장한다면, 문제 모양 이 실재고 인터페이스 가 lineage 가 아닌 문제로 결정되는 거야. 비행은 모양을 가져 — 양력 생성, 방향 제어, 항력 관리 — 그걸 푸는 어떤 lineage 든 어떤 코드를 상속했든 거의 같은 인터페이스 구현으로 끝나.
이게 프로그래머가 결국 하는 같은 관찰이야 — 어떤 인터페이스는 자의적이지 않아. 문제로 모양이 잡혀. 정렬에 옳은 인터페이스가 어떤 언어에든 거의 같고, 비행에 옳은 인터페이스가 곤충/새/박쥐에 거의 같지. 자연과 코드가 좋은 인터페이스 모양에 동의해 — 구현자가 아닌 문제로 모양이 잡혀서.