template meta programming에 어떻게 생각하십니까?

nineye의 이미지

지금은 개발 5년차의 어느정도 개념을 잡아가는 개발자입니다.
제가 진행하고 있는 프로젝트 자체가 제한된 저사양 단말에서 실행되다 보니,
성능을 최우선으로 생각하는 개발 모습을 가지고 있습니다.

개발 3년차 정도되기까지 항상 느낀 것이, C++의 객체지향 기술들은 성능에 도움이 되지 않을 뿐더러
오히려 구조적인 프로그래밍에도 도움이 되지 않는다는 것이었습니다.
즉, virtual, 동적 바인딩, 상속... 각각의 개념은 다들 아시다시피, 쓸데없는 메모리 참조와 추가적인 instruction들로,
성능에 악영향을 끼치는 것들이며, 실행 시간에 다양한 방법으로 이용할 수 있는 융통성이 있어 사용하기 편리하지만,
내부적으로 숨겨지는 것들이 너무 많아, 버그 발생 확률을 높이는 것들이라고 생각하고 있습니다.
물론 순수하게 성능을 높이려면, C와 어셈을 적절히 섞어서 개발하는 것이 최고이겠지만,
문제는 구조적 프로그래밍과 플랫폼 독립적인 개발을 하기에는 다소 어려운 점이 있을 것 같았습니다.

그래서 고민을 하다가, template meta programming이라는 개념을 접하게 되었습니다.
2년전, 그때 당시에는 template에 대해 단순한 java의 object class 개념으로 생각하고 있었지만,
template meta programming에 대한 개념에 대해 알면 알수록 "아~ 내가 찾던 것이 이거야!"라고 생각할만큼
제가 원했던 성능 + 구조적 프로그래밍을 잘 표현할 수 있는 개념인 것 같았습니다.

그래서 그때부터 template meta programming을 이용해서 저의 모든 코드를 고치기 시작하였고,
template의 단점을 보완해주는, 형식적인 상속을 제외하고는 모든 상속 구조를 코드에서 모두 삭제하였습니다.
하지만 여기서부터 문제가 생기기 시작했습니다. 저 혼자 개발하면 문제가 되지 않겠지만,
같이 개발해야 하는 프로젝트가 생기면 제 코드를 쉽게 넣기가 어려워졌죠.
또한, template programming을 많이 해본 분이라면 아시겠지만, unit programming 개념에 입각해서,
하위단에서부터 그들을 tempalte argument로 이용하는 상위단까지 구조를 정형적으로 설계하지 않으면,
template programming은 오히려 더 복잡하고 어렵고 개발 시간만을 잡아먹는 애물 단지밖에 되지 않았습니다.

주위에서 "이거 너무 복잡하다.. 그냥 심플한 구조로 가자.."라고 말할 때마다 설득을 해야 하는 것이 힘들었고,
솔직히 다들 자기만의 취향이 있기 때문에 제가 원하는 구조로 가자고 쉽게 설득하기가 어려웠죠.
이제는 대부분 제가 혼자 진행하는 프로젝트에서만 제 코드를 사용하고 있습니다.

제가 주위의 반대에도 무릅쓰고 아직 이 구조를 고집하고 있는 이유는, 코드의 재사용성이 정말 환상적이고,
코드의 성능에도 문제가 없기 때문이죠. 최근 몇 달 개발 분량의 시스템이 있었는데, 그 시스템의 60% 이상의 코드가
제가 template을 이용해서 작성한 library에서 소스 수정 없이 모두 사용했을 정도니까요(덕분에 일정 늘리지 않고도 계속해서
template meta programming에 대한 설계를 계속 할 수 있었다는...).

또한 대부분의 class가 unit단위로 다른 class에 이용되는 구조로, class unit의 단순한 수정으로 이를 이용한
모든 프로젝트들의 동작을 일괄적으로 변경시킬 수도 있어서 유지보수 입장에서도 큰 도움을 받았습니다.
그런데 요즘은 나이가 좀 들어서인지, 세상과 타협하려는 생각이 조금씩 앞서가기 시작하네요. 사실 template 프로그래밍은
표준을 모두 구현한 컴파일러가 없을 뿐만 아니라, 구 버전의 컴파일러에서는 정말 좌절할 정도로 지원이 많이 되지 않아서
엄청난 삽질을 항상 동반해서 힘들기 때문이죠.

그래서 과연 관리자 입장에서나 개발자 입장에서나, 이것에 대해서 어떻게 생각하는지 다양한 의견을 듣고 싶어서 이렇게 글을 올립니다.
장문을 읽어주셔서 감사합니다.

philnet의 이미지

자신이 처한 환경에 따라 달라질 수 있을 것 같습니다.

embedded 제품의 경우, HW 사양을 필두로 해서 몇 가지 이유로 인해 C++ 자체를 사용하기가 쉽지 않은 경우가 많죠. 고용할 수 있는 개발자들도 주로 C를 사용하던 사람들이고요. 팀 내 대부분의 개발자가 이런 상태에서, 혼자 C++을 더군다나 template 기반의 개발은, 깐깐한 리더가 있다면, 자기만 주로 쓰는 모듈에서도 허용되기가 쉽지 않을 수 있지요.

제 개인적인 경험을 조금 말씀 드리자면, 예전에 처음 시작하는 회사에서 대략 1년 정도의 기간을 가지고 제품을 개발할 수 있었습니다. 그때는 제가 대략 4 ~ 6명 정도의 SW 개발 리더 정도였고, 운좋게도 회사 내에서 SW 개발과 관련해서는 대부분의 의사결정을 내릴 수 있는 위치였지요. 타겟으로 삼은 HW의 사양도 낮지 않아서 C++로 개발을 진행했습니다.

거기다, 회사에서 진행하던 국책 과제의 예산 처리 과정에서 돈이 남게 되어 Rational Rose를 구매할 수 있는 행운이 겹쳐, rose로 먼저 클래스 다이어그램 그려서 설계한 다음 코드 생성하는 식으로, 단순 타이핑으로 인한 노가다 작업도 줄이고, UML의 다양한 기능(그 중 주로 사용한 것은 아주 일부였지만)을 써서 의사소통도 비교적 원활하게 할 수 있었습니다.

팀 내 저를 제외한 대부분의 사람들이 주로 C만 했던 사람들이어서, 위와 같은 정도로 하는데도 꽤 많은 시행착오를 거쳤습니다. 일단 사람들의 수준이 비슷하게 되는데 대략 2 ~ 3달이 소요되었던 것 같네요. 물론 그 이후의 생산성은 아주 좋았습니다. 그리고 디자인 패턴을 익히고, 이를 가지고 너 나은 구조로 리팩토링 하고...

template은, 나중에 Modern C++ Design 이라는 책을 읽으면서 받은 충격(?) 때문에, 꼭 한번 적용해 봐야겠다고 마음 먹었다가, 나중에 새 프로젝트를 시작할 때, 일부 기능을 별도의 application으로 분리해서 적용해 보았습니다. 제가 한 건 아니고(^^), 저희 팀 내에서 정말 스마트한 친구 하나가 자원해서 고생했구요, 고생한 이상으로 좋은 결과를 냈었습니다.

문제는, 새로운 사람이 들어 오게 되면, 실제 일을 할 수 있게 되기까지 꽤 많은 시간이 필요하단 것이었습니다. C만 하던 사람이라면, C++, UML, 리팩토링, 디자인 패턴, 리눅스 개발 환경 등... 2 ~ 3년 정도 경력의 기준으로 대략 4 ~ 6주 정도의 시간이 걸렸던 것 같습니다. 피치 못할 이유로 개발자가 교체될 때의 타격이 상당히 컸습니다. template meta programming은, C++을 어느 정도 아는 사람의 경우에도 정말 어려워 했던 것으로 기억합니다. 당장 compile 시 쏟아지는 error message에서부터 압도 당하는 경우가 많았는데, 결국 template 기반으로 작업된 내용은 그 담당자와 저만 주로 봤던 것 같습니다.

중간에 다른 회사에서 한 2년 일을 했었는데, 거기서는 도저히 C++을 사용할 수 없는 환경이었습니다. 회사의 모든 소스가 C로 되어 있을 뿐 아니라, 저를 제외한 모든 사람들이 C로만 작업하고 있기 때문에, 저 혼자 아무리 C++로 잘 짠다고 해도, 추후의 협업에서 문제가 심각하게 될 것이었기 때문이었습니다. 그래서 C로 작성하되, C++의 장점을 비슷하게 낼 수 있는 식으로 코드를 작성했습니다. OOP로 갈 수 있도록 세미나도 하고 연구소장님한테 OOP의 장점도 설명하고 그랬는데, 저 하나야 모르겠지만, 다른 사람들로 하여금 현재 업무를 그대로 하면서, C++로 갈 수 있도록 할 시간을 만드는데는 성공하지 못했습니다.

서두에서 말씀 드렸듯이, 저는 시행착오를 감내할 수 있는, 비교적 넉넉한 개발 기간과, 회사 내에서 상당한 신뢰와 권한을 가진 상태에서 시작했기 때문에, C++을 가지고 비교적 좋은 산출물을 낼 수 있었다고 생각합니다. template 기반의 개발 작업도 담당자가 능력이 탁월했지만, 팀장인 제가 그에 대한, 어느 정도의 믿음을 가지고 있었기 때문에 가능했던 것이고요. 이와 같은 환경이라면 template meta programming을 적용해서 얼마든지 좋은 결과를 낼 수 있겠지만, 그렇지 않다면 동료들과의 협업 효율성을 많이 고려해야 할 것 같습니다.

참고로, 저는 template 이외의 C++의 특성들도 적절히 사용하면 좋다는 주의고요, 현업에 적극적으로 사용해서 실제 유지 보수 하기 좋은 결과를 내 왔다고 생각합니다. template은 말씀하신 것과 같은 장점도 있지만, 팀장 입장에서 보면 팀웤과 협업 효율성 측면에서 부담되는 부분이 또 있기 때문에, 정말 template로 좋은 결과를 낼 수 있을 것 같은 곳에만 한정적으로 사용하게 되었던 것 같습니다.

(덧붙임)
요즘은 애자일 방법론에 많은 관심이 가고, 조금씩 적용해 보려 하고 있습니다. template meta programming 뿐만이 아니라 뭔가 좋은 것을 사용해서 좋은 결과를 내려면, 같이 일하는 동료들이 그 새로운 것을 편하게 시도하고 받아 들일 수 있어야 하는데, 거기에 XP의 패어 프로그래밍이라는지, 스크럼 같은 것들이 좋을 것 같아서입니다.

nineye의 이미지


자세한 답변 주셔서 정말 감사드립니다~ ^^
사실 저도 Modern C++ Design 책을 우연히 접해서, 이 책을 읽고 template의 세계로 빠져들었습니다..ㅎㅎ
그 책을 접하고서는 정말 충격이었죠. 그때까지는 사실, 객체지향이란 개념에 대한 불신으로
왜 C++로 개발해야 하나.. 라는 생각이 들 정도였으니까요.
그때부터 C++ standard library와 TR1에 대해서 관심을 가지고, 향후 제정될 C++0x에 대해서도 관심을 가지게 되었고,
표준을 정의하는 사람들의 사상을 어렴풋이나마 이해하게 되었네요.

template meta programming에 대한 관심을 가지고, 실제 프로젝트에 적용을 해서, 좋은 결과를 낸
사례가 있다는 것은 정말 고무적인 일이네요.
분위기가 이렇다 보니까 저도 사실 어렵게 설계해서 제대로 이용도 못하는 것 같아서 회의적이었거든요..
하지만 아직은 상속, 동적바인딩 등을 이용한 design pattern보다는 template을 이용한 design pattern이 훨씬
명확하다고 생각하고 있습니다.

그리고 말씀하신대로 애자일 방법론에 대해서도 관심을 가져야겠다는 생각이 드네요.
욕심이 큰 것 같지만, 다양한 개발방법론을 모두 섭렵하고 어떤 모습이 좋을 지 판단하고 싶거든요..
큰 도움이 되었습니다. 정말 감사합니다~
_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

imyejin의 이미지

일단 팀원들이나 공동작업하는 분들이 C++ 표준라이브러리 및 부스트 라이브러리에 맛들이게 해놓아야 합니다.

그리고 구 버전의 컴파일러에서도 C++ 표준의 모든 기능을 이용할 수 있게 해주는 Comeau C++ Compiler 넘이 있습니다. http://www.comeaucomputing.com/ 그러니까 C 컴파일러만 있는 경우에도 C++을 C로 변환해서 컴파일을 해줄 수 있으므로 포팅에도 뛰어난 것으로 알고 있습니다. 가격은 그렇게 비싸진 않습니다.


임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

nineye의 이미지


그렇게 설득하는 것이 힘들더라구요...
저 자신도 template에 대해서 잘 몰랐을 때는 boost library가 먼나라 소스처럼 보였으니까요.
사실 대부분의 개발자들은 좋은 설계 vs 일정 단축 사이에서는 일정 단축이 대부분 좋은 평가를
받는다는 것을 알기때문에 설득할 근거도 부족하네요.

그리고 comeau computing 상당히 괜찮아 보이네요..
컴파일러에 오류가 없고 지원해주는 라이브러리의 성능이 좋다면 정말 환상적일 것 같다는...
저도 여러 개발 환경(windows, winCE, linux, embedded linux 등)에서 동작하는
소스를 라이브러리화 하다보니 하나의 모듈을 만드는데도 시간이 많이 걸리는 것 같고,
컴파일러 버전에 따라서 지원해 주지 않는 문법들을 맞추려고 삽질을 많이 하는데,
그런것들을 한방에 해결해 줄 수 있다면 정말 지상낙원이 따로 없겠네요...ㅋ

답변 주셔서 감사합니다~
_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

imyejin의 이미지

C++ 표준라이브러리 내부구조는 몰라도 사용하는 것만이라도 어느 정도 익숙한 개발자라면 부스트에 있는 기능이면 부스트 쓰는 게 개발 일정이 훨씬 단축될 거라는 방향으로 설득해서 조금씩 바꿔나가는 게 좋겠죠.

적어도 동적 할당하는 가변 길이 배열을 직접 만들어 쓰는 것 보다는 vector를 쓰는 것 정도는 아마 한번만 써보면 다들 좋아라 할 겁니다. 일단 동적 할당하는 배열을 vector로 갈아엎는 것부터 시작하시는 게 첫걸음이겠죠. 이건 뭐 크게 많이 바꿀 것도 없을거고요.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

nineye의 이미지


넵...
그런데 boost 라이브러리는 너무 무거워서...
이전에 리눅스에서 서버 개발할 때, boost의 thread pool을 적용하려고 했다가,
thread pool을 이용하기 위해서 include시켜야 하는 소스가 너무 많아서 포기하고
직접 만든 경우도 있어요.

그리고 참 아이러니 한 것이, STL은 대부분 좋아하면서 template은 싫어하더라는...
제가 처음 회사에 입사했을 때도, 신입사원 교육 과정에서 배운 것이 STL이었는데..
template은 "사용"과 "구현"이 정말 분리되어 있는 것 같네요.

_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

winner의 이미지

http://kldp.org/node/26159#comment-455792

imyejin씨의 답글이 정답.

비슷한 이야기가 많지요.

맘에 드는 editor가 없어서 하나 개발하는 와중에 기존 editor가 익숙해져 버렸다. -_-.
맘에 드는 언어가 없어서 하나 개발하는 와중에 기존 언어를 더 잘 이해하고 활용하게 되었다. ^_^

다 마찬가지지요.
Template metaprogramming의 metaprogramming은 비록 C++를 기술을 사용한다는 선에서 기존 기술을 쓰는 것이지만 확실히 새로운 paradigm이라고 해도 좋을만큼 열린 사고가 아닌 이상 받아들이기가 어렵습니다. nineye님은 그걸 받아들여도 좋을만큼 대단히 큰 욕구와 갈증이 있었던 것 같고요.

원글에서 C++ 객체 기술이 내부에 숨기는 것이 많아 bug 발생을 높인다는 거나 template metaprogramming의 이해하기 어려움이나 마찬가지라고 생각해요. 다른 답글에서 썼듯이 다만 그것이 compile time이냐 runtime이냐의 차이이지요.

C++ 객체기술도 마찬가지일 듯... 잘 설계된 class는 사용하기 편하고, 성능도 좋지만 그런 class(성능과 사용성을 둘 다 만족하는) 만들려면 온갖 삽질을 다 해야지요.

물론 C++ 객체기술이 template metaprogramming과 동등하다거나 대체가능하다는 것은 아닙니다. 둘 다 사용해야 할 위치가 다르지요. 다만 동일한 시점에서 이해할 수 있을 것 같기는 합니다.

교육을 할 때 '사용'에서 '구현'으로 가는 과정도 좋지만 '유사 구현'(예를 들어 runtime 유연성을 위한 class 작성)에서 '구현'(여기서는 template metaprogramming용 단위전략 class)로 넘어가는 것도 생각해볼 수 있을 것 같아요.
확실히 runtime 유연성을 위한 class 작성은 많이들 해봤을테니까요. 다만 이렇게 만들어진 교육교재는 못봤으니 누군가 삽질을 해서 만들어야 할 듯.

타협이란 이런 것... ^_^.

결국 하나하나 하면서 조금씩 해나가는 것일 겁니다. 그러다보면 어느샌가 완성되어 있을지도...

winner의 이미지

개인적인 programming을 변화시키는 것보다 어려운 것이 team을 변화시키는 것이라고 생각합니다.

자신의 programming style을 변화시키는 것은 개인적인 성취욕을 위한 것이기 때문에 개인시간을 들여서도 공부할 수 있지요. 그리고 그것이 team의 성공에 기여한다면 정말 좋은 것일테고요. 하지만 전체 team들은 그렇지 않습니다. Programming에 인생을 다 걸고 싶지 않은 사람도 많죠. 우리나라에서는 경력이 쌓이면 관리하고 싶다는 분들이 많으니까요. 물론 programming 기술을 자신의 인생에서 중요하게 생각하는 사람들은 설득하기가 어렵지 않을겁니다.
자신의 위치에서 적절하게 행동하는 것이 최선이라고 생각합니다. 자신이 team의 의사결정에 크게 영향을 미치는 중요한 위치에 가는 것도 방법이고요. 아니면 그런 위치의 사람을 설득하는 것도 방법입니다.
회사업무시간에 세미나를 연다거나 공부를 지원하는 것이 회사전체의 이익을 위해 도움이 될 수 있다는 판단이 든다면 그런 방법을 가져가는 것도 좋죠.

저는 template metaprogramming을 제대로 써본 적은 없습니다만 한방에 모든 것이 해결되는 그런 것은 없다고 생각합니다. 말씀하신 문제점도 있고요. Metaprogramming은 커녕 당장 STL만 써도 compile time이 죽죽 늘어납니다. C++ 차기 표준의 concept이 도입되기 전까지는 compile error message의 압박이 원천적으로 해결되지도 않을 것 같고요. auto가 타입추론으로 도입되기 전까지는 type 명세하는 것도 짜증나는 압박입니다. 저는 항상 code bloat 문제가 신경쓰였는데 요새 compiler들은 알아서 이부분을 해결해주기도 한다고 듣기는 했습니다.

OOP를 runtime mechanism으로 제한하지 않고, 객체라는 사상적인 관점으로 이해한다면 그게 나쁜 거라고 보기는 어렵다고 생각합니다. 관점의 차이일 뿐이지요. 당장 함수객체만 보더라도 이걸 함수로 이해할까요, 객체로 이해할까요. Design Pattern이 OOP의 중요항목들을 나열한 것인데 이것이 기존의 runtime mechnism OOP에서도 쓰이고, template metaprogramming에서도 적용될 수 있다는 것을 보더라도 OOP라는 것이 그 용어가 나타내는 기술이 원천적으로 잘못된 것은 아니라고 봅니다.

원글에서 말씀하신 C++ 객체지향기술들의 단점들은 장점에서 오는 단점이지요. 그래서 OOP를 goto 없이 스파게티 코드를 작성할 수 있는 기법이라고도 하고요. 말씀하신 것 중 C++ 객체기술이 플랫폼 독립적으로 적용이 어렵다는 것은 제가 생각하기에 compile time에 문제점들을 최대한 제거하기 어렵다는 말로 보입니다. Template metaprogramming도 장점이 있듯 많은 단점이 있지요. 말씀하신 것처럼 compiler 기술이 중요하기 때문에 compiler에 따라 독립적이지 못하다는 문제점도 있고요 ^_^. Compile time에 많은 문제점을 찾을 수 있지만 error message 해석이 어렵다는 문제도 있습니다. 그럼에도 nineye님이 마음에 드신 것은 개발 platform이 template metaprogramming에 꽤 적합한 형태라고 생각됩니다.

설득하실 때 이런 항목을 드시면 좋을 것 같네요.

1. 우리들의 개발 platform 들은 Binary 호환이 보장되지 않는다. 하지만 C++ compiler들은 template metaprogramming을 할 수 있을만큼 훌륭하다.
2. 우리들은 높은 성능과 작은 양의 memory 사용이 필요하다.
3. Program update 때 작은 module만을 update하는 것이 개발효율에 큰 장점이 되지 않는다. 그보다는 module간의 긴밀한 통합이 보장되는지 확인할 수 있는 것이 중요하고, template metaprogramming이 이를 보장한다.

당장 생각나는 것은 이정도인데 다 기술적인 내용이고요 맞는지는 모르겠네요. 정치적인 문제, 관리적인 문제까지 들면 잘 모르겠네요. 기술을 보유한 개발자를 끌어들이는 것도 방법인데 그러기 위해서는 비용절감을 위해 기존 개발자를 내쳐야되는 과정이 발생할 수도 있습니다. 업무에 대해서 이해를 많이 하고 있는 것이 기존 개발자일테니 실력 upgrade를 지원하고, 안된다면 내쳐야 할 수도 있겠지요.

이도 저도 안되고, nineye님이 훌륭한 기술을 가지고 계시고, 더욱 도전정신이 있다면 아예 떠나서 다른 회사가는 것도 하나의 방법입니다. 하지만 말씀하신 마지막에 타협을 생각하고 계시는 것을 보니 거기까지는 생각하지 않으시는 것 같네요.

nineye의 이미지


답변 감사합니다~
현업 프로그래머가 아니라고는 하시지만 현업 프로그래머 이상으로 많이 알고 계신 듯 하네요.. ㅎㅎ

제가 글 솜씨가 좀 부족해서, 첫 글에서 명확하게 표현하지 못한 제 생각을 몇 개 정리해 드리면,
객체지향의 개념 자체는 winner님처럼 정말 좋은 설계의 개념이라고 생각합니다.
어차피 template meta programming에서의 단위전략과 비슷한 의미이니...
단지, C++이 포함하고 있는 virtual, dynamic binding, 상속의 기술들이 실행 시간의 프로그램 복잡도와
부하를 증가시켜서 좋지 않게 생각한다는 것이었습니다.
그리고 플랫폼 독립적으로 적용하기 어렵다는 말은, 객체 기술에 대한 내용이 아니라, C++을 버리고, 어셈으로
갔을 때의 문제점이었습니다.
위 부분은 명확히 표현하지 못해, 혼동을 드려서 죄송합니다.

winner님의 의견도 도움 많이 되었습니다.
문제는 역시 개발자 개인이 어떻게 생각하느냐와.. 결정을 내리는 관리자의 마인드의 문제가 크겠네요...
결과나 과정이 명확한 문제에 대해서는 정확하게 그렇다!라고 주장할수는 있지만,
명확하지 않은 문제에 대해서는 주장을 하기가 쉽진 않네요.

그리고 저 아직 타협하려는 것 아닙니다.. 나름, 제가 가진 생각이 옳다고 판단되면 쉽게 포기하지 않기 때문에...ㅋ
이 글을 올린 이유는 타협도 아니고, 불만 표출도 아닙니다.
단지, 제 자신의 고집때문에, 제 스스로 옳지 않은 것도 혹시 옳다고 정당화 시킬까봐,
다양한 사람들의 의견을 듣고 객관적으로 판단해 보려는 시도에서 였습니다.
아직은 기술만을 중요시하는 개발자이고 싶네요...ㅎㅎ

답변 감사드립니다~

_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

winner의 이미지

다시 읽어보고 글을 썼는데도 완전히 잘못된 실수가 있었네요. 말씀하신 플랫폼 독립에 대한 것은 nineye님 잘못이 아닙니다. 완전히 제 실수지요. 제 글의 관련이 있는 모든 부분들은 적절히 걸러서 해석해주실 것을 믿습니다.

저는 대학원 졸업하고, 놀고 있는 고학력백수랍니다. 몸이 안 좋아져서 좀 쉬다가 최근에야 직장을 구하려고 하고 있죠. 현업 programmer가 아니라니까 그쪽 일 관두고 다른 일 하는, 예를 들어 관리자,로 착각하실지 모르겠는데 예비 programmer라는 말이 정확하겠네요. 사실 제가 말도 안 통하는 꼴통이었는데 대학원 과정동안 배운 것이 사람 간의 의사소통이 얼마나 중요한 것인가, 그리고 세상과 자신의 현실에 대해서 파악하는 것이 얼마나 중요한 것인가랍니다. 대학원 과정과 전혀 상관없는 것만 배운 셈이지요. 그만큼 다른 사람 고생도 시켰고요. -_-.

Blog에 들어가봤습니다. 흥미로운 글들이 많더군요. 아직 예비인 저로서는 이해하기 어려운 글들도 많고요. 저야말로 덕분에 도움이 많이 될 거 같습니다.

nineye의 이미지

예비 프로그래머 치고는 상당히 많이 알고계시네요..ㅎ 분위기는 꼭 프로그래머 졸업한 관리자 같았다는...ㅋ
저도 글쓸때는 실수를 많이 하기 때문에 약간의 지적은 이해를 해주셨으면 좋겠네요..
상대방이랑 대화할 때는 어느 한 지점에서 꼬이기 시작하면, 그 이후의 대화부터는
서로가 이해하지 못하는 자기만의 이야기를 하는 경우가 대부분이라..
이상한 부분은 짚고 넘어가야하는 주의라.. 가끔 딱딱하다는 지적을 받기도 합니다..ㅋ

제 블로그에 들려주셔서 감사합니다. 자주 포스팅 하려고 했는데 요즘 좀 바빠서 신경을 많이 못쓰네요..
블로그에 올린 글은 대부분 제가 지금까지 일하면서 생각한 것들을 쓴 것입니다.
혹시 이상한 부분 있으면 지적도 해주세요. 제가 블로그를 만들게 된 큰 동기중의 하나가,
제가 생각하는 것들이 옳은 것인가 평가하는 의미도 포함되어 있거든요.

winner님께서 원하시는 직장에 들어갈 수 있기를 기원할게요~
_________________________________________________________

nineye's blog

_________________________________________________________

nineye's blog

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.