관련글: STL을 위한 간단한 변호...(?)
원래는 간단히 변호만 하고 묻혀질 글이었을 텐데, 이게 2MB화가 되어버려서인지 예상치 못한 데서 태클이 걸리는군요. C++에 대해서 조금 엿같다고 쓴 든한 늬앙스 때문인지, '닥치고 STL 만세' 라는 느낌이 나서인지, 어떤지 모르겠습니다만... (덧글에서도 순간 제가 발끈해서 조금 공격적이 되어버린 탓도 있겠군요)
C++은 그 역사와 함께 아직까지도 널리 쓰이고 있을 만큼 훌륭한 언어입니다, 분명. 하지만 잘 들여다 보면 군데군데에 뭔가 패치된 흔적같은 것이 엿보이기도 하죠. 그만큼 C++도 세월이 흐르면서 시대의 요구들이 반영되고 언어 자체가 버전업을 해오면서 꾸준히 발전해온 언어라 할 수 있겠습니다. (물론 C도 마찬가지지만요)
하지만 그래도 C++에도 약점이 없을 순 없습니다. 사실 어느 하나의 언어를 가지고 모든 요구를 다 충족시킬 수 있는 만능언어란 존재하기 어려울 겁니다. 아마도 불가능에 가깝겠죠. 그런 약점을 느껴보고 싶다면 한번쯤 다른 패러다임을 가진 언어를 공부해 볼 것을 권합니다. 함수형 언어도 좋고, Smalltalk같은 좀더 고차원의 객체지향 언어도 좋은 소재입니다. 그리고 C++에서 표현하던 것을 이들 언어에서는 어떤 식으로 처리하는지 봐두는 것도 좋습니다. 가능하면 C++이 아닌 다른 언어로도 개발에 적용해 볼 수 있으면 좋고(Lua 같이 바인딩 해서 쓰일 수 있는 언어도 있으니까요), C++에서 비슷하게 흉내를 내어 보는 것도 좋겠습니다. C++은 매크로와 템플릿 덕분에 어느정도 메타 프로그래밍도 가능해서 라이브러리 차원에서 언어를 확장시키는 것도 왠만큼 가능합니다.
STL에 대해 말하자면 C++을 제법 쓰기 편하게 만들어 주는 라이브러리입니다. STL 보다도 더 좋은 라이브러리가 있을 수도 있겠지만, STL은 어쨌거나 표준이라는 점에서 좋은 면이 있죠. 그리고 STL 자체도 제법 공부할 만한 요소가 있는 라이브러리입니다.
저는 굳이 C++이 엿같다라고 말하려는 건 아닙니다. (설령 엿이라고 해도, 엿도 엿 나름대로 쓰임이 있는 법이죠) 프로그래밍에서 언어라는 건 종합적으로 따져봤을 때 각기 장단점이 있을 수 밖에 없습니다. (그리고 저도 C++ 덕분에 먹고 살고 있으니까요...) 그래서 언어에 대한 논쟁은 정말 쓸대없는 짓이라고 생각합니다. 하지만, 한가지 언어의 패러다임에만 갇혀있는 것 보단 좀 더 넓게 바라보는 것도 중요하다고 생각합니다. 그리고 그런 경험들이 C++을 좀 더 잘 이해하고, 좀 더 편리하게 다룰 수 있게도 해줄 겁니다.
에... 이래저래 정리는 잘 안되었습니만, 사실 제가 하고 싶은 말은 '실용주의 프로그래머'란 책에 거의 다 들어있습니다. 아직 안읽어 보셨다면 일독을 권합니다.
원래는 간단히 변호만 하고 묻혀질 글이었을 텐데, 이게 2MB화가 되어버려서인지 예상치 못한 데서 태클이 걸리는군요. C++에 대해서 조금 엿같다고 쓴 든한 늬앙스 때문인지, '닥치고 STL 만세' 라는 느낌이 나서인지, 어떤지 모르겠습니다만... (덧글에서도 순간 제가 발끈해서 조금 공격적이 되어버린 탓도 있겠군요)
C++은 그 역사와 함께 아직까지도 널리 쓰이고 있을 만큼 훌륭한 언어입니다, 분명. 하지만 잘 들여다 보면 군데군데에 뭔가 패치된 흔적같은 것이 엿보이기도 하죠. 그만큼 C++도 세월이 흐르면서 시대의 요구들이 반영되고 언어 자체가 버전업을 해오면서 꾸준히 발전해온 언어라 할 수 있겠습니다. (물론 C도 마찬가지지만요)
하지만 그래도 C++에도 약점이 없을 순 없습니다. 사실 어느 하나의 언어를 가지고 모든 요구를 다 충족시킬 수 있는 만능언어란 존재하기 어려울 겁니다. 아마도 불가능에 가깝겠죠. 그런 약점을 느껴보고 싶다면 한번쯤 다른 패러다임을 가진 언어를 공부해 볼 것을 권합니다. 함수형 언어도 좋고, Smalltalk같은 좀더 고차원의 객체지향 언어도 좋은 소재입니다. 그리고 C++에서 표현하던 것을 이들 언어에서는 어떤 식으로 처리하는지 봐두는 것도 좋습니다. 가능하면 C++이 아닌 다른 언어로도 개발에 적용해 볼 수 있으면 좋고(Lua 같이 바인딩 해서 쓰일 수 있는 언어도 있으니까요), C++에서 비슷하게 흉내를 내어 보는 것도 좋겠습니다. C++은 매크로와 템플릿 덕분에 어느정도 메타 프로그래밍도 가능해서 라이브러리 차원에서 언어를 확장시키는 것도 왠만큼 가능합니다.
STL에 대해 말하자면 C++을 제법 쓰기 편하게 만들어 주는 라이브러리입니다. STL 보다도 더 좋은 라이브러리가 있을 수도 있겠지만, STL은 어쨌거나 표준이라는 점에서 좋은 면이 있죠. 그리고 STL 자체도 제법 공부할 만한 요소가 있는 라이브러리입니다.
저는 굳이 C++이 엿같다라고 말하려는 건 아닙니다. (설령 엿이라고 해도, 엿도 엿 나름대로 쓰임이 있는 법이죠) 프로그래밍에서 언어라는 건 종합적으로 따져봤을 때 각기 장단점이 있을 수 밖에 없습니다. (그리고 저도 C++ 덕분에 먹고 살고 있으니까요...) 그래서 언어에 대한 논쟁은 정말 쓸대없는 짓이라고 생각합니다. 하지만, 한가지 언어의 패러다임에만 갇혀있는 것 보단 좀 더 넓게 바라보는 것도 중요하다고 생각합니다. 그리고 그런 경험들이 C++을 좀 더 잘 이해하고, 좀 더 편리하게 다룰 수 있게도 해줄 겁니다.
에... 이래저래 정리는 잘 안되었습니만, 사실 제가 하고 싶은 말은 '실용주의 프로그래머'란 책에 거의 다 들어있습니다. 아직 안읽어 보셨다면 일독을 권합니다.




덧글
그리고 C/C++/Java 같은 것만 보다가 Standard ML같은 걸 배워보니 재밌기도 하고... 정말 시야가 확 넓어지는 느낌이 들더군요...
"우월한 프로그래밍 언어는 없다. 다만 프로젝트에 적합한 언어는 있을 뿐이다"는 말이 떠오르네요.
C++이 가진 한계를 모르겠다고 하면 C++로 RIA 어플리케이션을 한번 만들어보라고 하지요 (…)