[Beta 추천평] Ruby를 배워야 하는 몇 가지 이유
구조적 프로그래밍 언어의 문제를 해결하기 위해서 객체 지향 언어가 나왔습니다. c의 문제점을 해결하기 위해서 c++가 나왔듯이 java는 c++의 문제점을 해결하기 위해서, c#은 java 문제점을 약간 해결하기 위해서 세상에 나왔습니다.즉, 새로 소개되는 language의 특징은 이전 언어에서 문제점으로 지적된 것을 개선한 것입니다. 이름도 알려지지 않은 수 많은 프로그래밍 언어들이 만들어지기도 하고 뜻을 펴보지도 못하고 역사속으로 사라지기도 합니다.
windows 세계에서 아직도 영향력을 미치고 있는 언어는 basic과 c++입니다. 한동안 IT 붐이 일면서 java 배우기가 인기 있던 시절이 있었습니다. 얼마전에 열린 2006 Java 개발자 컨퍼런스를 참석해 보니 아직도 java의 인기는 여전한거 같더군요.
마찬가지로 웹 쪽에서는 php가 가장 큰 개발자 그룹을 보유하고 있습니다. 금융권에는 cobol이 아직도 유효합니다. 따라서 각 언어의 젊고 나이 많음을 떠나 특정 도메인의 주요 솔루션으로 자리 잡고 있다면 문제점이 많은 언어라도 존재 가치를 인정 받는 것입니다.
가끔 개발 사이트를 돌아 다니다 보면 대학생이나 IT분야를 직업으로 삼으려는 분들이 “무슨 무슨 언어를 배우면 돈을 많이 벌 수 있나요?” 질문을 올리는 것을 심심치 않게 봅니다. 이 질문을 받는 프로그래밍 언어는 대부분 실용성이 검증되고, 도메인을 선점한 언어입니다. 실용성이 인정된 언어에 대해서 밥 벌이의 가능성을 묻는 초심 개발자들이 있습니다. 그렇다면 특정 도멘인을 선점하지 않은 새로운 언어를 배울 필요가 있을까요?
일단 지적인 호기심 차원에서 새로운 것을 배울 필요가 있습니다. 반대로 취미의 영역을 떠나서 직업적인 측면에서 본다면 새로운 언어를 배우는 것은 많은 리스크를 가지고 있습니다. 개발자는 결국 자신의 시간을 돈으로 바꾸어 먹고 사는 직업입니다. 따라서 개발자가 지니고 있는 가장 큰 자산은 바로 시간입니다. 이 귀중한 자원을 투입해야 하는 배움이라는 행위는 일종의 리스크를 동반한 투자인 셈이죠.
그런데 자신이 머무르고 있는 도메인을 벗어나서 새로운 언어를 배운다는 것은 승용차를 만들던 자동차 회사에서 트럭을 만드는 것과 비슷합니다. 즉, 새로운 승용차를 만드는 것보다 트럭을 만드는 것이 한번도 해 보지 못한 작업이기 때문에 위험요소가 크죠.
프로그래밍 언어를 배우는 것은 일종의 투자라고 했습니다. 그렇다면 투자의 책임은 결국 개인에게 귀속됩니다. 그러나 우리가 귀중한 자원을 투입해서 투자하는 이유는 무엇일까요? 바로 새로운 시장에서 다른 사람보다 더 나은 위치를 선점하기 위해서입니다. 그렇기 때문에 투자는 위험이자 기회인 셈이죠.
요즘에는 Ruby라는 언어에 대해서 살펴 보고 있습니다. 상당히 간편한 script 언어입니다. c++과 java를 클래식이라고 한다면 Ruby는 피아노 연주의 뉴에이지와 같습니다. 프로그래밍 언어을 느낌으로 평가할 수는 없겠지만, c++, java에 느낄 수 없는 그런 단순함을 Ruby에서 찾아 볼 수 있습니다.
느낌말고 Ruby라는 언어를 평가할 수 있는 적절한 단어로 무엇이 있을까요? 여러가지가 떠오르지만 저는 한단어만 고르라면 “생산성”이라 말하고 싶습니다. java가 c++보다 더 생산적이라는 것을 부인할 분은 없을 것입니다. 그럼 java가 c++보다 더 생산적인 이유는 무엇일까요? 바로 자바에서는 pointer가 없기 때문입니다. pointer가 있어 프로그래머에게 많은 자유가 부여되지만, 반대로 포인터 사용에 대한 많은 책임이 프로그래머에게 전가됩니다. .net에서 managed 코드로 pointer를 할당, 해제 하는 작업을 고민하지 않는 것만으로도 c++의 생산성이 향상되는 것을 경험해 보신 분은 이 뜻을 이해하실겁니다.
마찬가지로 Ruby가 java보다 더 생산적인 이유는 객체를 다루는 방법이 훨씬 더 직관적이기 때문입니다. 다음은 일반적인 Ruby 코드입니다.
“dave”.length
line_item_one.quantity
-1942.abs
cart.add_line_item(next_purchase)
프로그램 언어를 하나라도 알고 있는 분이라면 Ruby를 몰라도 위의 코드가 무엇을 의미하는지 알 수 있겠죠? 매우 사소한 것이지만 c++, java에서는 하나의 명령이 끝나는 것을 세미콜론으로 컴파일러에 알려 줍니다. 그러나 Ruby는 단순히 엔터키 입력으로 대신하죠. 물론 별게 아닐 수 있지만 코드를 작성하는 입장에서 본다면 세미콜론은 컴파일러에게 명령문이 끝나는 것을 명시적으로 알려 주기 위해서입니다. 그러나 코드를 작성하는 입장에서 본다면 세미콜론은 사족일 뿐입니다.
그냥 생각 나는대로 써보면 거의 유사하게 실행이 되는, 이런 직관성이 Ruby의 가장 큰 장점입니다. 물론 관점에 따라서는 이런 직관성은 모호함을 나타내기 때문에 좋아하지 않을 수 있습니다. 그러나 저는 직관성은 결국에는 생산성과 연결되기 때문에 새로운 프로그래밍 언어의 성공여부는 바로 직관성에 달려 있다고 생각합니다.
생산성이란 무엇일까요? 예를 들어 2명의 프로그래머가 작성할 프로그램을 한 사람의 프로그래머가 작성한다면 생산성은 2배 향상되었다고 합니다.(물론 같은 능력의 프로그래머라는 전제에서요.) Ruby는 이런 생산성을 제공해 줍니다. 이런 이야기는 인력을 줄일 수 있다는 이야기로 들릴 여지가 있지만, 프로그래머 입장에서 본다면 같은 코드를 더 빨리 작성하고 더 나은 일에 몰두할 수 있는 장점이 있습니다.
Web 2.0의 가장 큰 핵심은 agile입니다. 이런 기민함의 필요성은 특히 business에 핵심입니다. 만일 Ruby가 성공을 한다면 Web 2.0 분야의 agile development에 있다고 생각합니다. 이렇게 말할 수 있는 이유는 Ruby에게는 Rails라는 Web framework이 있기 때문입니다.
10분만에 블로그를 만들어 내는 Rails 데모를 보신 분이나 직접 O’Rielly의 tutorial를 따라 해 보신 분은 Rails의 생산성에 대해서 알 것입니다.
Rolling with Ruby on Rails 1/5
Rails를 이용해서 웹 응용 프로그램을 만든다면 Rails에 lock-in될 위험성이 있습니다. 그런데 곰곰히 생각해 보면 이런 Framework에 대한 lock-in은 별 문제가 아니라는 것입니다. Mac, Window와 같은 운영 체제에서 돌아가는 프로그램이라면 vendor lock-in이 큰 문제였습니다. 그러나 이제는 Web 2.0 시대입니다. Web 2.0 사용자는 브라우저를 이용해 우리가 만든 응용프로그램에 접속합니다. 따라서 우리가 Rails를 이용해서 프로그램을 만든다고 해도 vendor lock-in에 대한 문제에 대해서 고민할 필요는 없습니다. (framwork을 java의 spring으로 바꾼다면 다른 문제겠지만요.)
그러나 앞서 말한 장점에도 불구하고 Ruby와 Rails 학습을 위해 별도의 시간을 낸다는 것을 쉽지 않습니다. 가장 큰 이유는 아직 시장이 형성되지 않았다입니다. 그리고 주류 언어로 진입하기 위한 안정성이 검증되지 않았다는 점입니다. 이 이야기는 시장이 형성되지 않았다는 말과 동치입니다. 이 문제는 앞서 이야기 했듯이 투자를 하는 투자자의 몫이라고 생각합니다. Web 2.0 시대에 Rails의 생산성이 필요 요소고 대세가 될 것이라는 판단이 든다면 과감히 Rails와 Ruby에 투자할 필요가 있다고 봅니다.
우리나라에서 Rails를 서비스 전체에 적용한 사이트가 있어서 소개 드립니다. 아시는 분은 아실만한 http://www.olaworks.com/ 입니다. 아직 서비스 준비 단계라서 가능성에 대해서 논할 수는 없지만, 관계자 분의 말에 의하면 생산성 측면에서 많은 도움을 받으셨다고 합니다. 물론 미국에서는 http://www.basecamphq.com/, http://www.43things.com/, http://www.rapidreporting.com/ 의 사이트에 적용되어서 그 성능을 검증 받은 사례가 있습니다.
이 글은 Ruby와 Rails에 관한 Beta 추천평입니다. Beta 추천평인 이유는 저도 그 가능성만을 염두해 두고 시간을 투자하는 입장이기 때문입니다. 비록 새로운 시장이 열리지 않아 새로운 기회를 잡을 수 없다고 해도, Ruby를 배운다는 것은 매우 실용적인 일임을 말하고 싶네요. 실용성이라는 것은 주어진 업무를 처리하기 위해서 기술 지향적이 아니라 얼마나 업무에 효율적인가를 보는 것입니다. 이런 실용성을 견지하는데 Ruby를 배우는 것이 큰 도움이 될 수 있습니다.
March 16th, 2006 at 2:17 pm
이런 새로운 언어를 배우는 이유 중에
하나가 문제를 다른 관점으로 볼 수 있는
사고방식의 변화도 하나라고 봅니다.
March 16th, 2006 at 3:03 pm
백일몽님//
사고의 전환이라는 측면도 있네요.
좋은 코멘트 감사합니다.
March 16th, 2006 at 3:08 pm
그래서 기민한 언어라고 불리는가 보군요. 새로운 언어를 배운다는 것 자체는 자신을 위한 투자차원에서 가장 좋은 방법인 것 같다는데 동의합니다. 아마 실용주의 프로그래머 라는 책에서도 비슷한 말이 있었던 것으로 기억이 나네요. 시작하려면 금방 배울 수 있을 것 같다는 생각이 들면서도 이런저런 이유로 익히지 못하고 있지만, 시간과 여유가 생기는대로 꼭 익혀보고 싶습니다. 루비에 관한 좋은글 정말 잘읽었습니다.
March 16th, 2006 at 7:45 pm
kebie님//
제 글이 도움이 되셨다니 기쁘군요.
루비를 공부하면서 느끼는 것은
참 단순하지만, 많은 것이 녹아 있다는 생각입니다.
기회가 되시면 꼭 한번 접해 보시길
권해 드릴께요.
June 6th, 2006 at 12:16 pm
Ruby에 관한 정보를 찾다가 이 포스트를 보게되었습니다. 덕분에 루비에 관해 상당히 많은 내용을 알게 되었습니다. 아직 학생이니 빨리 시간내서 루비를 접해봐야 겠다는 생각이 듭니다.
June 6th, 2006 at 7:28 pm
LInE님//
특히 Rails를 같이 보시면, 루비의 강력함을 느끼실 수 있을겁니다.
October 23rd, 2006 at 1:24 pm
과연 루비를 배워야 할까?
새로운 서비스를 구상중인데 딱히 마땅한 구현방법이 떠오르지가 않습니다. 기존의 php로 하기에는 뭐랄까 뽀대도 안나고, PHP라는게 그다지 생산성이 좋다고는 말못하겠습니다. 단지 익숙할…
October 23rd, 2006 at 10:42 pm
소내기 블로그님
조금 있으면 루비와 레일즈 관련 국내 서적이 몇 권
출판될 예정이랍니다. 공부에 좀 도움이 되실 듯
합니다.