세상에서 가장 오해를 받던 언어가 가장 핫한 언어가 되다

Douglas Crockford 2008-03-03

진 새밋(Jean Sammet)은 1969년에 Computer Language : History and Fundamentals 라는 책을 썼습니다. 꽤 디테일하게 120개의 프로그래밍 언어를 조사한 내용이었죠. 새밋의 책은 구조적 프로그래밍 혁명이 일어나기 전의 언어부터 객체지향이 등장한 이후의 언어까지를 망라한 연대기였습니다. 책의 표지는 바벨탑의 그림이었습니다. 탑을 이루는 많은 벽돌들에 프로그래밍 언어의 이름들이 씌여있었죠.

이 탑은 아시다시피 성서의 창세기에 나오는 일화입니다. (11장 1절-9절) 대단한 공학적 재능으로 도시와 탑을 짓던 이야기죠.

그러자 주님께서 내려오시어 사람들이 세운 성읍과 탑을 보시고 말씀하셨다. "보라, 저들은 모두 한 겨레이고 모두 같은 말을 쓰고 있다. 이것은 그들이 하려는 일의 시작일 뿐, 이제 그들이 하고자 하는 것은 무엇이든 못할 일이 없을 것이다. 자, 우리가 내려가서 그들의 말을 뒤섞어 놓아, 서로 남의 말을 알아듣지 못하게 만들어 버리자."
주님께서는 그들을 거기에서 온 땅으로 흩어 버리셨다. 그래서 그들은 그 성읍을 세우는 일을 그만두었다. 그리하여 그 곳의 이름을 바벨이라 하였다. 주님께서 거기에서 온 땅의 말을 뒤섞어 놓으시고, 사람들을 온 땅으로 흩어 버리셨기 때문이다.

때때로 이 일화는 교만에 대한 경계로 해석됩니다. 때로는 단순히 왜 사람들이 이렇게 많은 언어를 사용하는지에 대한 설명으로 인용되기도 하구요. 주님I18N(국제화) 문제를 만들어서 사람들의 잠재력을 가로막았다고. 그러나 저는 이것을 프로그래밍 언어 설계에 대한 비유로 해석합니다. 프로그래밍의 근본적인 문제는 복잡성을 관리하는 것입니다. 요구사항이 변경되는 시점에서 사용하는 언어가 아주 복잡한 시스템을 관리하는 데에 별로 도움이 되지 않는다면, 결과물은 혼돈의 카오스가 되고 당연히 실패가 따라오게 됩니다.

왜 이렇게 많은 프로그래밍 언어들이 있을까요? 새밋이 정리해둔 것 이상으로 많은 언어들과 변종들이 지난 40년이 넘는 시간동안 개발되어 왔습니다. 우리는 고수준 프로그래밍을 오랫동안 해왔죠. 우리는 이제라도 하나로 통합된 올바른 방법을 찾아야 하는 게 아닐까요? 하나의 완벽한 언어를 설계하고 사용하는 데에는 누가 봐도 확실한 장점들이 있습니다. 우리는 우리가 가진 자원들을 도구를 개발하거나 훈련하는 데에 더 효과적으로 쓸 수 있게 되겠지요. 대체 왜 아직 이런 걸 만들지 않고 있는걸까요?

사실 시도는 하고 있습니다. 거대하고 통합된 언어를 만들기 위한 여러 시도가 있었죠. 물론 모두 나가리였습니다. 언어 설계와 응용 범위가 커질수록 언어는 무지무지 복잡해집니다. 언어를 너무 복잡하게 만드는 설계자는 결국 혼란스러운 언어를 만들게 될 겁니다.

따라서 우리는 수많은 전문화된 언어들을 보게 되었습니다. 전문화된 언어들은 특정한 작업들에 대해 아주 효율적입니다. 그리고 그거면 충분하죠. 특정한 작업들을 하려는 사람들에게는 거기에 적합한 언어가 있다는 게 말 그대로 신의 은총같은 일입니다.

프로그래밍 언어는 계산 모델을 표현하기 위한 문법들의 조합입니다. 대부분의 언어들은 숫자, 글(주로 String이라고 부르죠 희한하게도..)과 같은 유용한 값들과 그 값들을 변형하고 통합하기 위한 연산자들, 그것을 제어하고 반복하기 위한 제어문, 그리고 그런 연산들을 더 편리하게 사용하기 위한 포장 방법들을 가지고 있습니다. 이들의 조합은 무궁무진합니다. 말하자면 맛있는 음식을 만들기 위한 준비나 음악을 만드는 작업처럼 말이죠. 프로그래밍 언어 설계의 핵심은 뭘 버려야 할 지 아는 것입니다. 좋은 언어의 기능은 서로 조화롭게 동작합니다. 좋은 언어는 문제를 더 이해하기 쉽게 해주고, 가장 좋은 해결책을 찾을 수 있도록 도와줍니다.

좋은 언어는 한정된 기능들의 조합입니다. 물론 어떤 기능이 가장 좋은지에 대한 최소한의 동의가 있어야겠죠. 프로그래머들은 어떤 기능을 가지고 "이 기능이 언어를 다른 언어보다 더 낫게 해준다", "아니 개소리 하지 마라" 하는 토론을 세상이 망할 때 까지라도 할 수 있는 덕후들입니다. 기능이 딱히 중요하지 않다는 이야기가 아닙니다. 사실 엄청 중요합니다. 우리는 단지 이게 어떤식으로 중요한지를 아직 모르는 것 뿐입니다.

프로그래밍 언어 설계는 기술보다는 유행을 더 따릅니다. 유행이 가장 중요한 요소라는게 아무래도 좀 이상해보이긴 하겠지만 사실입니다. 근본적으로 완전히 기존과 다른 문법을 가진 언어, 예를 들어 기존의 문법들을 단 하나도 채용하지 않고 언어 설계의 아름다움에 개의치 않는 언어가 있다면, 이런 언어는 발전 속도가 제한되는 경향이 있습니다.

음악이나 요리처럼, 프로그래밍 언어도 시대의 산물일 수 있습니다. 언어 설계의 핵심적인 문제는 기술적인 것이 아니라 심리적인 것입니다. 프로그래밍 언어는 보다 효과적인 근거들로 이루어진 체계를 제공해야 합니다.

프로그래밍 언어들은 고양이와 비슷합니다. 새 고양이를 기르는 것이 오래된 고양이의 성깔을 고치는 것보다 훨씬 쉽습니다. 대부분의 성공적인 언어들은 결국 새로운 언어들에게 자리를 내줍니다. 설계를 뜯어고친 언어들 중에서 극소수는 원래의 영광을 다시 찾기도 합니다. 포트란은 한 때 언어계의 짱짱맨이었습니다. 이 언어는 수년간 계속해서 설계가 수정되었습니다만, 대부분의 현대적 변종들은 포트란 IV가 누리던 영광의 편린만을 맛보았을 뿐입니다. 비슷하게, 파스칼도 나름 먹어주는 언어였던 적이 있습니다만, 객체지향을 채택한 변종들은 죄다 파스칼의 포쓰에 쨉이 되지 않았습니다. 그보다는 언어는 다른 언어로 대체되는 경향이 있습니다.

전문화된 언어를 만드는 건 재밌는 일입니다. 이는 이런 언어가 많은 이유 중 하나입니다. 언어가 너무 커지지만 않으면 한 명의 설계자가 충분히 언어를 관리할 수 있습니다. 대부분의 언어들은 각각을 대표하는 설계자가 있습니다.

  • PASCAL : Wirth.C
  • C : Dennis Ritchie
  • C++ : Bjarne Stroustrup
  • JAVA : James Arthur Gosling
  • C# : Anders Hejlsberg
  • Rebol : Sassenrath
  • Python : Guido van Rossum
  • PHP : Lerdorf
  • Perl : Wall
  • Ruby : Matsumoto
  • Lua : Ierusalimschy
  • E : Miller
  • Javascript : Eich

대부분의 언어들은 사멸하는 시점이 명확하지 않습니다. 하나의 프로젝트, 혹은 한 군데의 회사에서만 사용되는 수준을 넘어서는 언어는 아주 소수입니다. 그리고 그 중에서도 엄청나게 적은 수만이 중요한 언어의 지위를 차지하게 되죠.

어떤 언어가 중요한 언어로 부상하는 데에는 두 가지 길이 있습니다. 첫째는 어떤 중요한 아이디어의 원천이나 시험대가 되는 것입니다. 예를 들어서 스몰토크나 스킴 같은 것들이죠. 얘들은 널리 쓰이는 편은 아닙니다만, 일반적으로 잘 알려져 있습니다. 유행을 탄 언어 설계는 아니었지만, 이 언어들은 다른 설계자들에게 강한 영향을 주었습니다.

두번째 방법은 유명해지는 것입니다.

프로그래머들이 언어를 선택하는 데에는 고려해야 할 사항들이 많이 있지만, 웹브라우저에서 동작하는 프로그램을 만들어야 한다면 현재까지는 선택이고 자시고 꼴랑 자바스크립트 딱 하나 밖에 없습니다.

자바스크립트는 아주 놀라운 언어입니다. 물론 나쁜 의미로요. 평판이 아주아주 나쁩니다. 게다가 자바스크립트는 DOM 이라는, 아주 찐따같은 API 와 엮여있습니다. 대체 어디까지가 자바스크립트고 어디서부터가 DOM인지는 며느리도 모릅니다. 자바스크립트를 향상시키겠다는 썰이 여기저기 아주 많이 있습니다만, 아마 기껏해야 웹 개발자의 인생이나 조금 나아질 뿐이겠죠. 자바스크립트는 아주 많은 기능들을 담고 있는데, 이 기능들중에는 찐따같이 설계된 것들과, 서로에게 악영향을 끼치는 기능들도 포함되어 있습니다. 이 언어는, 요셉 황제의 말처럼 너무 음표가 많습니다. (역주: 영화 아마데우스 참조)

그렇다면, 대체 이렇게 꼬질꼬질한 언어가 어떻게 웹의 유일한 언어가 되었을까요? 브렌단 아이히(Brendan Eich)는 넷스케이프사에서 자신의 상사에게 네비게이터(당시 넷스케이프 사의 브라우저)가 자신만의 새로운 스크립트 언어를 가지고 있어야 한다고 설득했습니다. 그래서 벼락치기로 새로운 언어를 설계하고 만들었죠. 다른 언어를 가져다 쓸 생각은 아마 하지도 않았을 겁니다. 마이크로소프트사의 인터넷 익스플로러 팀은 넷스케이프의 시장 점유율을 따라잡고 싶었고, 그래서 넷스케이프의 스크립트 언어를 역분석했습니다. 털이 숭숭 난 사마귀같은 부분까지 모조리 다요. 다른 브라우저 제작사들도 마이크로소프트의 선례를 따랐습니다. 웹 브라우저가 자바스크립트를 구현해야 한다는 표준 같은 건 없지만, 자바스크립트는 어느새 모든 유명 브라우저에 구현된 유일한 언어가 되었죠. 물론 언어자체 혹은 언어가 가진 문제에 대한 심도 있는 고찰은 없었습니다. 이 언어가 적합하긴 한지, 설계가 멀쩡한지 그런건 안중에도 없었구요. 단순히 넷스케이프와, 그 회사를 따라한 다른 곳들 사이에 쿵짝이 잘 맞았던 거죠. 이게 바로 자바스크립트가 만들어지고, 실질적인 표준이 된 경로입니다. 좀 더 까도 될 것 같죠.

하지만 자바스크립트는 이런 단점들에도 불구하고, 더 깊이 들어가보면 핵심적인 부분에서는 아주 괜찮은 것들을 가지고 있습니다. 짜증나는 부분들을 벗겨내고 들여다 보면, 표현력이 좋고 강력한 프로그래밍 언어가 드러납니다. 이 언어는 DOM을 관리하고 다루는 많은 AJAX 라이브러리들에 사용되고 있고, 웹페이지를 통해 서비스되는 많은 어플리케이션 플랫폼을 만들어냈습니다. 자바스크립트가 제대로 동작해줬기 때문에 AJAX 도 유명해질 수 있었죠. 이게 생각보다 엄청 멀쩡하게 동작하더라구요.

자바스크립트는 세상에서 가장 오해를 많이 받는 프로그래밍 언어였습니다. 확연한 결점들, 유행과 어긋난 프로그래밍 모델, 뻥카로 점철된 소개, 그리고 뭘 좀 아는 프로그래머들에게 거부당하기 쉬운 병신같은 이름에도 불구하고 AJAX 가 자바스크립트에게 새로운 기회를 주었죠.

자바스크립트는 웹 브라우저를 위한 언어고, 웹 브라우저는 가장 영향력있는 어플리케이션 배포 플랫폼이기 때문에, 그리고 자바스크립트가 그렇게 또 구리지는 않기 때문에, 자바스크립트는 세상에서 가장 유명한 프로그래밍 언어가 되었습니다. 유명세는 계속 커져 가고 있구요. 이젠 브라우저가 아닌 다른 플랫폼에까지 포함되고 있습니다. 자바스크립트는 중요한 언어가 되었어요.

뭐니뭐니 해도 운이 좋은게 똑똑한 것 보다 낫습니다.

  • 이 포스트는 http://javascript.crockford.com/popular.html 를 번역한 것입니다.
  • 원문의 저작권은 Douglas Crockford 에게 있습니다.
  • 예전에 티스토리 블로그에 썼던 번역 포스트를 문장을 다듬어서 옮깁니다.
  • 성서 인용 부분은 가톨릭 성서를 참조했습니다.
  • http://javascript.crockford.com/javascript.html 이 글을 읽고 보면 더 좋습니다. 한글 번역이 현재 페이지가 안 열리는데, "자바스크립트에 대한 오해" 로 검색해보시면 번역된 글이 나올겁니다.
  • 원작자 허락은 당시에 받았습니다.

    douglas_answer.PNG