More shell, less egg: Doug McIlroy vs. Donald Knuth
Source
Evernote/Article Scraps/More shell, less egg - All this.md
Summary
이 문서는 1986년 ACM Communications의 ‘Programming Pearls’ 칼럼에서 벌어진 Donald Knuth와 Doug McIlroy 간의 유명한 논쟁을 다룹니다. Jon Bentley가 제안한 ‘텍스트 파일에서 가장 자주 사용되는 n개의 단어와 그 빈도를 출력하는 프로그램’ 작성 과제에 대해, Knuth는 자신의 문해 프로그래밍(Literate Programming) 시스템인 WEB과 Pascal을 사용하여 10페이지 이상의 상세한 설명과 함께 복잡한 데이터 구조를 구현했습니다. 반면, McIlroy는 Knuth의 구현을 비판하며 Unix 셸 파이프라인 6줄(tr, sort, uniq, sed 등)로 동일한 기능을 완벽하게 수행할 수 있음을 보여주었습니다. 이 사례는 Unix 철학인 ‘작은 도구들의 조합’과 셸 스크립트의 간결함 및 실용성이 복잡한 단일 프로그램보다 우월할 수 있음을 보여주는 고전적인 예시로 인용됩니다.
Key Points
- 문해 프로그래밍(Literate Programming)의 창시자 Donald Knuth는 Pascal과 WEB을 사용해 단어 빈도 분석 프로그램을 작성하며 코드와 설명을 교차 배치하는 방식을 시범 보였습니다.
- Doug McIlroy는 Knuth의 긴 구현을 비판하며, Unix 셸 유틸리티(
tr,sort,uniq,sed)를 파이프라인으로 연결한 6줄의 스크립트로 동일한 결과를 얻는 방법을 제시했습니다. - McIlroy의 스크립트는 버그가 없으며, 각 명령어의 역할이 명확해 설명이 매우 간결했습니다.
- 이 사례는 ‘More shell, less egg’(껍데기는 많고 알은 적다)라는 제목처럼, 불필요하게 복잡한 구현보다는 Unix 철학에 기반한 간결한 도구 조합의 가치를 강조합니다.
- 원문은 McIlroy의 스크립트 설명과 함께, 왜
sed대신head를 사용하지 않았는지에 대한 저자의 의문으로 끝납니다.