프로그래머라면 꼭 알아야 하는 지식은?
글쓴이: jeongheumjo / 작성시간: 목, 2010/09/23 - 3:43오후
경력 6년 이상이 되었지만 최근에 디자인패턴에 대해 눈을 뜨면서
C++로 디자인패턴을 구현하는 기술을 꼭 익혀야겠다는 생각을 하게 되었습니다.
"모던 C++ 디자인" 과 템플릿 관련 서적 한권 정도 반드시 독파해야겠다는 생각입니다.
또 반드시 알아야 할 것이 무엇이 있을까요?
리팩토링은 또 뭔가요?
Forums:
헉 디자인패턴은
당연히 필수.
해피해킹당
그러게요..
경력도 있는데 최근에서야 그게 몬가 알게 되었네요..
실상 현장에서는 그런거 몰라도 일 할 수 있는 분야가 많았어요..
디자인 패턴은 추천하지만...
모던 C++디자인은 호불호가 많이 갈리는 편이네요. 그냥 GOF의 오리지날 디자인패턴을 보시던지 아니면 다른 C++용 디자인 패턴 책을 먼저 보시는게 좋은 것 같습니다. 실제로 성능상의 이유나 컴파일이 느려진다는 이유로(템플릿을 엄청 써서...) 모던 C++디자인에 있는 방법은 잘 안쓰는 경우가 많다고 알고 있습니다. 실제로 책이 객체 상속이나 전형적인 OOP의 방법을 쓴 디자인 패턴보다는 템플릿의 복합등의 다른 방법을 많이 써서요...
유명한 오픈소스 3d 엔진인 ORGE3D에는 모던C++디자인 방법을 많이 쓰긴 하긴 하던데 실제로 본 코드중에는 그 외에는 별로 기억나는 C++코드가 없네요.
개인적으론..
템플릿을 기반으로한 C++ 디자인패턴은 추천하고 싶지 않습니다.
굉장히 복잡하고, 디버깅도 어렵고, 생각만큼 유연하지도 않으며..거기다 느리기까지 합니다.
인기있는 언어를 원하시면 C# 이나 Python ,
마이너하나 강력한걸 원하시면 F# 이나 LISP 을 공부해 보실걸추천.
LISP 사용자모임
http://cafe.naver.com/lisper
LISP 사용자모임
http://cafe.naver.com/lisper
방송기술 개발업체
http://playhouseinc.co.kr
C#, F#, Python,
C#, F#, Python, LISP
이런걸 쓰는 일을 본적도 들은적도 없네요...
이런 언어는 어떤 분야에 쓰이나요?
다른
다른 언어들(F#,Python,LISP)은 모르겠지만 C#은 많이들 사용하지 않나요??
ASP.NET 개발할때 C#으로 개발하는걸로 알고 있습니다.
윈도우모바일 7도 C#개발자들이 넘어가기 편하도록 어플 개발을 C#으로 하면 된다고 들었습니다.
템플릿을 활용하는 코드의 예로
아이폰이나 맥이나 안드로이드에 있는 그리고 크롬에 있는 웹킷 브라우저 엔진이 있지 않나요?
잠깐 코드를 본 적이 있는데 순전히 템플릿으로 되어있던 것 같아요.
분석하기 난해하기가 이를 데 없었어요...
하지만 성능은 가장 탁월하거든요. 모든 브라우저들 중에서요..
빠르고요..
완전 매료되었는데요..
그런데 그 웹킷이 모던 C++의 스타일과 비슷한가는 잘 모르겠어요..
오픈소스 webkit
이건 COM interface 로 되어있을 텐데요.. 그걸 템플릿이라 부르던가?
VC++ 의 그 구조는 특이한 구조라서... 내가 아는 제일 빠른 ANSI C 의 퀀텀프로그래밍과 비교했을때 비슷하다고 들었습니다.
게다가 webkit 도 unix 스타일 소스가 많이 들어가 있어서 cygwin 있어야 되고...
일단 java, C#, python 등 다른 언어에 대해서 배워보는 거 추천드립니다...
-----
안녕하세요 소프트웨어 공학센터 장원석 책임입니다.
http://www.software.kr
자바 책 샀습니다 ^^
안드로이드도 등장했고 자바라는 언어는 꼭 배워둬야 겠더라구요..
COM 은 윈도우즈에서만 쓰이는 것 아닌가요?
웹킷 라이브러리는 C++ 표준으로만 작성되었을 거예요... 크롬 브라우저에 사용된 윈도우용 브라우저 어플코드 말고 브라우저 엔진 부분만 보면요...
이산수학
이산수학 추천합니다.
집합과 함수의 개념은 현대의 모든 프로그래밍 언어, 개발방법론의 상위 개념이며, 가장 중요하다고 생각합니다.
학부시절 등한시 한것을 지금에와서 땅을치고 후회하고 있습니다.
C/C++이라면 더더욱 중요하다고 생각합니다. 사실상 STL 자체가, 위의 개념을 근간으로 하고 있습니다.
어설픈 디자인패턴, 리팩토링 보다는, 모든것을 집합으로 모델링 하는 방법이, 훤씬 심플하고 일관성 있으며 유지보수에도 편하다는 것이 요즘 저의 생각입니다. :-)
이산수학이 OCP 를 담고있나요?
제가 터득하고싶은 최신 프로그램 기술을 압축하면 Open-Closed Principle 인데요, 아마도.
이산수학은 그냥 수학아닌가요?
너무 어려운 말씀이시네요..제게는..
언제나 가장 중요한
언제나 가장 중요한 것은 기본이지요.
CA , OS , PL , DS
를 하시면 됩니다.
( 6년차 이상 이시면 이미 다 아시는 걸지도. ;;; )
허걱 OS 가 제가 아는 그건가요?
나머지는 뭔지 전혀 모르겠는데요?
제가 완전 헛일만 했나봐요..
OS 운영체제
DS 데이타구조
PL 프로그램언어?
CA 는 국민학교때 특별활동이었는데....
무슨 말이예요? 너무 어려워요~
CA는 컴구구나
너무 당연한 말씀이신거 같네요 ㅎㅎㅎ 암호같은 답변 추측하기 힘들었습니다. 쿨럭..
template이 느리다는 것에 대해서 의문.
Runtime에서 template이 느릴 수 있는 상황은 code bloat 뿐일 것 같은데요.
Template을 적극적으로 활용한 library를 쓰면서 code bloat을 적절히 통제하는 것은 쉽지 않을 것 같기는 합니다.
하여간 저도 template을 적극적으로 활용한 programming은 안 좋아해요. ^_^.
STL도 가끔은 싫다는...
모던C++ 은
모던C++ 은 아니더라도 템플릿을 이용하는 디자인 패턴을 추구해 보는 것도 좋지 않을까요?
정적 polymorphism 이 더 어울리는 경우도 많이 있는 것 같은데.
대부분 템플릿 들어가는 것은 싫어 하시는 듯.
템플릿과 메타프로그래밍, 부스트를 최대한으로 활용하는 개인 프로젝트를 하고 있는데, 암흑 속에서 허우적 거리는 느낌이네요.
템플릿을 활용한 코드를 잘 쓰지는 않는가보군요
하지만 C++의 표준만 사용하는 것인데도 말이죠...
제 말은 보통의 프로그래머 얘기입니다.
함부로 범접하지 못할 상당한 고급기술같아요..
배우는게 오히려 독이 될 것 같기도 하구요..
저는 그래도 배워보고 싶네요 ^^;
이런걸 원하시나요? ^^
What Every Computer Scientist Should Know About Floating-Point Arithmetic
http://docs.sun.com/source/806-3568/ncg_goldberg.html
What Every Programmer Should Know About Memory
http://people.redhat.com/drepper/cpumemory.pdf
댓글 달기