brunch

You can make anything
by writing

C.S.Lewis

by 마르코 Feb 20. 2016

내게 딱 맞는 첫 프로그래밍 언어 찾기

여기서 골라봐

아래는 <Imagine + Engineer> 시리즈 목차이자 첫 글




정보의 바다를 헤매다 재미있는 글을 하나 찾았다. 처음에는 2012년에 쓰였다가, 2016년 2월에 수정되었다고 하니 어느 정도는 감안해서 봐야겠다.



재미있는 점은 '깃허브'에 '커밋'된 메시지를 기반으로 프로그래밍 언어와 프로그래머의 기분의 상관관계를 풀어내려고 시도했다는 것이다. 역시 프로그래머들은 호기심 대마왕이다. '깃허브(github)'와 '커밋(commit)'이 무엇인지 간단하게 이야기하고 가야 할 것 같은데, 프로그래머는 혼자서 한 프로젝트를 진행하는 경우도 있지만 보통은 프로젝트 규모가 커질수록 여러 명이 함께 협업하게 된다. 그런데 만약에 여러 명의 프로그래머가 자신의 코드를 USB에 담아서 다른 사람의 컴퓨터에 가져가서 복사 붙여 넣기를 한다면? 개발자는 자기가 어느 줄의 코드를 고쳤는지 하나하나 모두 기억해야 하는 끔찍한 일이 생긴다. 실제로 처음으로 3~4명 팀 프로젝트를 진행했을 때, USB로 코드를 모아가며 코딩을 한 적이 있는데 각자 2시간씩 코딩하고 모여서 코드를 합칠 때 그것보다 더 많은 시간이 들어가는 엄청난 경험을 하곤 했다.


개발자는 모두 효율성에 매우 집착하는 사람들이기 때문이 이런 행동을 극도로 혐오한다. 그래서 오픈소스로 깃(git)이라는 프로젝트를 만들었다. 온라인 기반으로 명령어 한 두 줄만 입력하면 아무리 많은 수의 개발자라도 한 번에 코드를 공유할 수 있는 신세계가 도래했다. 그리고 이런 깃이라는 오픈소스를 이용해서 유료 서비스를 만든 것이 깃허브(github)이다. 사실상 한강물을 팔던 봉이 김선달 같은 회사다. 그런데 깃허브는 비밀로 숨겨놓은 프로젝트(private)에만 과금하고, 누구나 볼 수 있게 열어놓은 프로젝트(public)는 공짜로 사용할 수 있게 만들었다. 이런 구조를 통해서 많은 오픈소스 프로젝트들이 깃허브로 몰리게 되었다. '오픈소스'가 무엇인지 잘 모른다면, 누구나 코드를 볼 수 있는 공짜 코드라고 생각하면 된다. 개발자는 깃(git)이라는 프로그램을 통해서 자신이 수정한 코드를 커밋(commit)하는데 "내가 이거 고쳤어."라고 알려주는 행위이고, 구체적으로 무엇을 고쳤는지 동료 개발자에게 메시지를 남겨놓는데, 이 메시지를 위에서 공유한 저 글에서 분석했다는 것이다.


분석한 내용을 조금 들여다보면, 자바스크립트(Javascript)로 작성된 커밋 메시지가 가장 많고,  그다음이 자바(Java), 루비(Ruby), 파이썬(Python) 순서라는 것이다. 다행히 앞의 4개의 언어가 글에서 다룰 언어들이라 다행이다. 그리고 상대적으로 파이썬 프로그래머들은 커밋 메시지에 감정을 나타내는 경우가 드물다는 것과 루비가 즐거움의 표현(The expression of amusement)이 가장 많다는 사실이 재미있었다. 루비의 창시자인 '마츠모토 유키히로'가 루비를 만든 이유가 "프로그래밍을 재미있게 할 수 있도록 하기 위해서"라고 말했는데, 그의 목표가 어느 정도 이뤄졌다고 할 수 있겠다. 아래 글에서는 프로그래밍을 배우고 싶어 하는 사람이 각자의 목표에 따라 어떤 언어를 선택하면 좋을지  이야기해보려고 한다. 어느 한 언어가 최고라고 말하기는 힘들고, 여러 가지 프로그래밍 언어를 알아야 하는 시대이기 때문에 프로그래밍 입문자가 첫 프로그래밍 언어를  선택하는 데 사용하면 좋겠다.



자바(Java)


자바는 한국에서 뿐만 아니라 전 세계에서 가장 많이 사용되는 언어 중 하나이다. 실제로 한국은 자바 공화국이라고 해도 과언이 아닌데, 아래에 공유한 자료처럼 정부에서 전자정부 표준프레임워크라는 이름으로 공공기관에서 사용하는 웹페이지에 자바를 이용한 스프링(Spring)이라는 웹 프레임워크(Web framework)를 통해서 개발하도록 강제하고 있기 때문이다. 정부에서 발주하는 프로젝트의 금액이 크다 보니, 많은 SI업체들은 결국 자바 스프링 개발자를 계속해서 육성할  수밖에 없다. 이것이 자바/스프링 개발자 들까 한국에 많은 이유다.  



'프레임워크'라는 개념을 잠깐 짚고 넘어가자. 나 역시도 처음 프로그래밍 언어를 배울 때 언어만 하나 배우면 프로그램을 뚝딱뚝딱 만들 수 있을 줄 알았다. 그런데 C 프로그래밍 책을 한 권 다 봤을 때도, 자바를 두 달 공부했을 때도 그것 만으로는  아무것도 만들 수 없다는 걸 깨달았다. 우리가 일상생활에서 만나는 프로그램을 만들려면 프로그래밍 언어에 추가적으로 '프레임워크'를 더 공부해야 한다. 외국어로 치면, 프로그래밍 언어는 문법책이고 '프레임워크'는 문장(회화/작문)이라고 할 수 있다. 많은 프로그래머들이 쉽게 제품을 만들기 위해서 '프레임워크'를 만들어 두었고, 그것을 이용해서 보다 빠르고 쉽게 제품을 만들 수 있는 것이다.


만약에 한국에서 프런트엔드 개발자로서가 아니라 대기업, 혹은 SI 업체에서 일하기를 원한다면, 반드시 자바를 공부하라고 권하고 싶다. 그리고 안드로이드(Android)라는 모바일 애플리케이션 '프레임워크' 역시도 자바를 통해서 개발하고 있다. 게임 개발에 대해서는 자세히 모르지만, C, C++과 더불어 자바도 게임 개발에서 많이 활용된다고 한다.



자바스크립트(Javascript)


자바스크립트는 자바와는 전혀 다른 프로그래밍 언어이다. 이름이 비슷해서 막 프로그래밍에 입문한 사람에게 많은 혼란을 자아내는데, 이름만 비슷하다. 만약에 나에게 평생 하나의 프로그래밍 언어만 해야 된다고 말한다면 나는 자바스크립트를 선택하겠다.


웹페이지는 사실 문서다. 이게 무슨 소리냐고 고개를 갸우뚱하기 쉽지만, 아래의 웹페이지 예시를 잠깐 보고 가자.


<h4>먹고 싶은 과일</h4>
<ul>
    <li>사과</li>
    <li>수박</li>
    <li>귤</li>
</ul>
먹고 싶은 과일
- 사과
- 수박
- 귤


사실 위의 두 가지는 동일하다. 다만 차이는 아래가 우리가 워드프로세서를 통해서 일반적으로 작성하는 형태라면, 위의 예시는 우리가 사용하는 IE, Chrome, Safari 등의 브라우저가 읽을 수 있는 형태라는 것이다. 전통적으로 자바스크립트는 이러한 위의 예시처럼 인터넷 문서를 웹브라우저에서 보다 효과적으로 표현하는 데만 사용되었다.


그런데 구글에서 V8이라는 자바스크립트 엔진을 만들어주시면서, 신세계가 열렸다. 이제 자바스크립트로 서버도 개발할 수 있게 되었기 때문이다. 이런 기술적 진보를 바탕으로 나온 것이 바로 노드(Nodejs)다. 물론 노드가 모든 기술적 문제에 최고의 해답이 될 수는 없지만, 훌륭한 대안 중 한 가지임에는 분명하다. 그리고 아이폰과 안드로이드 앱까지도 자바스크립트로 다 만들어 버리겠다는 시도가 세계 곳곳에서 이어지고 있기 때문에, 정말로 자바스크립트만 하면 모든 것을 다 만들 수 있는 세상이 올지도 모르겠다.



파이썬(Python)


파이썬이 최근에 널리 사용되면서 굉장히 최근에 만들어진 언어라고 생각하는 사람들이 많다. 그런데 파이썬은 1991년에 '귀도 반 로섬'이라는 사람에 의해서 만들어졌으니, 꽤 역사가 깊다. 파이썬이 활용되는 부분은 크게 3가지 정도로 생각이 되는데, 서버(백엔드) 언어로서, 자동화 스크립트로, 마지막으로는 통계나 데이터 분야의 언어로이다.


서버 언어로의 장고는 장고(Django)나 플라스크(Flask) 등의 자바의 스프링 같은 웹 프레임워크와 함께 사용된다. 장고는 '마감이 있는 완벽주의 개발자의 웹 프레임워크(The Web framework for perfectionists with deadlines)'라는 모토를 가지고 있는데, 그에 걸맞게 웹 개발에 필요한 거의 모든 것을 갖고 있고 굉장히 높은 효율성이 높아서 스타트업에서 인기가 많다.


자동화의 도구로서 파이썬은 반복 작업이 많은 개발자가 그 작업 중에 실수를 하지 않도록 도와준다. 웹페이지 상의 데이터를 긁어오고, 파일을 생성/삭제/수정하고, 이메일을 보내고, 엑셀 파일을 다루는 등 다양한 라이브러리는 풍부한 파이썬 사용자 층의 기여를 엿보게 만든다.


마지막으로 상대적으로 다른 언어에 비해 간결한 문법은 학문적으로도 더 많이 사용하게끔 유도한다. 실제로 통계 및 분석과 관련해서 수많은 파이썬 라이브러리가 있다. 빅데이터를 다루고 싶은 사람이라면 R, 하둡(Hadoop), 스파크(Spark) 같은 것들을 공부해야 할 텐데, 그 전에 파이썬에 익숙해지는 것은 큰 도움이 되리라고 생각한다.



루비(Ruby)


루비는 개인적으로 미니 프로젝트를 하나 정도 진행해본 것이 다여서 루비의 참 맛을 제대로 이해하고 있다고 말하기는 힘들다. 다만 루비로 쓰인 웹 프레임워크인 루비 온 레일즈(Ruby on rails)는 명쾌하고 직관적으로 웹서비스를  개발할 수 있게 구성되어 있었다. 루비로 개발을 하는 사람들을 '루비스트(Rubyist)'라고 부르는데, 루비스트에 따르면 루비 온 레일즈의 맛을 보면 웹서비스 개발 만큼은 다른 프레임워크를 사용하기 힘들다고 할 정도로 잘 짜인 웹 프레임워크를 갖고 있다.


프로그래밍 언어 루비를 사용해본 내 개인적인 감상으로는 코드가 정말 아름답게 작성이 된다는 것이다. 코드의 라인 숫자를 줄이는 것이 항상 능사는 아니지만, 간결한 문법을 자랑하는 파이썬으로도 3~4줄에 작성할 코드를 1줄에 그것도 너무 명료하게 작성할 수 있는 루비를 보면 그저 감탄이 나온다. 루비 역시 스크립트 언어이기 때문에 파이썬처럼 자동화 툴로도 훌륭하게 활용될 수 있다.



오브젝티브 씨(Objective-C)


애플에 개발자로 입사하고 싶다면? 다른 말이 필요 없다. 아이폰 개발자로 대기업에 입사하고 싶다면? 역시 오브젝티브 씨다. C와 C++ 시대의 유산으로 굉장히 오랜 역사를 갖고 있다. 그리고 오랫동안 널리 사용된 앱이라면 오브젝티브 씨를 사용하고 있을 가능성이 많다. 그리고 인터넷에서 만날 수 있는 많은 아이폰 애플리케이션 개발 자료를 읽으려고 해도 언어 자체를 이해하는 것은 도움이 된다.


그런데 정말 언어 자체의 문법이 오묘하다. 그 어디에서도 마주할 수 없는 특별함이 있는데, 처음 이 언어를 접했을 때 거부감이 된다. 대안으로는 다음에서 이어지는 스위프트가 있다.



스위프트(Swift)


요즘 핫한 언어인 스위프트는 애플에서 현대적인 언어를 만들겠다며 뚝딱 만들어냈다. 내가 처음 아이폰 애플리케이션을 개발을 시작했을 때가 스위프트가 막 등장했을 때였고, 나는 그 이후 스위프트로 주로 개발을 했기 때문에 스위프트가 더 편하다. 혹자는 아직 애플에서 주요 맥용 애플리케이션을 오브젝티브 씨로만 만들고 있기 때문에, 스위프트를 사용하는 것은 시기상조라고  이야기한다. 나 역시도 개발을 하다가, 스위프트가  업데이트되면서 수백, 수천 줄에서 빨간 에러 코드를 만나는 즐거운 경험을 하기도 했다. 하지만 애플은 스위프트가 오브젝티브 씨와 완벽하게 호환되기를 원했고, 그 결과 오브젝티브 씨 코드 기반에 스위프트 코드를 추가해도 아무런 문제가 없이 돌아간다.


하지만 나는 이제 아이폰 애플리케이션 개발을 공부하는 사람이라면 스위프트를 공부하라고 말하고 싶다. 최근 스위프트 2.0이 오픈소스로 공개되면서 더 많은 개발자의 관심 끌고 있다. 심지어 스위프트를 통한 서버 개발 오픈소스까지 등장하고 있다. 그리고 스위프트 3.0이 현재 개발 중에 있는데, 하위 버전에 대한 호환성을 무시하면서 빠르게 프로그래밍 언어를 개선하고 있는 모습은 긍정적으로 보인다. 무엇보다 언어 자체가 매우 직관적이고 깔끔하다. 그리고 나온지 얼마  안 된 언어다 보니, 조금만 깊이 파면 스위프트 전문가라고 말할 수도 있겠다.



참고: 최근에 나온 언어들은 느리다?



맞다. 느리다. 위의 자료를 보면 C 언어에 비해 파이썬은  100배가량, 그리고 루비의 경우 그것보다 조금 더 느리다는 것을  확인할 수 있다. 물론 프로그래밍 언어의 경우 지속적으로 최적화를 통한 개선이 이루어지고 있기 때문에 향후에 더 속도가 개선될 여지는 있지만, 100배의 속도는 큰 차이임에  틀림없다.


그런데 자바(Java)가 처음 등장했을 당시에 애물단지 취급을 받았다는 사실을 아는가? 왜냐고? 성능이 너무 느렸기 때문이다. C언어에 비해서, 자바는 너무 느렸다. 그런데 하드웨어 성능이 개선되기 시작하면서, 자바를 쓸 수 있게 되었고 강력한 객체지향의 특성과 모든 운영체제에 호환되는 자바의 철학은 널리 퍼져서 어느새 자바의 세상이 되었다. 나는 상대적으로 느린 파이썬이나 루비도 비슷한 길을 걸을 것이라고 생각한다. 파이썬은 느리다. 그런데 생산성은 느리지 않다.


아래와 같은 1에서 10까지 숫자 중에서 짝수를 구하는 코드가 있다고 생각해보자.

List evenList = new ArrayList()

for (int a = 1; a <= 10; a++) {
    if (a % 2 == 0) {
        evenList.append(a)
    }
}
물론 for loop 자체에서 증가 값을 2로 주는 방법도 있겠지만, 아래 다른 예시와 통일성을 위해서 조건 검사를 추가로 수행하였다.


파이썬에서는 아래와 같이 표현할 수 있다.

even_list = [a for a in range(1, 11) if a % 2 == 0]


참고로 순수한 함수형 언어라고 불리는 하스켈의 표기는 다음과 같다.

filter even [1...10]   


자바처럼 저렇게 코드가 길어지는 특징을 영어로는 verbose 하다고  표현하는데, 인간의 언어에 가깝다고 불리는 루비나 파이썬 같은 고급 언어를 접하고 나면 신세계로 느껴질 때가 있고 이것은 생산성으로 이어진다.


한 달에 10만 명이 사용하는 서비스가 있다고 하자. 어디에 어떤 방식으로 서버를 사용하느냐에 따라 천차만별이겠지만, 대표적인 클라우드 컴퓨팅 서비스인 AWS에 서버 인스턴스 3대, 프록시 서버, 데이터베이스에 안정성을 위해서 추가적으로 데이터베이스 레플리카를 이용한다고 생각해보자. 각각의 인스턴스 사이즈 등에 따라서 적게는 한 달에 적게는 50만 원에서 많게는 200만 원 정도 나올 수 있겠다. 만약에 파이썬과 장고(Django)를 이용해서 혼자서 1달 간 작업할 내용을 자바와 스프링(Spring)으로 작업했을 때 2~3달이 걸린다면? 그래서 자바 개발자가 2~3명이 필요하다면? 인건비를 한 달에 350만 원이라고 단순  계산해봤을 때, 빠른 생산성으로 작업했을 때 훨씬 비용이 줄어드는 것을 알 수 있다.


이제 이 비용 곡선이 바뀌기 시작하는 때는 바로 사용자가 늘어나기 시작하는 시점이고, 성능이 좋은 언어는 더 많은 사용자가 사용하는 서비스를 만들 때 비용을 극적으로 줄여준다. 월 사용자가 1억 명쯤 되면 서비스의 속도나 시스템 자원을 얼마나 점유하는지가 중요한 관권이 된다.



위의 글에서 인스타그램 창업자의 동영상을 공유한 적이 있는데, 인스타그램도 루비 온 레일즈로 서비스를 시작하였기로 유명하다. 나는 100만 명 정도의 월 사용자는 파이썬이나 루비 등의 고급 언어로 작성해도 충분하다고 생각하는데, 스타트업에서 일해 본 사람이라면 월 사용자 100만 명이 얼마나 쉽지 않은 일인지 알 수 있을 거다. 요약하자면, 자기 서비스를 만들어보고 싶은 사람이라면 가장 쉽고 빠르게 만들 수 있는 방법을 선택하라는 것이다. 서비스가 너무 잘 되면  투자받아서, 잘 하시는 개발자분들 모셔오면 된다.





개발자가 되고 싶으신가요? 좋은 개발자에 대해서 항상 고민합니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari