Portfolio
Essay
Philosophy
Programming Language

Philosophical Discourses on Guy Steele’s “Growing a Language”

2026-01-18

프로그래밍 언어와 자연어

우리는 왜 컴퓨터 프로그래밍의 규칙 체계를 ‘프로그래밍 언어’라고 부를까? 이는 프로그래밍이 우리가 일상에서 사용하는 자연어와 유사한 구조와 기능을 지니고 있기 때문이다. 프로그램을 작성할 때는 문법(Syntax)에 따라 코드를 구성해야 한다. 마치 영어에서 주어 다음에 동사가 오듯, C 언어에서는 각 구문 끝에 세미콜론(;)을 붙이는 규칙이 있다. 이러한 형식적 규칙으로 구성된 코드는 컴퓨터에게 특정 의미(Semantics)를 전달하며, 이는 곧 실행해야 할 동작으로 해석된다. 예컨대 int a = 10;이라는 문장은 ‘정수형 변수 a를 선언하고 초기값으로 10을 할당하라’는 뜻이다. 이러한 구조와 의미 체계의 유사성 때문에 우리는 프로그래밍 규칙들을 '언어'라고 통칭한다.

그렇다면 프로그래밍 언어를 잘 안다는 것은 어떤 의미일까? 자연어를 배울 때에도 문법을 외우고 단어를 많이 안다고 해서 유창하다고 평가하진 않는다. 우리는 그 언어가 사용되는 사회와 문화, 맥락을 이해하고 능숙하게 소통할 수 있을 때 ‘언어를 잘 안다’고 말한다. 프로그래밍도 마찬가지다. 프로그래밍 언어의 규칙을 암기하는 것만으로는 충분하지 않다. 진정한 능력은 문제 해결을 위해 언어를 창의적으로 사용하고, 더 나아가 필요한 기능을 스스로 정의하거나 조합해낼 수 있는 능력에 있다. 개발자는 단순한 사용자이기를 넘어서, 언어의 사용자이자 확장자, 때로는 공동 설계자가 되어야 한다.

Growing Language

Guy Steele의 강연 Growing a Language는 이러한 관점을 기반으로 프로그래밍 언어에 대한 고정적 관념을 비판하고, 새로운 철학적 설계 원칙을 제시한다. 그는 프로그래밍 언어가 “작게 태어나, 필요에 따라 확장될 수 있어야 한다”고 말한다. 즉, 언어는 처음부터 완결되어야 하는 것이 아니라, 사용자들이 직접 확장할 수 있도록 설계된 ‘살아 있는 구조’여야 한다는 것이다. 이를 위해 그는 “작은 언어도 곤란하고, 처음부터 거대한 언어도 곤란하다”며 성장 가능한 언어(growing language)의 개념을 제안한다. 이는 기존의 언어 설계 방식, 즉 언어 설계자가 모든 기능을 정하고 사용자는 그것을 따라야 한다는 전통적 구조를 넘어서려는 시도다.

그는 이런 변화를 ‘성당(Cathedral)과 바자회(Bazaar)’ 에 비유한다. 성당은 거대한 계획에 따라 단일 설계자에 의해 구상되며, 인부들은 지시받은 대로 건설을 수행할 뿐이다. 이들은 구조에 관여하지 못하기 때문에 주인의식을 가질 수 없다. 반면, 바자회는 시민들이 각자의 역할과 취향에 따라 자율적으로 공간을 구성하며, 참여자 스스로 기획 과 변화의 주체가 된다. Steele은 프로그래밍 언어 역시 바자회처럼, 사용자가 직접 정의한 요소들이 언어를 구성해 나가는 구조여야 한다고 강조한다. 이러한 구조 속에서 사용자들은 단순한 소비자가 아닌, 언어 공동체의 일원으로서 주인의식을 갖게 되고, 이는 언어의 지속적인 발전으로 이어진다.

실제로 Steele은 이러한 철학을 자바(Java) 언어 설계에 직접 반영하려 했다. 그는 Generic Type(제네릭 타입)과 Overloaded Operator(연산자 오버로딩)와 같은 기능을 도입하자고 제안했다. 제네릭 타입은 다양한 데이터 타입을 포괄하는 코드 구조를 가능케 하여, 재사용성과 추상화를 높이면서도 안정성을 유지할 수 있게 해준다. 연산자 오버로딩은 사용자 정의 객체에 기존의 연산 기호(예: +, -, *)를 적용할 수 있게 해주며, 프로그래머가 만든 데이터 타입이 기본 타입처럼 자연스럽게 사용될 수 있도록 돕는다. 이처럼 사용자가 필요한 기능을 언어에 직접 통합하거나 확장할 수 있도록 설계함으로써, Steele은 프로그래밍 언어의 주도권을 사용자에게 되돌려주려 했다. 제안했던 기능 가운데 제네릭 타입만이 2004년 Java 5에 채택되었고, 연산자 오버로딩은 가독성과 일관성 우려로 끝내 받아들여지지 않았다.

Growing Language 철학의 시대적 배경과 담론 ; 포스트 모더니즘

Steele과 동시대 개발자들이 이와 같은 철학을 공유하게 된 데는 시대적 배경이 있다. 1990년대는 인터넷과 오픈소스의 확산, 소프트웨어의 대형화, 사용자 요구의 다양화가 함께 몰려오던 시기였다. 이 변화는 곧 ‘완벽한 언어는 존재하지 않는다’는 생각으로 이어졌다. 모든 상황에 완벽하게 대응하는 언어를 하나의 설계자가 완결할 수 없다는 사실이 받아들여지고, 이에 따라 개발자들은 지식과 언어 구조를 민주적이고 개방적인 방식으로 공유하고 확장할 필요성을 인식하게 되었다. 이는 오픈소스 소프트웨어, 커뮤니티 주도 개발 방식, 그리고 모듈화된 언어 설계 원칙의 기반이 되었다.

이러한 흐름은 당시 철학적 사조인 포스트모더니즘과도 깊은 연관이 있다. 20세기 중반 이후, 세계는 2차 세계대전과 냉전 등 격변의 시대를 겪으면서 합리성과 보편성 중심의 근대 이성에 회의를 품기 시작했다. 이에 따라 서구 사상은 절대적 진리나 중심적 체계를 거부하고, 의미와 질서가 고정된 것이 아니라 맥락과 실천 속에서 생성된다는 인식으로 나아갔다. 자크 데리다의 해체주의, 미셸 푸코의 담론 권력 이론, 롤랑 바르트의 ‘저자의 죽음’ 등은 모두 위계와 통제의 해체, 그리고 개인의 참여와 의미 생성을 강조했다. Steele이 말하는 ‘성장 가능한 언어’ 또한 이러한 철학적 흐름과 같은 맥락에서, 언어를 고정된 구조물이 아닌 ‘열린 패턴’으로 보려는 시도로 읽힌다.

이중에서도 Steele의 관점은 비트겐슈타인의 후기 언어철학과 인상적으로 닮아 있다. 과거에는 언어를 정형화된 규칙의 집합, 즉 형식 문법(formal grammar)으로만 설명하려는 시도가 많았다. 그러나 비트겐슈타인은 언어의 의미가 사전적인 정의에 따라 정해지는 것이 아니라, 언어가 사용되는 방식과 맥락 속에서 의미가 결정된다고 보았다. 그의 ‘언어 게임’ 개념은 언어는 살아 있는 행위의 일부이며, 그 의미는 고정되지 않고 사회적 실천에 따라 유동적으로 변화한다는 사실을 보여준다. Steele이 주장하는 프로그래밍 언어의 사용 기반 확장은, 프로그래밍 언어 역시 하나의 사회적 언어 게임임을 시사한다. 결론적으로, Guy Steele의 Growing a Language는 프로그래밍 언어를 단순한 기술적 도구가 아닌, 사용자 참여와 사회적 실천을 통해 성장하는 살아 있는 언어로 다시 정의한다. 그는 언어의 미래는 완전한 설계가 아닌 확장 가능성과 협업의 철학에 달려 있다고 본다. 프로그래밍 언어는 이제 더 이상 ‘정답’을 제공하는 도구가 아니라, 사용자와 함께 만들어가는 열린 플랫폼이다. 이는 프로그래밍 언어 설계뿐 아니라, 오늘날 지식 생산과 공유의 방식 자체에 대한 근본적인 질문을 던진다.