프로그래밍 언어의 독특함이 기존의 방식에서 벗어난 새로운 프로그래밍 가능성을 알려주는 방법을 탐구합니다.
2021년 8월
사람들이 "자신의 경험상 모든 프로그래밍 언어는 본질적으로 동일하다"라고 말할 때, 그들은 언어 자체에 대해 이야기하는 것이 아니라 자신이 해온 프로그래밍 방식에 대해 말하고 있는 것이다.
프로그래밍의 99.5%는 라이브러리 함수들을 조합하여 사용하는 일로 이루어진다. 모든 인기 있는 언어는 이 분야에서 똑같이 뛰어나다. 그래서 대부분의 사람들은 인기 있는 언어들의 교집합 안에서만 평생을 프로그래머로 지낼 수 있다.
그러나 나머지 0.5%의 프로그래밍은 그에 비해 무척 흥미롭다. 그것이 무엇을 포함하는지 알고 싶다면, "이상한 언어"의 기묘함을 단서로 삼으면 좋다.
이상한 언어들은 우연히 기묘한 것이 아니다. 적어도 좋은 언어라면 그렇다. 제대로 된 이상한 언어의 독특함은, 그 언어가 단순히 라이브러리 함수 호출을 조합하는 것 이상의 프로그래밍 방법이 존재함을 암시한다.
구체적인 예를 들자면: Lisp 매크로가 있다. Lisp 매크로는 많은 Lisp 프로그래머에게조차 기묘하게 보인다. 이 매크로들은 인기 언어의 교집합에 들어가지 않을 뿐 아니라, 그 성질상 해당 기능을 제대로 구현하려면 결국 그 언어를 Lisp 방언으로 만들어버릴 수 있다. 그리고 매크로는 정말로 단순한 '조립식 프로그래밍'을 넘어서 있는 기술들의 증거이다. 예를 들어, 특정 유형의 문제를 해결할 때, 먼저 그 문제들을 위한 "언어"를 만든 뒤, 그 언어로 구체적인 애플리케이션을 작성하는 것이다. 게다가 매크로로 할 수 있는 일은 이게 전부가 아니다. 매크로는 프로그램을 조작하는 여러 기법의 일부이며, 이 영역은 아직도 완전히 탐구되지 않았다.
프로그래밍의 본질이 무엇일 수 있는지 개념을 확장하고 싶다면, 이상한 언어를 배우는 것이 한 가지 방법이다. 대다수 프로그래머는 이상하게 여기지만, 그 언어의 평균 사용자 수준이 높은 언어를 골라라. 그리고 이 언어가 인기 언어들의 교집합과 어떻게 다른지, 이 언어로 어떤 말을 쓸 수 있는데 다른 언어에서는 몹시 불편하거나 불가능한지 주목하라. 이전에는 표현할 수 없었던 말을 배우는 과정에서, 아마도 이전에는 생각할 수도 없었던 것을 생각하는 방법도 배우게 될 것이다.
감사의 말: 이 글의 초고를 읽어준 Trevor Blackwell, Patrick Collison, Daniel Gackle, Amjad Masad, Robert Morris에게 고마움을 전합니다.