이상한 언어들
어떤 사람들은 자신이 경험해 보니 모든 프로그래밍 언어가 결국은 거의 같다고 말합니다. 하지만 그런 말은 언어에 대한 말이 아니라, 그 사람이 어떤 프로그래밍을 해 왔는지에 대한 말입니다.
프로그래밍의 99.5%는 라이브러리 함수 호출을 이어 붙이는 일로 이루어집니다. 널리 쓰이는 언어들은 모두 이 일을 똑같이 잘합니다. 그래서 누구나 경력 내내 인기 있는 프로그래밍 언어들의 교집합 안에서만 작업할 수 있습니다.
하지만 나머지 0.5%의 프로그래밍은 그 비중에 비해 훨씬 흥미롭습니다. 그것이 무엇으로 이루어져 있는지 알고 싶다면, 기묘한 언어들이 기묘한 이유를 따라가 보는 것이 좋은 단서가 됩니다.
기묘한 언어들이 기묘한 것은 우연이 아닙니다. 적어도 좋은 언어라면 그렇습니다. 좋은 언어의 기묘함은 대개 단순히 라이브러리 호출을 이어 붙이는 것과는 다른 형태의 프로그래밍이 존재한다는 뜻입니다.
구체적인 예로 Lisp 매크로를 들어 보겠습니다. Lisp 매크로는 많은 Lisp 프로그래머에게조차 기묘해 보입니다. 인기 있는 언어들의 교집합에 들어 있지 않을 뿐 아니라, Lisp 방언으로 바꾸지 않고서는 제대로 구현하기도 본질적으로 어렵습니다. 그리고 매크로는 분명히 접착제식 프로그래밍을 넘어서는 기법이 존재한다는 증거입니다. 예를 들어, 어떤 종류의 문제를 풀기 위한 언어를 먼저 작성한 다음 그 언어로 구체적인 애플리케이션을 작성하는 식입니다. 매크로로 할 수 있는 일이 이것뿐인 것도 아닙니다. 이것은 지금도 완전히 탐구되지 않은, 프로그램을 조작하는 기법들의 공간에서 한 영역에 불과합니다.
그러므로 프로그래밍으로 무엇을 할 수 있는지에 대한 자신의 개념을 넓히고 싶다면, 한 가지 방법은 기묘한 언어를 배우는 것입니다. 대부분의 프로그래머가 기묘하다고 여기지만 일반적인 사용자의 수준은 높은 언어를 하나 골라, 그 언어와 인기 있는 언어들의 교집합 사이의 차이에 집중해 보세요. 다른 언어로는 표현하기가 도저히 불편할 내용을 이 언어로는 무엇이라고 말할 수 있을까요? 이전에는 말할 수 없었던 것을 말하는 법을 배우는 과정에서, 아마 이전에는 생각할 수 없었던 것을 생각하는 법도 배우게 될 것입니다.
초고를 읽어 주신 Trevor Blackwell, Patrick Collison, Daniel Gackle, Amjad Masad, Robert Morris에게 감사드립니다.
글을 무작위로 읽기