-
C++ 예찬소프트웨어 & 잡다 2012. 4. 12. 22:31
C++C++과 함께 한지 10년이 훌쩍 넘었다.
처음 4년은 학부에서 시스템 프로그래밍, 자료구조, 알고리듬 등의 수업을 통해 C와 C++을 익혔고, 그후 2년동안은 회사에서 비디오 스트리밍 서버 개발. 그후 2년동안은 대학원에서 네트워크 시뮬레이터 개발. 그후 3.5년 동안은 병특할때 텔레콤 서버 개발. 그리고 지금 근 2년 동안 영국에서 방송 서버 개발.
짧지 않은 기간을 해 왔지만, 워낙 머리가 나쁘고 게을러서 공부를 많이 하지 못했다. 그래서 아직도 깊이 들어가면 꼬랑지를 내리게 된다. 특히 실력있는 C++ 프로그래머와 코딩 스킬이나 디자인 패턴쪽으로 깊이 논쟁이 붙으면 도데체 당해낼 수가 없을때가 많다. 나는 스스로 생각한다. 프로그래머 자체로써의 나는 매우 부족하다.
그럼에도 불구하고, 그동안 용케 남들한테 뒤쳐지지 않고 버텨온 원천은 학부때와 대학원때 배운 원론적인 것들이 아닐까 싶다. 물론 당시에는 그다지 중요하게 생각하지 않았었고, 항상 코딩 스킬 향상에 대한 열망만 가득했었다.
컴퓨터 공학도의 기본중의 기본.
별로 욕심이 없던 원론적인 과목들. 전자기학, 회로이론, 반도체이론, micro processor, computer architecture, System on Chip.... 등등이 지금은 아주 든든한 백그라운드가 되어 주고 있다. 사실 저 이론들이 실무에서 직접 도움이되는건 아니라 할지라도 시스템을 이해하고 시스템에 역행하지 않는 소프트웨어를 설계하고 구현하는데 있어서 아주 중요한 이론들이 아닌가 싶다. 머리와 컴퓨터가 본능(?)적으로 조화를 이루는 것이다.
학부때부터 아주 관심이 많았고 깊이 파고들려고 노력한 과목들인 운영체제, 컴퓨터 네트워킹. 특히 네트워킹은 그 당시만 해도 정말 누구랑 이야기해도 지지 않을 만큼 자세히 공부했고 줄줄 꿰고 있었다. 지금은 가물가물해서 구글 없이는 불안하지만. :)
이 두가지는 내가 초고급 C++ 개발자에는 한참 못미침에도 불구하고, 아주 중요한 실무들을 맏을 수 있게 해준 원동력이다. 적어도, 복잡하고 중요한 네트워크 프로토콜 문제 해결에 두려움 없이 뛰어들수 있는 자신감을 보장해 준다. 이 덕분에, 프로그래머로써의 내가 너무 과대포장된 적도 많이 있었던것 같다.
그동안 배우고 경험하고 익힌 수많은 것들이 묻히지 않고 그대로 배어나는것은, 내가 C++이라는 언어를 하고 있기 때문이라고 본다. C++은 양날의 검이라고 한다. 분명히 언어 그 자체만으로는 너무나 위험하고 불명확하다. 이러한 점들을 다양한 경험과 배경 지식들로 엮어주면, 아주 강력한 무기가 되는것 같다. 그렇지 않다면 시한폭탄이나 다를바 없다.
그래서 나는 C++이 좋다.
요즘 잠깐 JAVA를 손대고 있다. C++로 개발한 서버와 JMX 모니터링 툴이 서로 통신할 수 없는 문제가 있어서, 두 언어간의 기술적 갭을 매꿔주기 위한 일종의 아답터를 만들어야 했다. 계기가 없으면 공부를 절대 안하는 스타일인지라, 이런 기회에 자바 공부도 한번 해볼까 하고 volunteer 하였다.
거의 사전지식이 없던 상태에서, 한시간 구글링을 하고, 이클립스를설치하고, 또 구글링을 하고, 필요한 패키지를 다운로드 받아서 몇가지 테스트를 해본 후, 일주일도 안되서 완성 하였다. C++로 일할때와 비교하면, 성능걱정, crash 걱정, 에러핸들링 걱정이 정말 확실히 적었다. 완성한 그 순간부터 문제없이 잘 돌아갈거란 확신이 들정도로 JAVA는 절제적이면서 간결했다. 이클립스가 모든걸 다 도와준다. 정말 편하고 쉬웠다. 그런데 나에게 JAVA는 답답하고 재미 없었다.
남이 게임하는걸 옆에서 구경하는 느낌.
가려운곳을 직접 못긁으니 옷위로 긁으며 대리만족하는 느낌.
내가 들이대서 알아내고 싶은데 옆에서 누가 계속 알려줘서 김빠지는 느낌.
소나타를 타고 가다가 과속으로 사고난 람보르기니를 보며 스스로 위안 삼는 느낌.
메모리 릭 잡으려고 몇주를 밤을 새도, 시스템 크래쉬로 core dump를 분석하며 두통에 시달려도,
그래도, 아니 그래서 나는 C++이 더 좋다!
p.s 대부분의 어플리케이션 서버 개발 분야에서는 JAVA를 훨씬 더 좋아하는것 같다. T^T
'소프트웨어 & 잡다' 카테고리의 다른 글
std::vector 정렬하기 - quick sort, merge sort (2) 2013.10.01 GCC 4.1 호환 지원 (0) 2013.06.25 SVN trunk 변경사항 되돌리기 (SVN Rollback) (0) 2013.02.27 SVN branch and merge 쉽게 활용하기 #2 (15) 2013.02.13 Redhat/Ubuntu 리눅스에서 램디스크(RAM disk) 만들기 (0) 2012.11.15 Intel VTUNE 추가 기능 사용을 위한 EBS 설치 (0) 2012.08.17 Linux HTTP 프록시 설정 (0) 2012.03.05 SVN 사용시에 branch와 merge 잘 이용하기 (15) 2012.01.27