핵심 요약

  • 폴 그레이엄은 프로그래밍 언어가 대체로 동등하다는 평가는 언어 자체보다 그동안 해온 프로그래밍의 종류를 반영한다고 주장한다.
  • 그레이엄에 따르면 대부분의 프로그래밍은 라이브러리 함수 호출을 연결하는 작업이며, 널리 쓰이는 언어들은 이 작업을 비슷하게 수행한다.
  • 그는 낯선 언어의 특이한 기능이 다른 종류의 프로그래밍을 발견하는 단서가 될 수 있다고 본다.
  • Lisp 매크로는 특정 유형의 문제를 풀 언어를 먼저 만들고, 그 언어로 응용 프로그램을 작성하는 방식의 한 사례다.

언어가 비슷해 보이는 이유

그레이엄은 프로그래밍의 99.5%가 라이브러리 함수 호출을 이어 붙이는 작업이라고 설명한다. 널리 쓰이는 언어들은 모두 이런 작업에 적합하다. 따라서 개발자는 여러 언어에 공통으로 있는 기능만 사용하면서도 경력 전체를 보낼 수 있다. 그 경험에 비춰 보면 언어들이 사실상 동등하다고 느끼기 쉽다.

그레이엄이 주목하는 것은 나머지 0.5%다. 비중은 작지만, 그는 이 영역에 상대적으로 흥미로운 프로그래밍이 많이 있다고 본다. 낯선 언어가 왜 낯설게 느껴지는지 살펴보면 그 영역을 이해할 단서를 얻을 수 있다는 주장이다.

낯선 기능이 가리키는 것

그레이엄에 따르면 잘 만들어진 낯선 언어의 특이함에는 대개 이유가 있다. 흔한 라이브러리 호출 연결 방식만으로는 설명하기 어려운 프로그래밍 형태가 그 기능 뒤에 있을 수 있다. 따라서 익숙한 언어와 무엇이 다른지 묻는 일은 그 언어가 어떤 문제 해결 방식을 가능하게 하는지 살피는 일이기도 하다.

Lisp 매크로의 사례

그레이엄은 Lisp 매크로를 구체적인 사례로 든다. 매크로는 프로그램을 다루는 기법이며, 많은 Lisp 개발자에게도 낯설게 느껴진다고 설명한다. 그는 이를 다른 언어에 제대로 구현하려면 그 언어를 Lisp의 한 변형처럼 만들어야 할 만큼 언어의 성격과 깊이 연결돼 있다고 본다.

매크로를 활용하는 방식 중 하나는 특정 유형의 문제를 위한 언어를 먼저 만든 다음, 그 안에서 개별 응용 프로그램을 작성하는 것이다. 그레이엄은 이것이 단순히 라이브러리 호출을 연결하는 작업을 넘어서는 사례라고 설명한다. 동시에 매크로로 할 수 있는 일 전체가 아니라, 프로그램을 다루는 아직 충분히 탐구되지 않은 기법 가운데 한 부분일 뿐이라고 덧붙인다.

차이에 집중해 배우기

그레이엄은 프로그래밍으로 무엇을 할 수 있는지에 대한 생각을 넓히려면, 많은 개발자가 낯설다고 여기면서도 사용자들의 역량이 높은 언어를 골라 배우라고 제안한다. 핵심은 그 언어와 널리 쓰이는 언어들의 공통 영역 사이의 차이에 집중하는 것이다. 다른 언어로는 표현하기 몹시 불편한 것을 그 언어에서는 어떻게 표현하는지 살펴보라는 뜻이다.

그레이엄의 결론은 표현 방식과 사고방식의 관계에 있다. 이전에는 표현할 수 없었던 것을 말하는 방법을 배우는 과정에서, 이전에는 생각하지 못했던 방식으로 문제를 바라보게 될 가능성이 있다는 것이다.