![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
템플릿을 잘 다루는 것과 실력이라는 것이 어떤 연관이 있을까요?
C++ 빌더로 컴포넌트 위주로 개발해온 12년차 개발자는 템플릿을 잘 못다룬다는 이유로 실력이 형편 없는 건가요? 제가 알기에 C++은 멀티패러다임을 수용한 언어로 알고 있습니다. 즉 가장 자신있는 패러다임으로 개발을 할 수 있다는 의미겠지요.(C++ 마스터라는 것은 어떤 근거로 잴 수 있나요?) 실력의 잣대는 결과물로 재야지 단순히 언어의 한 기능을 잘 다루느냐 판단하기에는 판단요소가 너무 부족해 보입니다. 템플릿 사용이 중요한 프로젝트였으면 구인시에 템플릿 사용에 자신 있는 개발자를 채용하면 되는 겁니다. 초특급 개발자라도 안해본 것은 서툴 수 밖에 없습니다. 저도 정영훈님 의견에 동의 합니다. 실력이란 객관적 기준도 있겠지만 기준을 어디에 두냐에 따른 상대적, 주관적 기준도 분명 존재 한다고 생각합니다. 템플릿을 잘 못다룬다고 실력이 없을까요? 사실 저도 빌더로만 근 10년 넘게 사용하고 있지만 템플릿 사용도 거의 하지 않고, 잘 모릅니다. 그래도 나름 제가 발담고 있는 이 분야에서 실력없다는 소리 듯지는 않습니다. 그렇다고 제 스스로 프로그램 잘 한다고 생각하는건 아닙니다. 모르는게 아직 너무 많으니까요.. 템플릿을 공부하지 못한(안한)이유를 굳이 들자면 필요성을 느끼지 못했고, 제 개발분야에서 공부 해야할 지식들도 꽤 많았기 때문입니다.
시스텍님이 말씀하신 경력 12년인 그분이 C++ Math 라이브러리만 썼다면 아마 잘 했을지도 모르겠다고 조심스레 추측해 봅니다. 중간에 갑자기 다루어 보지 않은 템플릿으로 바뀌다 보니 어려움이 있었을 수도 있고요.. 단지 템플릿을 못한다고 절대적인 실력이 없다고 단정짓는것은 잘못된 편견이라고 봅니다. 템플릿도 결국은 옵션이라고 생각합니다. 주력이 C, C++ 이고 보조적으로 자바나 C#도 할 수 있으면 좋고라는 식의 옵션 사항으로 기술해야 하는 항목이 아닐까 생각해 봅니다. 템플릿은 Template parameter deduction이 결정되고 CodeGenerator에 의해서 코드가 생성될 때... 컴파일러로 하여금 코드 최적화 여지를 더 많이 주기 때문에 성능을 고려할 시 자주 이용되게 됩니다. clang/llvm에서 주요 부분이 template으로 구현되어 있는 것도 마찬가지 입니다.
말씀하신 Casting.h 템플릿 코드는 Template specialization을 고려해 코드가 구성되어 있는 정도일 뿐... 별다른 테크닉이 사용되고 있지 않습니다. 이정도에서 부터 어려움을 느낀다면 clang/llvm 소스코드 분석 자체가 불가능 할텐데요... int i = 1 + 2;
매우 간단한 문장이죠. 그러나 컴파일러는 저 간단한 문장 하나 조차도 Parse Tree를 만들기 위해 7개의 Token Node를 생성해서 갖고 있어야 합니다. 컴파일 해야 할 문장이 수십만 ~ 수백만 라인이라고 생각해 보세요. dynamic_cast를 이용하면 기하급수적으로 생성되는 모든 Token Node들 이 VMT 테이블도 같이 갖고있야 하기 때문에 메모리 사용이 급증하게 됩니다. symantic 분석과 AST Node로의 축약은 파싱단계의 후단부에서 처리되겠지만요. 그러나 template 테크닉을 이용하면 memory footprint에서 훨씬 유리해 집니다. 거기다 template은 컴파일러에 코드 최적화 여지도 더 많이 주기 때문에 생성되는 코드도 훨씬 효율적이고요. 다른 분야도 마찬가지지만 C++ Language 역시 빠르게 진화하고 있습니다. C++11이 확정된지 얼마 지나지도 않았는데 벌써 C++14가 나올 정도죠. C++에서 template을 옵션 정도로 취급하면 된다고 얘기하는 분들도 몇몇 있는거 같은데... template은 C++프로그래머라면 반드시 마스트해야 할 mandatory지 결코 option이 아닙니다.
대학 전산기과나 컴퓨터공학 관련 학과에 입학하는 신입생들이 필수적으로 읽는 C++ 기본교재가 C++의 창시자인 Bjarne Stroustrup교수가 지은 The C++ Programming Language 라는 책입니다. 44 Chapter 1,300 페이지에 이르는 분량인데... Chapter 전체에서 template이 빠지지 않고 계속 다루어 지고 있을 정도로 C++에서 template은 상당히 중요한 내용입니다.(4th Edtion) C++의 철학이 담긴 훌륭한 책이니까 아직 C++에 설렁설렁한 분들은 원서로 곱씹으면서 정독해서 읽어 보시기를.... 템플릿을 사용해서 만들던 다른 방법으로 만들던 무엇이 문제일까요?
제가 위의 글을 적은 이유는 "시스텍"님이 단순히 언어의 기능 하나를 알지 못한다는 이유로 실력이 없다라고 단정을 했기 때문입니다. 물론 템플릿을 잘 못다루시던 그 분은 c++ 다루는 실력은 없었을지도 모르겠습니다 그렇다고 해서 그 부분만을 보고 실력을 판단하는 것은 참으로 좁은 판단인 듯 합니다. 여러 개발자 분들과 협업을 종종 합니다. 개발이라는 테두리에서 보면 각자 능력치가 높은 부분들이 있었습니다.(개발을 단순히 코딩만이라고 생각치는 않으시겠죠) 분명 방법은 여러가지가 있을 수 있습니다. 내가 아는 방법이 최고의 방법이라고 생각지 않았으면 좋겠습니다. 초기의 C++ 언어는 객체지향 개념이 강했으며, 그 당시 C++ 컴파일러에서는 템플릿을 완벽하게 구현하지도 못해서 템플릿의 중요도는 크지 않았습니다. 오래된 C++ 서적들을 보면 템플릿의 비중이 높지 않습니다. 아마 저를 포함해 40이 넘은 개발자는 그런 책으로 공부했고, 그렇기 때문에 템플릿이 익숙하지 않은 것일 겁니다.
그동안 템플릿을 사용하지 않고도 얼마든지 개발이 가능했으니, 필요를 못 느낄 수도 있구요. STL등이 보편화 되고, boot등의 좋은 라이브러리들이 나오고, 그 중 일부가 표준이 되고, 계속 C++이 발전하면서 갈수록 템플릿이 더 중요해 지는 것은 사실입니다. 저도 계속 책을 사서 보고, 새로운 표준이나 그것을 지원하는 컴파일러에 관심이 많아서 공부도 하고, 새로운 표준을 신규 개발에 적용을 하고 하지만, 기존 소스들에는 기존 방식으로 개발합니다. 기존 방식보다 새로운 방식이 더 좋은 건 아니라고 봅니다. 필요에 의해서 사용하면 되는 거지, 새로운 표준으로 반드시 개발해야 하는 건 아니라고 봅니다. 아직도 C++빌더 6 이나, Visual C++ 6.0으로 개발하는 개발자가 많습니다. 그렇게 오래된 환경에서도 잘 개발하고 있다면 잘 하고 있는 것이죠. C++에서 템플릿 기능이 빠져도 저는 C++로 개발할 것입니다. 왜냐하면, 최소한 델파이 보다 나을게 없는 언어는 아니거든요. 모처럼 재미있는 이야기입니다.
사실 개발자들의 세계도 꽤 넓습니다. 접해보지 않으면 잘 모를 수 있습니다. 클래스기반 템플릿기반 다 나름 존재이유와 방법들이 있습니다. 템플릿써야 더 능력있는 개발자고 꼭 그런 것 아닙니다. 우리가 처음에 프로그래밍 배울 때 생소하면 어렵던 것과 비슷합니다. 위의 빌 더 님의 내공은 물론 제가 보기에도 대단하십니다. 컴파일러 분야에도 어느정도 정통하신 것 같습니다. 그런데 사실 이 부분도 디버깅 깊게 하게 - 스터디도 좀 해 가면서 - 되면 전산 수업 배울 때 그냥 넘겼던 개념들 다 다시 확인하게 됩니다. 템플릿 코드만 잔뜩 있는 것도 자꾸 보게 되면 익숙해지고 친해지게 됩니다. 사실 오픈소스보면 이런게 꽤 됩니다. 이런 세계에 발을 들여놓고 살게 되면 자신도 그들처럼 비슷하게 코딩하게 되갑니다. 조금 더 붙이자면 요즘 C++이 이렇게 템플릿을 포함해서 갖가기 방법들이 붙여서 괴물처럼 되가는 것은 좀 이유가 있습니다. GCC하는 사람들 때문입니다. 원래 CLang도 GCC에서 나왔습니다. 거기에는 애플의 잡스의 뜻이 개입된 정황도 있구요. GCC 해커들은 C++로 천하통일 하겠다는 원대한 꿈이 있었습니다. 지금은 그 꿈이 좀 실현되어 목표로 되어가고 있고 우리가 모르는 사이 개발 세계의 밑바닥을 야금약금 정복해 가고 있습니다. Universal Language를 C++로 하겠다는 것입니다. 중간단계 언어를 C++로 하려면 각 언어들의 고유 특성들을 C++로 다 표현할 수 있어야 합니다. 그리고 실험단계에서 SW공학적 연구의 목적으로 만든 언어들의 개념도 여기에 넣기도 했구요. 또 최신 SW공학적 발전으로 얻게된 개념들을 충분히 지원해 줄 수 있게 손을 대게 됩니다. 물론 C++로 이런 걸 다 할 필요는 없는데 예를 들면 고상한 SW 공학 이론을 증명할 스크립트 언어가 필요한데 이 언어를 C++로 컴파일러만 만들고 그 고상한 이론은 그 스크립트 언어가 하고 Output binary는 C++ 베이스로 한다 뭐 이런겁니다. 그래서 .net c++이 .net을 만든 base 언어이지만 .net 개발에는 c#을 쓰는 그런겁니다. .net 개발을 c++로 하는 것은 오히려 이상해 보이는 것이지요. GCC에는 java도 있습니다. java source를 c++로 번역합니다. 물론 그 c++은 managed 되는 c++입니다. 이 말은 GCC에서는 unmanaged 되는 java 그러니까 pointer를 c++같이 쓰는 java를 할 수도 있는 것입니다. 아무튼 요즘 세상이 좀 이렇습니다. 적어도 c++는 사라지지 않을 것이고 c++로 먹고사는 밥그릇도 없어지지 않을 거라는 기대를 해 봅니다. 그래서 템플릿 보시면 기뻐하시기 바랍니다. "template를 안쓴다면 C++이라고 해봐야 델파이와 차이가 없습니다." 라고 말씀하신 건다르님 얘기는 델파이 개발자들 입장에서는 참 듣기 거북하게 느낄 수 있는 부분이 아닐까 합니다. 게다가 저같이 템플릿 안쓰고 클래스 기반의 C++ 만 사용하는 입장에서는 템플릿 못하니까 C++ 하지말고 델파이나 해라 라고 들리는 군요..
사실 VCL 을 보면 거의 대부분 오브젝트 파스칼로 구현되어 있습니다. 단순히 속도 문제라면 무엇때문에 파스칼을 썼을까 생각해 보지 않을 수 없는 문제 입니다. 그 예전의 볼랜드나 현재 엠바카데로 개발자들중에 C++ , 템플릿 할줄 몰라서 오브젝트파스칼을 써서 VCL을 만들었을 거라고는 생각하지 않습니다. 그렇게 속도 따질거면 어셈블러가 최고 아닌가요? 어떤 언어를 사용하던, 어떤 기능을 사용하던 최종 사용자가 만족하는 시간안에 만족하는 결과물을 만들어 내는 개발자가 뛰어난 개발자가 아닐까 생각해 봅니다. 템플릿을 아무리 잘 다루어도 사용상 버그투성이에 툭하면 뻣어버리는 결과물을 만들어 낸다면 누가 좋은 개발자라고 말하겠습니까? 제가 생각하는 좋은 개발자는 기획에서 결과도출 그리고 Document 까지 최종적으로는 사용자가 만족하는 결과물을 만들어 내는 개발자라고 생각합니다. 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |
컴파일 에러가 주루룩??? 컴파일러가 간단한 윈도우 코드하나도
컴파일 못하네요???