YDN 블로그 오픈 이벤트도 있고 하니, 블로그에 포스트 수라도 늘릴 겸, 내가 사용한 프로그래밍 언어들에 대해서 이야기하고자 한다. 심각하지 않게~
대략 87년쯤? 애플이라고 구라 치는 컴퓨터가 집에 들어왔다. 맞다. 교육용 컴퓨터라고 붐이 일어났던 그때다. 여기저기 컴퓨터학원이 생기고, 컴퓨터라는 물건은 공부하기 위해선 꼭 필요한 그런 거였다. 물론, 그런 게 아니라는 사실이 밝혀지는 데는 아주 짧은 시간만이 필요했다. 어쨌든, 그렇게 해서 내가 처음 접한 프로그래밍 언어는 BASIC이었다. 뭐, 사실은 그게 뭔지도 몰랐다. 그냥 컴퓨터를 사면서 딸려온 책에 나온 내용을 그대로 치면 화면에 몇 가지 간단한 도형이 그려지는 그런 프로그램이었다. 몇 년이 지나서는 BASIC으로 간단한 텍스트 게임을 만드는 수준이 되었다. 상황에 따라 몇 가지 선택이 주어지고 이야기가 진행되는 그런, – -; 그 다음은? 컴퓨터는 교육용이 아니라는 사실이 밝혀졌으므로 사용시간에 제한이 가해졌고, 중간에 잠깐 Borland C++을 접할 기회가 있었지만, 도무지 알 수가 없어서 포기. 그리고 대학에 갔다.
요즘은 Java를 먼저 배우는 게 일반적인 것 같던데, 내가 대학교에 입학했을 때는 C가 그 자리에 있었다. 내가 할 수 있었던 건 별로 없었다. 결정적으로 대학은 시간을 너무 많이 줬고, 그래서 감사히 놀았다. 그나마 다행인건 C++에 관심을 가지고 찝접댔다는 건데, 덕분에 1학년 겨울방학에는 Borland C++ Builder를 사용해서 뭔가 제대로 동작하는 프로그램을 만들 수 있었고, 당시 천리안에서만 5000회 이상의 다운로드를 기록했다. 이때부터 조금씩 프로그래밍 공부에 불이 붙기 시작했던 것 같다.
이후에 Borland Delphi를 잠깐 했지만, C++에 이미 익숙해진 터라 Object Pascal의 낯섦으로 인해 군대 가기 전까지의 숙제는 모두 Borland C++ Build로 처리했다. 일단, GUI가 들어가면 먹어줬다.
군입대 전까지 잡아둔 두 가지 목표가 있었는데, 하나는 Borland C++ Build로 세금계산서를 프린트하는 프로그램을 만드는 것과 Assembly로 바이러스를 만드는 거였다. 세금계산서는 실패했다. 내 수준으로는 쉽지 않았다. 그럼 바이러스는 성공했나? 굳이 말하자면 그렇다. 집에 있는 책과 자료란 자료는 다 뒤져서 만든 한 페이지짜리 Assembly코드는 간단히 자신의 디렉터리의 다른 COM파일을 간염 시킨다. 끝. 그래서 굳이 말한 거다.
웃기지만, 군대에서 프로그래밍을 공부하는 제대로 된 방법을 터득했다. 난 극적으로 Borland C++ Builder에서 Visual C++로 전향했다. 이미 Borland는 지는 해였다. 놀랍게도 MSND을 누군가가 우편으로 보내줬다. 고맙다고 전화했더니, 살다 보면 이런 행운도 있는 거란다. 그렇게 MSDN을 보는 방법을 알았고, 물어볼 사람이 따로 없기에 될 때까지 반복해야 했다. 그런 노력으로 빌 형의 품에 안겼다.
내가 웹을 처음 접한 게 정확히 95년이다. 모자익으로 겨우 접속한 배트맨 사이트의 그림은 엄청나게 감동적이었는데, 당시 나에게 도메인이라는 개념이 있었다면, 지금쯤 떵떵거리며 살 수 있었을 지도 모른다. 내 첫 번째 웹 스크립트는 PHP가 당첨됐다. C와 문법이 비슷하다는 게 이유였다. 근데, 이건 웹에 대한 개념을 이해하는 것이 더 힘들다. 결국 간단한 방명록 정도까지가 한계였다.
제대후의 주 무기는 Visual C++이었다. 아 물론 여전히 Borland C++ Build도 사용했고. 나중에 C#이 추가됐다. C#은 전천후처럼 생각하는 건 다 .Net Framework에 들어가있었다. 그리고, 지금에 와서는 그게 너무 많아서 감당이 힘들 지경이다. 현재도 C#은 유용하게 사용되고 있으며, 대부분의 툴 작업에는 C#을 쓰려고 한다. 왜? 빨리 만들 수 있으니깐~
아, 이제서야 말하지만 난 게임 서버 프로그래머다. 대학 때 졸업한 선배에게 우연히 게임 프로그래밍을 배우기 시작한 것이 계기가 되어서 여기까지 왔다. 아마 나의 사회생활 경험을 이해하기 위해서는 이런 배경이 약간 필요할 것 같아서 말해둔다.
첫 번째 직장에서는 Visual C++도 아닌 리눅스에서 g++, gdb, vi로 작업했다. 결론부터 말해서, 이거 매우 큰 도움이 됐다. g++이야 그렇다 치고, gdb라는 건 꽤 특이한 경험이었다. 그래서 난 요즘도 리눅스를 쓸 때 굳이 X-Window를 깔지 않는다.
이때쯤부터 Ruby가 우리나라에서 인가를 얻기 시작했다. 자고로 프로그래머는 잘 쓰는 스크립트언어 하나는 있어야 한다는 생각에 Ruby를 배웠다. 이때부터 단순 반복작업이나 루비로 할 수 있는 건 죄다 루비로 했다. 게임 클베의 DB내용을 가공할 일이 있었는데, 내가 SQL에 능통하지 않은 관계로 루비로 작업을 했다. 퇴사 후에 회사에서 전화가 와서 그때 그 통계를 어떻게 뽑았는지 물었다. 아마 그건 SQL로 작업하기 힘들거나 불가능 했던 것 같다.
더불어 RoR(Ruby On Rails)에도 손을 대기 시작했는데, 이 관심은 이내 사그라지다가 최근에서야 다시 타올랐다. 그리고 다시 사그라지는 중이다. – -;
세상은 멀티코어의 시대가 되었고, 함수형 프로그래밍언어가 새롭게 각광을 받기 시작하면서 이런 시류에 휩쓸려 Erlang에 손을 댄다. 절차 형 언어와는 전혀 다른 개념에 도무지 이해가 쉽지 않다. CouchDB같은 게 나오는걸 보면 분명히 확산추세인 것 같긴 한데, 다음 책을 기다리는 중이다.
‘실용주의 프로그래머’에서 매년 하나의 언어를 배울 것을 권장하는 바람에 못이기는 척 따라고 있는 중이다. 대학교 때 코볼수업 – 나 때는 이런 것도 있었다! – 을 담당하시던 교수님이 ‘가능한 많은 언어를 접해보는 것이 좋다’라고 했던 말이 기억난다. 마스터할 필요는 없다. 새로운 언어는 새로운 사고방식을 키워준다. 내 경험이 그렇게 말해주고 있다. C/C++만이 전부였을 때는 포인터와 템플릿이 당연했다. 당연히 컴파일 해야 했고 약간의 속도와 메모리에도 신경이 쓰였다. 스크립트언어로는 왠지 그런데 좀 덜 신경 쓰고 코딩을 해도 괜찮을 것 같다. 게다가 많은 스크립트 언어들이 OOP를 느슨하게 적용한다. C++에서는 당연히 안 되는 것도 Ruby나 Python에선 가능했다. C/C++도 Java도 또 다른 언어도 어느 정도 비슷한 면이 있었기에 배우는데 걸리는 시간이 길지는 않았다. 그렇지만 Erlang는 완전히 다른 세상이었다. 학교에서 배우고 별로 생각해보지 않았던 ‘재귀’라는 개념에 대해서 다시 생각해봐야 했고, 재할당이 불가능하다는 황당한 원칙도 있었다. PHP나 RoR을 들여다 보면, 웹이라는 분야가 얼마나 방대한지 알게 된다. 나 같은 사람이나 다루는 줄 알았던 C/S개념은 웹에서는 너무 당연하게 사용하고 있다. 게다가 훨씬 더 복잡하다.
앞으로도 계속 새로운 언어에 도전해볼 생각이다. 이것은 마치 새로운 외국어를 배우는 느낌인데, 차이점이라면 프로그래밍 언어가 훨씬 더 쉽고 더 빨리 배울 수 있다는 것이다. 그리고 확실하게 자리잡은 생각이 있다. 프로그래밍 언어에 좋고 나쁨은 없다. 할 수 있는 언어로 빨리 일을 하기만 하면 그만이다. 바로 이것.
C/C++ 주 언어
Ruby GUI가 필요 없는 작업 및 각종 단순작업
PHP 첫사랑 웹 스크립트
Java 왠지 별로 정이 가지 않음
C# 모든 툴은 C#으로!
Python Ruby를 대체하기엔 특별히 잘난 게 없어 보임
Erlang 첫 번째 함수형 언어