JMK no matter what

Moving On From C++

다들 아는 얘기 반복 주의

C++ 을 지난 7년 동안 주력 (?) 언어로 써오고 있는데, 이제 바꿀 때가 되지 않았나 하는 생각이 요즘 새록새록 들고 있다. 어릴 때는 파스칼을 한참 썼었는데, 대학교에서 ICPC 하면서 다른 팀원들이 다 C 쓰니까 C 로 넘어왔고, C++ 는 C 나 파스칼보다 훨씬 자유로운데다 (무려... 변수 선언을 아무데나 할 수 있다. -_-;) STL 도 쓸 수 있어서 그 이후로 쭉 써오고 있다. 이노티브, nhn 에서도 모두 C++ 로 일했었고, 작년 인턴 때도 C++ 했으니 파트타임 잡 몇 개 빼면 나의 professional career 의 전부라고 할 수 있을성 싶다. -_-; 이 말의 요는.. '쓸만큼 썼다' 되시겠다.

C++ 의 최대 장점이자 문제는 로우레벨이라는 것이다. 로우레벨이기 때문에 퍼포먼스 모델이 단순하고, 그에 따라 시스템의 퍼포먼스를 최대한으로 끌어낼 수 있다. 그렇지만 로우레벨이기 때문에, 삶이 편해지기 위한 모든 요소들을 구현하기가 너무 힘들다는 문제도 있다.

지난 이틀 동안, 회사에서 지난 한 달 동안 작성한 C++ 코드를 파이썬으로 옮겼다. 1천 5백여 라인에서 400여라인으로 소스코드가 줄어들었다. 뭐 라인수가 중요한 것은 아니니 그렇다 치자. 놀라운 것은 실제 내가 느끼는 프로그램의 동작 속도는 더욱 빨라졌다는 것이다. 내 프로그램의 실행 시간 중에는 입력 파일 파싱하는 시간의 비중이 굉장히 컸다. 파싱한 자료 구조를 하드 디스크에 덤프해 두고, 덤프해 둔 구조를 매번 가져와 쓰면 훨씬 빨라지겠지만 다른 일 하기에도 바쁜데 그럴 시간이 있나. 하지만 파이썬에서는 numpy 차원에서 행렬 덤프를 제공하고, pickle 을 내부적으로 사용하는 shelve 를 한 줄에 쓸 수 있다. 덕분에 30초씩 걸리던 로딩 시간이 3초로 줄어들었다. 내 C++ 프로그램의 실행 시간 중에는 같은 자료를 복사하는 데 걸리는 시간의 비중도 굉장히 컸다. vector 를 주고받는 것은 기본적으로 레퍼런스가 아닌 값을 주고받는 것이기 때문에, 시간이 오래 걸릴 수밖에 없다. 포인터를 주고받으면 되지만 레퍼런스 카운팅 어느 세월에 하고 있나. shared_ptr 를 쓰면 되지만 또 언제 그렇게 프로그램을 바꾸나. 더더욱이, 행렬의 다양한 view (특정 행만을 slice 한다거나, 특정 열만을 본다거나) 를 얻고 이들이 자료를 공유하게 하고 싶다... 뭐 이쯤 되면 각각을 랩핑하는 클래스를 직접 짤 수 밖에 없다. 내 컴퓨터는 제온 쿼드코어인데, C++ 에서 쿼드코어 다 쓰는 프로그램 짜려면.... 아, 상상도 하기 싫다. 그런데 파이썬에선 이런게 다 된다. 막상 C++ 이 우월한 타이트한 루프 돌리는 데서는 weave.inline 으로 C++ 인라이닝을 낼름 해 버릴 수 있다. 내가 포팅했지만 이건 뭐 얄미울 정도다. -_-;

생각해 보면 이와 같은 문제는 참 산재해있다. C++ 으로 깔끔한 프로그램을 짜기란 정말 너무나도 힘들다. 결국 어디선가는 타협을 하게 되고, 그 타협은 언젠가 내 발목을 잡게 된다. 물론 파이썬 같은.. 에, 동적 언어와 비교하는 게 불공평할 수도 있지만, 요즘의 다른 주류 언어에 다 있는 gc 나 closure, RTTI 등등등... 없는 걸로 따지자면 뭐어 안습이다. C++ 는 스포츠카와 같다. 튜닝을 존내 열심히 하고 수십명이 달라붙어서 낑낑대면 누구보다도 빨리 달릴 수 있지만 그러는 과정이.. 아... 치질이 올 것만 같은 고통을 수반한다. 심지어 시트도 졸라 불편해서 치질이 걸릴 수도 있.. 아 왜이렇게 치질드립이 하고싶담.

여기까지 너무 당연한 얘기들을 했다. -_-; 다들 알고 있고 나도 아는 얘기였지만, 요즘 점점 더 실감하게 된다. 내가 나중에 무언가 프로덕션 코드를 다시 짜게 된다면, C++ 을 선택하게 될까 하는 생각을 오늘 문득 했는데, 결론은 "Hell no -_-" 였다. (물론 1ms 단위로 타임 크런칭하는 작은 단위의 소프트웨어라면 얘기가 다르겠지만.. 작년 인턴 프로젝트처럼) 리소스는 한정되어 있고, 가장 좋은 퍼포먼스는 알고리즘과 프로그램 구조의 개선에서 오지 인스트럭션 단위 최적화에서 오지 않기 때문이다.

그렇게 생각하니, 아직도 다 모르는 C++ 의 어두운 구석들을 내가 공부해야 할 필요가 있나 하는 생각이 든다. 내가 계속 프로그래밍 대회 코드를 C++ 로 짜는 것도 왠지 낭비같다. 난 C++ 의 상당 부분을 대회 코드를 짜면서 배웠는데, 다른 언어로 compete 하면 더 많이 배울 것 같다.

결론이 뭐냐면, 그래서 앞으로 자바로 탑코더하겠다는 거다. [.....]

왜 자바냐... 하면..

  • 오픈소스에 mature 한 VM 이 있고
  • 이 위에서 Scala 나 Groovy 같은 다른 언어들이 잘 돌아가기 때문에, VM 에 대한 지식이 넓게 쓰일 수 있고
  • 다른 대안은 C# 였는데 (솔직히 C# 캡좋다) 나 리눅스 데탑 써서 VS 못깐다....

뭐 이런거다. 이렇게 길게 글을 썼으니, 설마 앞으로는 자바로 연습하겠지... -_-;;;

2009-11-17 15:02:05 | JM | /journal/ | 23 Comments
LIBe
2009-11-17 15:17:54
지나친 치질 드립은 꿈을 현실로 만들어버립니다.

이제 Default Language를 Java로 볼 수 있겠근여... 머시땅.
Toivoa
2009-11-17 16:26:00
다른건 몰라도 RTTI는 되잖아 RTTI 안되면 dynamic_cast 부터 안되는데
Toivoa
2009-11-17 16:28:00
그리고 리눅스에서 C# 컴파일 못할리가 없잖아
Being
2009-11-17 16:28:35
음..... C# 쓰시죠 C# -0-.. 모...모노라도 ;ㅁ;
리눅스 데탑에서 VM이라도 돌리심이 ;ㅁ; 자바는..자바는..
ecleya
2009-11-17 16:59:09
리눅스에서 c#이 컴파일이 됨? 처음알았는데.
Neon
2009-11-17 17:57:28
Mono Yeah
dasony
2009-11-17 19:27:21
아무리 그래도 자바라니.
lemon
2009-11-17 20:10:53
커피는 맥스웰. (읭?)
사람들이 페라리와 포르쉐에 열광하지만 지갑에서 돈 꺼내 사는 차는 모다?
볼보나 폭스바겐이라는거..
비유의 접점이 퍽 희미하지만 비전문가의 리플이니 양해를 ^_^; (-_-;;)
6l4ck3y3
2009-11-17 22:31:40
C#으로 프로젝트를 해봤는데, 확실히 좋더라구요. 다만, 자바도 그렇지만 닷넷 프레임워크를 설치해야하는 불편이...이걸 클라이언트마다 설치하는게 여간 불편하더군요.

파이썬은... 파싱하면서 정말 이런 걸 이제서야 알게 되다니 하는 생각이 들더라구요. 새로운 세상이 보이던...
JM
2009-11-17 23:32:11
오 역시 프로그래밍 언어 얘기는 리플이 많이 달리는군. 기쁩니다....
LIBe/ 무서운 소리 하기는... ㄷㄷㄷ
Toivoa/ virtual function 이 한 개 이상 있어야 하는 그 반쪽짜리 RTTI 라면.. 답이 없당.. ㅠㅠ 그리고 Mono 는 아직까지는 너무 마이너한것 같고, 시작하는 마당에 메인스트림 쓰고 싶단 맘임. :-)
Being/ 가능하면 오픈소스 친화적으로 살고 싶은 이마음. Mono 는 위에 설명한 이유로. :-)
ecleya/ http://mono-project.com/Main_Page 이거이 오래된 프로젝트. 물론 MS 공식 지원은 아니고, 노벨인가 어딘가에서 만들던 걸로...
Neon/ 네옹도 모노빠?;; 의외로 모노 지지파가 많은데..
dasony/ 나.. 나는 배신자인가 ㅠㅠ
lemon/ 스포츠카 얘기 나오니 좋아서 리플달긴. ... 나도 포르쉐 갖고 싶다....
blackeye/ 반갑습니다. C# 좋지요 ㅎ_ㅎ 회사 일로 좀 써봤는데, 으아 이 생산성이라니!! 뭐 이런 느낌이었죠. CLR 이나 JVM 은 그래도 기본적으로 맞는 방향으로 가고 있다고 봅니다. :-) 그렇게 따지자면 클라이언트마다 운영체제 까는 것도 일인 시절이 있었..겠죠. -_-;; 그리고 파이썬은 위대합니다. 공식 파이썬 빠 하악하악
hyoseung
2009-11-17 23:50:24
회사에서 지난 한 달 동안 작성한 C++ 코드를 파이썬으로 옮겼다. 1천 5백여 라인에서 400여라인으로 소스코드가 줄어들었다.
-> 아니 뭐 코드량이 중요한건 아니지만, 한달동안 400줄...
JM
2009-11-18 00:13:29
하루에 열줄이면 많이 짰다! 후하하
ltdtl
2009-11-18 03:00:56
그리고 그는 다시는 SRM을 하지 않았습니다.
JM
2009-11-19 00:38:53
어제 intellij idea 도 깔았어 임마
wook
2009-11-22 01:58:56
아 이거 예전에 두번 정도 읽고 지금 다시 정독했는데 오늘은 치질드립에서 뿜었어요 ㅋㅋㅋ 암튼 좋은글 감사..ㅠㅠ
JM
2009-11-24 06:48:13
혼자 주절거린건데 좋은글이랄것 까지야. ㅎ_ㅎ 요 며칠 자바 코딩했다고 C++ 하려니까 어색하네 ㅋㅋ
tnt
2010-01-23 16:11:57
하악
느흐느 검색개발센터에 보면 C++ 과 Vim 조합으로 코딩하는 사람들이 부지기수인데 둘 중 하나만이라도 좀 바꿔보라고 말하고 싶은 욕구가 생긴다.
JM
2010-01-23 16:48:26
vim 이 어때서 ㅋㅋㅋㅋㅋㅋㅋㅋ
Toivoa
2010-01-24 08:25:48
emacs 쓰라는건가? vim vs emacs는 종교문제야
tnt
2010-01-24 11:20:32
아니 eclipse cdt를 쓰라는거지 ㅋㅋ
기본적으로 vim 과 이클립스의 기능 차이는 너무 현격
JM
2010-01-24 11:23:54
헐 우리 vim 까지 말라는? vim 스크립팅과 플러그인의 위대한 힘을 뭘로 보냐는?
Being
2011-06-23 11:50:03
성지순례하고 갑니다.
JM
2011-06-23 16:39:34
@Being, 에이.. 자바 할꺼야.. 언젠간..-_-;;

Leave a comment

春來不似春

About

Eventstream

Pages

Guestbook

Search

Site Admin

Recent Comments