프로그래밍 언어 이론(PLT)이 왜 대중으로부터 오해받는지, 그리고 이를 개선하기 위한 바람에 대해 탐구한다.
2025년 7월 13일
프로그래밍 언어 이론(Programming Language Theory, PLT)은 내가 가장 좋아하는 컴퓨터 과학 분야 중 하나이지만, 외부인에게 가장 오해받는 영역 중 하나라고 느낀다.
순수 이론과 실용적 응용의 경계에서 아름다운 구성과 훌륭한 아이디어가 가득하지만, PLT 커뮤니티 밖에서는 난해하고, 어렵고, 쓸모없으며, 비실용적이라는 평가를 받는다. 이는 순수 수학에 대한 대중적 시각(“이걸 왜 배워야 하죠?”, “실질적인 응용이 있나요?”)과 유사하지만, 어쩌면 그보다 더 심각하다.
어쩌다 이렇게 되었을까?
PLT는 아름다운 위상수학 정리를 증명하는 것처럼, 혹은 멋진 그림처럼 순수 수학적 주제로서 수행되고 감상될 수 있다. 일종의 예술이다. 완전히 이해하려면 어느 정도의 배경지식이 필요하다.
순수 이론적 작업도 때때로 “실용적인 응용이 있다”라는 식으로 제시된다. 여기서 저자가 의미하는 것은 “이 결과는 다른 정리를 증명할 때 사용될 수 있고, 이 분야에 관심 있는 다른 8명이 그런 용도로 실질적인 유용성을 느낄 수도 있다”는 정도일 때가 많다. 어떨 때는 언젠가 쓰일지 모를 미래의 잠재적 응용에 대해 과장하는 경우도 있다.
PLT에 관심을 갖게 된 숙련된 소프트웨어 엔지니어를 상상해보자. 누군가가 Barendregt의 “The Lambda Calculus. Its Syntax and Semantics”를 읽으라고 권했다. 그는 익숙하지 않은 표기법과 싸우며, 자신의 경험과 관련될 만한 통찰을 얻기 위해 끙끙댄다. 결국 Church-Rosser 정리를 이해하게 되었다.
“Church-Rosser 정리는 뭘 하는 데 좋은 거죠?” 엔지니어가 묻는다. 아, 그게 실용적인 응용 이 있죠, 당신이 아직 충분히 몰라서 그렇지.
엔지니어는 사라졌다. 그 시간에 차라리 새 자바스크립트 프레임워크를 배우는 게 더 쓸모 있었다. 적어도 거기서는 당장의 실용적 효용을 기대할 수 있었다.
겉보기에는 단순한 정리도 엄청난 도구가 필요하며, 그 도구들도 여전히 개발되는 중이다. 30년대에 시작했건만 완벽하지 않다.
다른 수학 분야와 무엇이 다를까? 학부나 대학원 수학 커리큘럼을 들여다보면, 대부분의 과목은 서로 긴밀하게 연결되어 있다. 이전 지식을 바탕으로 쌓아올리고, 여러 분야를 연결해 주는 “다리 역할”을 하는 유명한 정리도 많다.
PLT는 좀 다르다. 각 논문, 각 증명이 거의 처음부터 새로 시작하는 느낌이다. 다른 사람의 보조정리나 정리를 재활용하는 경우가 드물다. 정의조차도 일치하지 않는 일도 많다. 그래서 논문 하나하나가 늘 새로 시작하는 것 같다.
오해는 하지 말길. PLT 연구자들은 서로의 논문을 읽고 영향을 주고 받는다. 하지만 이런 영향은 공식적으로 증명 전체를 재활용한다기보다는, 기교와 접근법의 차원에서 일어난다. 다른 수학 분야처럼 정리 위에 정리를 쌓는 대신, PLT 연구자들은 서로의 증명 방법을 자기식으로 변형해서 다시 바닥부터 구축하는 경향이 있다.
각 논문, 각 문제가 고유한 정의와 보조정리, 정리를 따로 요구한다고 언급했다. 만약 공통 증명 기법을 범용적인 정리로 포장해 여러 증명에 재활용할 수 있다면 좋지 않을까?
확실히 좋겠지만, 그 대가는 극단적으로 높은 수준의 추상화다. 복잡한 설계 패턴, 수 많은 간접화, 여러 레이어가 있는 코드베이스를 떠올려보라. 스파게티 코드는 아니지만, 필요한 설계이고 잘 쓰이고 있지만, 진입 장벽은 매우 높다.
이런 코드베이스에서라면 모든 기능을 처음부터 직접 구현하는 게 “훨씬 더 쉽다”고 느끼는 것과 마찬가지로, 추상적 방법을 이용한 증명도 그렇다. 아주 강력하긴 하지만, 직관적 명료성을 잃고 신규 입문자가 진입하기 어렵게 만든다.
PLT는 정말 어렵다. 언어에 약간의 변화만 생겨도, 의존하던 성질이 깨질 수 있고, 언어 기능은 서로 잘 조합되지 않는다. 설계 공간이 방대하고, 구석구석을 탐구하는 비용도 비싸다(전 세계에 실사용 수준의 컴파일러가 몇 개나 있을까?) 우리는 아직 충분한 시간을 갖지 못했다.
그래도 PLT는 아주 구체적인 대상을 다룬다: 프로그래밍 언어다. 직접 실험할 수 있고, 인터프리터도 써볼 수 있고, 자기만의 장난감 언어도 만들 수 있다. 실제로 많은 사람들이 그렇게 한다! 이론도 좀 배워보면 어떨까? 그렇게 어렵겠어?
불쾌한 현실이 기다리고 있다.
남에게 이래라 저래라 할 순 없다. 하지만 내 소망을 적을 권리는 있다.
내 노력을 통해 PLT의 아름다움을 더 많은 사람들에게 전할 수 있는 의지와 명료함을 갖게 되길. 독자들이 내 의도를 이해하고, 내 풍자를 용서하며, 이 글을 즐기길 바란다.