작은 프로그램과 언어가 지닌 매력
원제 Small Programs and Languages
106 포인트댓글 7
Key Point
작은 프로그램과 언어의 구현이 단순한 취미를 넘어 프로그래밍의 본질적 복잡도를 증명하는 의미 있는 작업이며, 개발자의 이해와 통제 욕구를 충족하는 설계 원칙을 제시한다.
핵심 요약
- 작은 프로그램은 이해하기 쉽고 흥미를 자극한다. 200줄 코드는 2,000줄보다 읽을 확률이 훨씬 높으며, 예상과 다르게 20줄로 작성된 프로그램은 강렬한 호기심을 불러일으킨다.
- 역사적 사례들이 작은 구현의 가능성을 보여준다. philippe Brochard의 46바이트 Forth, Arthur Whitney가 한 오후에 작성한 122줄 J 언어 인터프리터, 90KB 부팅 가능 이미지의 kOS 운영체제 등이 그 예다.
- 코드 골프와 최소화는 재미만이 아니라 의미 있는 작업이다. 콜모고로프 복잡도 관점에서, 작은 구현들은 프로그램의 최소 복잡도를 드러낸다.
- 실제 사례들이 이를 입증한다. 436바이트 가비지 컬렉션 Lisp, 2KB의 3D 브라우저 게임, 비즈니스 카드에 맞는 레이 트레이서 등은 그 개념의 본질적 복잡도에 대한 사실을 제공한다.
- Forth, Lisp, Tcl은 문법적으로 최소한의 설계로 강력한 표현력을 갖춘 작은 언어들이다. 이들은 핵심 개념만 이해하면 무한한 유연성을 제공한다.
- Lua는 27페이지의 핵심 언어 문서로 증명되듯 작고도 간단하며 실용적이다. C, JavaScript도 비교적 작은 코어를 지니고 있다.
- David Ungar는 단순함이 표현력보다 우선되어야 한다고 주장한다. 이해하기 어려운 복잡한 시스템보다 개발자가 추가로 작성해야 하는 단순한 시스템이 낫다는 의미다.
- 작은 언어의 미시세계(microworld) 가치는 학습 가능한 환경과 우수한 문서, 초보자 이해 수준의 오류 메시지에서 나온다.
- 표준 라이브러리도 같은 도전을 받는다. Ramda 같은 함수형 라이브러리는 새로운 언어를 배우는 경험을 제공하며, 작은 규모의 학습이 더 효과적이다.
- 작은 것들이 가지는 심리적 매력은 실용성을 초과한다. 축소된 것은 귀여워 보이고, 통제 가능하고, 위협적이지 않으며, 더 접근 가능하다.
- 작은 규모는 복잡한 것을 이해 가능하게 만든다. 저위험 실험을 가능하게 하며, 그 후 확대된 버전으로 나아갈 수 있다.
- 미니어처에 대한 인간의 욕구는 통제와 이해, 질서에 대한 갈증에서 온다. 아무리 큰 혼란스러운 세계도, 작은 규모의 체계적 부분을 이해하고 통제할 수 있다는 느낌은 인간의 필요를 충족시킨다.
- 컴퓨터 역사에서 큰 성과들은 개인들이 작은 문제를 새롭게 해결한 작은 승리들의 축적이다. 작은 세계에 몰입하고 그 안의 세부사항을 파고드는 것이 인간의 필수적 욕구를 충족시킨다.