다들 아는 얘기 반복 주의
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
생각해 보면 이와 같은 문제는 참 산재해있다. C++ 으로 깔끔한 프로그램을 짜기란 정말 너무나도 힘들다. 결국 어디선가는 타협을 하게 되고, 그 타협은 언젠가 내 발목을 잡게 된다. 물론 파이썬 같은.. 에, 동적 언어와 비교하는 게 불공평할 수도 있지만, 요즘의 다른 주류 언어에 다 있는 gc 나 closure, RTTI 등등등... 없는 걸로 따지자면 뭐어 안습이다. C++ 는 스포츠카와 같다. 튜닝을 존내 열심히 하고 수십명이 달라붙어서 낑낑대면 누구보다도 빨리 달릴 수 있지만 그러는 과정이.. 아... 치질이 올 것만 같은 고통을 수반한다. 심지어 시트도 졸라 불편해서 치질이 걸릴 수도 있.. 아 왜이렇게 치질드립이 하고싶담.
여기까지 너무 당연한 얘기들을 했다. -_-; 다들 알고 있고 나도 아는 얘기였지만, 요즘 점점 더 실감하게 된다. 내가 나중에 무언가 프로덕션 코드를 다시 짜게 된다면, C++ 을 선택하게 될까 하는 생각을 오늘 문득 했는데, 결론은 "Hell no -_-" 였다. (물론 1ms 단위로 타임 크런칭하는 작은 단위의 소프트웨어라면 얘기가 다르겠지만.. 작년 인턴 프로젝트처럼) 리소스는 한정되어 있고, 가장 좋은 퍼포먼스는 알고리즘과 프로그램 구조의 개선에서 오지 인스트럭션 단위 최적화에서 오지 않기 때문이다.
그렇게 생각하니, 아직도 다 모르는 C++ 의 어두운 구석들을 내가 공부해야 할 필요가 있나 하는 생각이 든다. 내가 계속 프로그래밍 대회 코드를 C++ 로 짜는 것도 왠지 낭비같다. 난 C++ 의 상당 부분을 대회 코드를 짜면서 배웠는데, 다른 언어로 compete 하면 더 많이 배울 것 같다.
결론이 뭐냐면, 그래서 앞으로 자바로 탑코더하겠다는 거다. [.....]
왜 자바냐... 하면..
- 오픈소스에 mature 한 VM 이 있고
- 이 위에서 Scala 나 Groovy 같은 다른 언어들이 잘 돌아가기 때문에, VM 에 대한 지식이 넓게 쓰일 수 있고
- 다른 대안은 C# 였는데 (솔직히 C# 캡좋다) 나 리눅스 데탑 써서 VS 못깐다....
뭐 이런거다. 이렇게 길게 글을 썼으니, 설마 앞으로는 자바로 연습하겠지... -_-;;;




이제 Default Language를 Java로 볼 수 있겠근여... 머시땅.