프로그래밍 언어 이론(PLT)이 대중에게 오해받는 이유를 네 가지 문제(이론 vs 응용, 축적의 어려움, 추상화의 증가, 그 자체의 난이도)로 짚고, 이를 개선하기 위한 바람을 제시한다.
2025년 7월 13일
프로그래밍 언어 이론(PLT)은 내가 가장 좋아하는 컴퓨터 과학 분야 중 하나지만, 외부인에게 가장 오해받는 분야이기도 하다고 느낀다.
순수 이론과 실용적 응용의 교차점에 아름다운 구성과 멋진 아이디어가 가득하다. 그런데도 PLT 커뮤니티 밖에서는 난해하고, 어렵고, 쓸모없고, 비실용적이라고 여겨진다. 이 문제는 순수 수학에 대한 대중 인식(“왜 배워야 하죠?”, “실제로 쓸 데가 있나요?”)과 비슷하지만, 어쩐지 더 심하다.
어쩌다 이렇게 됐을까?
PLT는 순수 수학 과목처럼 수행되고 감상될 수 있다. 복잡한 위상수학 정리를 증명하는 아름다운 구성물이나 눈부신 그림처럼. 하나의 예술이다. 이를 온전히 감상하려면 어느 정도의 교육이 필요하다.
순전히 이론적인 작업이 때로는 “실용적 응용”이 있다고 소개되기도 한다. 때로 저자들이 말하는 “실용적”이란 “이 정리를 이용해 다른 정리를 증명할 수 있고, 이 주제에 관심 있는 나머지 8명에게는 그런 목적에 실질적으로 유용할 수 있다”는 뜻이기도 하다. 어떤 경우에는 미래의 잠재적 응용 가능성에 대한 과장된 희망이기도 하다.
숙련된 소프트웨어 엔지니어가 PLT에 흥미를 느끼고 더 배우고 싶다고 상상해 보자. 누군가가 Barendregt의 “The Lambda Calculus. Its Syntax and Semantics”부터 읽으라고 했다. 그는 그 책을 펴들고 낯선 표기법과 씨름하며 자신의 경험과 연결되는 작은 통찰 한 방울을 뽑아내기 위해 애쓴다. 마침내 처치–로서(Church–Rosser) 정리를 이해했다.
“처치–로서 정리는 대체 어디에 쓰이나요?” 소프트웨어 엔지니어가 묻는다. 아, 그게 말이죠, 실용적 응용 이 있어요. 아직 충분히 몰라서 보이지 않을 뿐.
그 엔지니어는 사라졌다. 차라리 새로운 JavaScript 프레임워크를 배우는 데 시간을 쓰는 편이 더 낫다—적어도 거기서는 실질적 이점을 눈으로 볼 수 있으니까.
겉보기엔 단순한 정리조차 무거운 기계장치를 요구한다. 그리고 그 기계장치는 1930년대에 출발했음에도 아직도 만들고 있는 중이다.
그게 다른 수학 분과와 어떻게 다른가? 학부나 대학원 수학 커리큘럼을 보면 대부분의 과목이 서로 연결되어 있음을 알 수 있다. 서로 위에 쌓아 올려지기도 하고, 한 분과의 결과를 다른 분과로 옮겨주는 이름난 “다리” 정리들도 있다.
PLT에서는 그렇지 않다. 각 전개, 각 증명이 거의 바닥부터 다시 시작하는 데서 출발한다. 다른 사람의 보조정리나 정리를 재사용하는 경우는 많지 않다. 심지어 정의조차 합의되지 않는다. 그래서 각 논문이 처음부터 다시 시작하는 듯한 느낌을 줄 수 있다.
오해하진 말자. PLT 연구자들은 서로의 논문을 읽고 서로의 작업에 영향을 준다. 하지만 그 영향은 형식적 재사용이라기보다 기법과 접근 방식의 수준에서 일어난다. 다른 수학 분야처럼 정리 위에 정리를 쌓기보다는, 서로의 증명 기법을 각자의 바닥부터 시작하는 구성에 맞추어 변형하고 적응시키는 경향이 있다.
앞서 말했듯이, 각 논문과 각 문제가 고유한 설정과 자체 정의, 보조정리, 정리를 요구할 수 있다. 공통의 증명 기법을 기성 정리로 포장해 여러 증명에서 재사용할 수 있다면 좋지 않을까?
그건 분명 좋겠지만, 대가로 매우 높은 수준의 추상화를 감수해야 한다. 복잡한 아키텍처 패턴, 수많은 간접화, 여러 레이어를 사용하는 코드베이스를 떠올려보라. 스파게티 코드라는 뜻이 아니라, 모두 필요하고 잘 쓰이지만—학습 곡선이 가파르다.
그 코드베이스에서처럼, 각 기능을 매번 바닥부터 구현하면 훨씬 더 쉬울 텐데도 추상화를 많이 쓰면 어렵듯, 추상적 방법을 쓰는 증명도 마찬가지다. 강력하긴 하지만 직관적 명료성을 잃고, 새로운 사람이 뛰어들기 어렵게 만든다.
PLT는 매우 어렵다. 언어에 아주 작은 변화만 주어도 의존하던 성질이 깨질 수 있고, 언어 기능들은 보기 좋게 합성되지 않는다. 설계 공간은 광대하고, 구석구석을 탐색하는 데는 비용이 많이 든다(전 세계에 실제 제품 수준의 컴파일러가 얼마나 되나?) 그리고 우리에게 주어진 시간은 많지 않았다.
한편으로 PLT가 다루는 대상은 매우 구체적이다: 바로 프로그래밍 언어. 우리는 그것을 실험할 수 있고, 인터프리터를 작성할 수 있고, 나만의 토이 언어를 만들 수도 있다. 실제로 많은 사람이 그렇게 한다! 그렇다면 이론도 좀 배우면 어떨까? 얼마나 어렵겠어?
불쾌한 놀라움이 기다린다.
사람들이 무엇을 해야 하고 말아야 하는지 내가 명령할 수는 없다. 하지만 소망 목록을 적을 권리는 충분히 있다.
부디 내 성실한 노력으로 PLT의 아름다움을 더 많은 이들에게 전할 수 있는 의지의 힘과 마음의 맑음을 주소서. 독자들이 내 의도를 이해하고, 나의 빈정거림을 용서하며, 글을 즐기길.