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

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

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

무슨 이야기냐면 자신이 좋아하고 잘 하는 프로그래밍 언어가 세상의 최고라고 말씀하시는 분들을 만나는 경우입니다. 사실 지금은 많이 줄어들었지만, 예전에는 "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)를 참고하세요~

Trackback 0 And Comment 14

Trackback http://blog.java2game.com/trackback/229 관련글 쓰기

  1. Favicon of http://blog.naver.com/devace 이종성 2009/03/17 03:53 address edit & del reply

    바벨탑 비유는 프로그래밍언어론 책 표지로 자주 등장하는 그림인데, 글의 내용과 잘어울리는 멋진 그림이군요,:-) 물론 글의 내용은 훨씬 더 좋구요 ^^ 좋은 글 잘읽고 많은 생각 해봅니다. 본문일부를 인용합니다. 좋은 영감 얻었습니다 ^^ 인용한 포스트 위치 : http://blog.naver.com/devace/20063810907
    혹 인용이 불쾌하시면 바로 지우겠습니다.

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/03/17 09:28 address edit & del

      안녕하세요~ 이종성님 :-)

      제 글을 인용해 주셔서 감사합니다. 절대 불쾌하지 않습니다. 최근 제글의 CCL 표기를 지웠는데요~ 모든 분들과 더 쉽게 함께 나누고 싶어서입니다.

      Copyleft라고나 할까요~

      좋은 댓글 감사합니다. ;-)

  2. Favicon of http://greenfrog7.egloos.com greenfrog 2009/03/17 08:47 address edit & del reply

    이제 1년을 갓 넘긴 개발자로써 저 또한 어떤 언어에 투자를 할 것인가에 대해 많은 고민을 하고있습니다.
    저희 부장님께서도 선진님과 같은 생각을 갖고 계신데요. 언어는 단지 표현의 수단일 뿐이지 목적이 아니라고 말씀하십니다.
    전에는 저도 특정 언어에 투자를 많이 해서 전문가가 되어야겠다는 생각을 주로 했었지만 요즘에는 여러가지 언어를 두루 익혀두고 나중에 필요할때 깊이 있게 공부해도 늦지 않다고 생각하고 있습니다.
    선진님의 글을 읽고 나니 제 생각에 더 자신이 생기네요 ~~ ^^ 좋은 글 잘 보고 갑니다 ~~~ ㅎㅎ

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/03/17 09:31 address edit & del

      좋은 부장님과 함께 일하시네요 :-)

      처음 시작하시는 입자에서는 말씀하신대로 넓게 보는게 중요한듯 합니다. 그 중에서 자신에 마음에 드는 분야를 선택해서 깊게 파신다면 좋은 결과가 있으실 거에요~

      최근 T자형 인간이 뜨고 있죠~ ㅡ 처럼 넓게 알면서도 | 처럼 깊게 아는 것이 중요한듯합니다. 물론 처음에는 쉽게 T자를 완성하지 못하더라도 느긋하게 전진하시다보면 좋은 결과를 얻으실 것입니다.

      감사합니다. ;-)

  3. Favicon of http://cherubino.kr cheru 2009/03/17 10:13 address edit & del reply

    프로그래밍 언어의 바벨탑! 의미 전달이 명확해지는 조합인 것 같습니다. 지금 마시는 커피처럼 뇌에 은은하게 쏙쏙 들어오는 단어랄까요. 연구과제 때문에 포트란을 다루다보니 투정도 많이 했었는데, 언어 편식하지 말아야겠다는 생각을 갖았습니다. 좋은 하루 되세요~!

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/03/17 16:43 address edit & del

      저도 참 커피를 좋아하는데 제 글이 커피맛을 좋게한것 같아서 다행입니다.

      포트란이라~ 한번 접해보고 싶네요~

      좋은 하루 보내세요~ :-)

  4. Favicon of http://lemonbook.pe.kr 레몬에이드 2009/03/17 10:37 address edit & del reply

    역시 뛰어난 언변에 오늘도 감동을 ;ㅁ;

    뭐 하나의 언어에 빠지는 것도 좋지만
    다른 언어의 다양성과 그 장점들을 이용하지 못한다면
    그만큼 자신을 가두는게 될꺼란 생각은 저도 동의합니다!

    그나저나 소트웍스 다음달엔 무조건 사야겠군요
    읽고 싶어지네요 ㅎ

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/03/17 16:45 address edit & del

      안녕하세요~ 지환님
      제가 감동까지 드렸나요 :-D

      며칠전에 어느분과 이야기를 하다가 이글을 적게되었습니다. 소트웍스 나름 궨찮아요~

      그럼 좋은 하루 보내세요~ :)

  5. Favicon of http://blog.outsider.ne.kr Outsider 2009/03/17 10:43 address edit & del reply

    좋은 글 잘 읽었습니다.
    특정언어에 집착하지 말아야지 하면서도 저도모르게 그런 사고에 갇히게 되어버리더군요. ㅎ

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/03/17 16:46 address edit & del

      네~ 감사합니다.

      그게 참 무서운것 같습니다. 다형성이 중요한듯합니다.
      좋은 하루 보내세요~

  6. Favicon of http://blog.naver.com/netscout82 워너비 2009/03/19 16:32 address edit & del reply

    처음들려보네요~.
    마소에 AOM에 대해 소개해주셨던 글 참 잘 읽었었습니다.
    저도 하나의 언어를 고집하면 언어안에서만 생각하게 된다는 이야기를 "실용주의 프로그래머"에서 봤던 기억이 나네요.
    그래서 1년에 새로운 언어를 하나씩 공부하라고 저자가 권했던 기억도 나네요.

    저도 Structure and Interpretation of Computer Programs를 보면서 Scheme을 조금 봤었는데요, 제 내공이 허접해서 그런지 참 신기하다고 생각했었습니다.
    굉장히 높은 수준의 추상화를 제공해서, higher-order였던가요;;; 메서드를 그냥 매개변수로 넘기고 어쩌고 저쩌고...
    뭐 물론 지금은 C#이나 기타 동적언어에서 지원하는 거지만요;;;

    최근에는 가장 배워보고 싶은게 F#입니다.
    말씀하신대로 플랫폼의 이점과 동시에, C#같은 주력언어와도 CLR&DLR의 힘을 빌려서 조합이 가능하기 때문이죠.
    그래서 함수형 언어가 강점을 가지는 부분은 F#으로 나머지는 C#으로 뭐 이런 생각을 하고 있는데 내공이 허접해서 언제쯤 가능할지는 모르겠네요.

    JRuby는 좀 많이 주목을 받는거 같은데, IronRuby는 그냥 조용한 거 같네요.
    기분탓인가요? ㅋㅋ.
    좋은 글 감사합니다.

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/04/07 05:29 address edit & del

      안녕하세요~ 워너비님 :-)

      이렇게 들려주셔서 감사합니다. 제가 예전에 썼던 AOM에 관한 기사를 재미있게 읽으셨다니 저도 기분이 좋습니다.

      쓰면서 이런 저런 고민을 많이 했었는데 다행입니다. :-D

      새로운 언어를 배운다는 것이 사실 약간의 두려움이 있는 일입니다. 항상 모르는 것에 도전한다는 것은 어려운 일이라고 생각합니다.

      하지만 모르는 것을 하나씩 배우는 재미또한 쏠쏠한것 같습니다. 아직 Lisp를 잘 모르지만, 스킴(Scheme) 또한 재미있을 것 같습니다. 아직 보지는 못했습니다. :-)

      Ruby가 여러모로 각광을 받고 있는것 같습니다. Ruby on Rails의 강력함이란.. CoC의 장점은 계속 이어질 것 같습니다.

      .NET에서도 Java 처럼 오픈소스화가 점진적으로 이루어지고 있으니 조만간에 IronRuby에도 좋은 소식이 있겠지요~

      저 역시 좋은 댓글 감사합니다. 행복한 프로그래밍하시길 기원드리겠습니다. ;-)

  7. Favicon of http://www.finebe.com finebe 2009/03/30 10:08 address edit & del reply

    안녕하세요 장선진님.^-^ 좋은 아침입니다..

    프로그래밍 언어의 바벨탑이라...제목만 보고..얼추 내용을 예상할 정도로 적절한 표현이라고 생각됩니다.

    저도 분명 하나의 언어를 고집하는 경향이 있습니다. 이미 그 언어에 대해 단점을 알고 있는 데도 말이죠..

    그렇다고 해서 제가 알고 있는 그 하나의 언어를 100% 마스터했다는 건 절대 아닙니다. 분명 한참 멀었죠 하하 ^^;

    선진님의 "다양한 프로그래밍 언어가 각자의 목적에 따라 공존하고, 다른 프로그래밍 언어를 존중하는 문화가 소중합니다."

    라는 글을 보고 나니..웹프로그래밍을 한때나마 무시했던 제가 떠오르네요..

    하지만 지금은 웹프로그래밍을 열심히 하고 있답니다 ^-^

    매번 좋은 글 감사드립니다. 좋은 하루 되세요..

    • Favicon of http://blog.java2game.com 장선진 jangsunjin 2009/03/30 13:47 address edit & del

      안녕하세요~ finebe님 :-)

      저역시 예전에는 하나의 언어에 몰입하던 때가 있었습니다. 지금은 그때 그때 다르지만, 이제 더 이상 프로그래밍 언어에 대한 고집이나 집착은 버려야 할 때가 아닌가 생각됩니다.

      특히 최근 AJAX등이 나오면서 웹 프로그래밍도 난이도가 높아지고 있으며, ActionScript를 사용하는 Flash나 FLEX와 같은 프로그래밍은 상당히 난이도가 있어 보입니다.

      자신의 장점을 살릴 수 있는 언어를 중심으로 기량을 쌓아 간다면 결국 사용자가 인정해주는 좋은 소프트웨어를 만들 수 있지 않을까 생각됩니다.

      저역시 좋은 댓글 감사드립니다. 덕분에 오늘 힘이 나네요~ :-)

prev | 1 ... | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 ... | 291 | next