본문 바로가기

Software for Life

프로그래밍 언어의 바벨탑을 쌓으려는 분들에게

기억 속에 오랫동안 남아있는 충격적인 격언 중에 하나가 "너의 언어는 너의 사고의 한계이다."라는 격언이었습니다.
언제 어느 책에서 읽었는지 모르지만, 아직도 제 머리속에 이 격언을 처음 읽었을때의 느낌은 생생합니다. 정말 망치로 머리를 얻어맞은듯한 느낌이었습니다.

이 격언을 접한 후로는 개인적으로는 하나의 언어에 집착하지 않습니다. 내 사고의 한계를 하나의 언어에 가두고 싶지 않았기 때문입니다.
하지만 가끔 이 격언을 다시 생각나게 하는 경우를 만나곤 합니다.

무슨 이야기냐면 자신이 좋아하고 잘 하는 프로그래밍 언어가 세상의 최고라고 말씀하시는 분들을 만나는 경우입니다. 사실 지금은 많이 줄어들었지만, 예전에는 "Java vs .NET"에 관한 논쟁이 정말 많았습니다. 정말 꺼내기도 거북한 이 케케묶은 "Java vs .NET"의 논쟁은 사실 여전히 끝나지 않은듯합니다.

아직도 몇몇 분들이 이 이야기를 하시기도 하며, 각자 자신이 선호하는 프로그래밍 언어를 옹호하곤 합니다. 비단 Java나 .NET 뿐만 아니라 C, C++, Ruby, Phython, Lisp 등등의 언어를 사용하시는 분들 모두 자신의 선호하는 프로그래밍 언어를 옹호합니다.

사실 당연한 일입니다. 자신이 자신있게 생각하고 자신이 좋아하는 프로그래밍 언어에 대한 애착은 누구나 가지고 있는 것입니다.
하지만, 프로그래밍 언어에 대한 애착이 집착으로 변하면 좀 곤란합니다.
이 집착이 심하신 분들은 자신이 사용하는 프로그래밍 언어에 대한 장점을 마치 지하철에서 포교을 하시는 분들처럼 다른 사람이 듣던 말건 열심히 떠들곤합니다. 이정도 수준이면 거의 소음에 가깝습니다.

저의 경우 주로 사용하는 언어는 Java이며, 가끔 C나 C++의 코드도 조금씩 봅니다. 물론 C나 C++를 잘하지는 못합니다. STL을 잘모르며, Visual Studio의 Ctrl + Space의 도움을 받아 한줄 한줄 더듬더듬 보는 수준입니다. 그리고 최근에는 Lisp란 언어에 관심을 가지기 시작하였습니다. 사실 Lisp도 초보입니다.

제가 이렇게 여러 언어에 관심을 가지는 이유는 결국 모든 언어는 0과 1위에 모두 동일하다고 생각하기 때문입니다.
즉, 우리 모두가 사용하는 모든 프로그래밍 언어는 튜링 머신(Turing machine)을 돌리기 위하여 존재하므로, 결국 같은 일을 다른 언어로 하고 있을 뿐입니다. 여기에 물론 반론이 있으신 분들도 있겠지만.. 결국 그렇다는 것입니다.


저는 이 시점에서 여러분에게 의미있는 변화를 하나 말씀해드리고 싶습니다. 많은 분들이 잘 알고 있는 마틴 파울러(Martin Fowler)는 자신이 설립한 소트웍스(ThoughtWorks)에서 새로운 프로그램을 개발할때 Ruby를 사용하기로 결정하였다고 합니다.

하지만 Ruby는 여러가지 기능적인 제약이 있었다고 합니다. 이를 보완하기 위하여 마틴 파울러(Martin Fowler)는 JRuby를 사용하기로 하였다고 합니다. 제가 Ruby보다 JRuby가 더 좋다라고 말씀드리는 것이 아닙니다.

마틴 파울러(Martin Fowler)는 결국 플랫폼을 선택한 것입니다. 언어의 단점을 보완하고 여러 언어로 개발하여 프로그램의 궁극적인 성능을 쉽게 개선하였다는 것을 말하고 싶습니다.

즉 Ruby는 Java의 다양한 장점을 수용할 수 없었습니다. 하지만 JRuby는 Ruby의 장점을 수용하면서도  Java Platform이 가지고 있는 여러가지 유용한 기능을 동시에 사용할 수 있습니다. 이를 통하여 Ruby에서 어렵게 구현해야 하는 부분들을 쉽고, 빠르게 구현할 수 있었다는 점입니다.

프로그래밍 언어는 결국 비즈니스 로직을 표현하는 하나의 수단이라는 것입니다.

이러한 변화를 마틴 파울러(Martin Fowler)"소트웍스 앤솔러지(ThoughtWorks Anthology) - 소프트웨어 기술과 혁신에 관한 에세이"란 책의 "5장 다언어 프로그래밍"에서 잘 설명해주고 있습니다. 자세한 내용은 책에서 한번 확인해보세요~ :-)

이런 저런 솔루션을 하나의 언어에 쑤셔 넣으려던 시절은 끝나가고 있다. Java나 CLR과 같은 훌륭한 관리 런타임이 있기에, 더 나은 도구로 이들 플랫폼을 활용해야 한다.


.NET의 CLR의 경우 Java Platform보다 더 유연하게 다양한 언어를 수용합니다. 즉 프로그래밍 언어보다 플랫폼이 중요한 시대가 도래한 것입니다.

물론 Java나 .NET 플랫폼이 제공할 수 없는 영역은 계속 존재할 것입니다. 하지만 그 간극은 계속 줄어들것입니다. 여러분이 하나의 프로그래밍 언어에 집착을 부리고 있을때, 다른 누군가는 정말 사용자가 원하는 프로그램을 쉽고 빠르고 풍부하게 제공하기 위하여 좋은 플랫폼을 선택하고, 자신이 편한 언어로 프로그래밍을 하여 제공할 것입니다.

프로그램은 여러분 자신이 사용하는 것이 아니라 많은 사용자가 사용하는 것입니다. 즉, 사용자를 위한 프로그래밍을 하여야 하며, 따라서 프로그래밍 언어의 선택 기준도 사용자를 위한 프로그래밍 언어이여야만 한다고 생각합니다. 물론 사용자는 여러 분류로 나뉘어 있기 때문에 자신이 선호하는 프로그래밍 언어로 프로그램을 짤때 더욱 좋은 프로그램을 작성하실 수 있겠지요~


마지막으로 잘 아시는 바벨탑 이야기를 하겠습니다. 하나의 언어로 통일하여 신의 권의에 도전했던 바벨탑은 결국 무너졌습니다.
하나의 프로그래밍 언어로 모든 세상을 지배하고 통일하려는 노력은 결국 사용자의 외면을 받게 될 것입니다. 그리고 서서히 무너질지 모릅니다.


다양한 프로그래밍 언어가 각자의 목적에 따라 공존하고, 다른 프로그래밍 언어를 존중하는 문화가 소중합니다. 그리고 자신이 선호하는 프로그래밍 언어에 대한 집착은 자신의 사고의 범위를 좁히는 일입니다.

다소 논란의 여지가 있을 수 있습니다만, 너무 자신의 선호하는 프로그래밍 언어에 대한 집착을 하시는 분들이 있으셔서 이 글을 올립니다.
감사합니다.
이종성님의 글(http://blog.naver.com/devace/20063810907)에서 오렐리에서 나온 프로그래밍 언어 연대기를 보고 참고가 될 듯하여 추가로 올립니다.

프로그래밍 언어의 연대기가 궁금하신 분은 The History of Programming Languages(http://oreilly.com/pub/a/oreilly/news/languageposter_0504.html)를 참고하세요~