고작 2년의 실무경력을 가진 내가 이런말을 한다면 어처구니 없다고들 이야기 할수 있겠지만, 일단 내 블로그이니 내 맘대로 글을 써보겠다. 그리고 의견이 있으면 자신있게 댓글을 달아주시면 좋겠다.
일이 즐거운 사람이 성공할 가능성이 많다고 한다.
그리고 일이 즐거우려면 그 일에 부여할수 있는 가치가 있어야 한다. 그게 먹고 살기위한 가치가 아니라, 이 일을 함으로서 미래에 내가 뭐가 달라질것이냐 이다. 그런 무형의 그렇지만, 정말 고부가의 일을 찾기위해서 많은 사람들이 부단히 노력하고 있다.
프로그래밍이라면 다 좋았던 시절이 있었다. (물론 지금은 열렬히 사랑하는 중이다. 앞으로도 그럴것이다.)
짧은 경력이지만, 초등학교시절부터 게임 / GUI / 웹 프로그래밍 / 시스템 프로그래밍 / 어플리케이션 프로그래밍 까지 안해본것들이 없다. 물론 지금 다 할줄 안다는건 아니다. 시간도 많이 흘렀고 기술도 변하고 그랬으니.
Delphi, .net, Java 등 많은 구현 기술이 있다. 한때 나는 이 구현기술을 얼마나 많이 아느냐가 가장 중요한것인줄 알았다. UI를 wxPython을로 구현할까, 스윙으로 구현할까 아니면 MFC로 구현할까 … 하는 것에 각각 어느것을 얼마나 많이 아는것이 프로그래머로서 가장 중요한 항목인것으로 알았다. 물론 좋다. 이력서에서 적어도 한줄은 들어갈것이니…
하지만 일을 하면서 알았다. 그 구현환경이라는것은 그리 중요한것이 아니라는것을…. 그리고 언어(Language)라는것도 하나의 구현환경중에 하나라는것을 말이다. 언어라는것은 없어질수도 있고, 하루아침에 윈도우라는것도 없어질 수도 있다. 그렇게되면 MFC를 아는게 어떤 도움이 될것인가?
난 지금도 생각한다. MFC 함수 몇개를 외울 시간이 있으면, 차라리 MFC의 구조를 분석해서 아키텍트에 대해서 알아보든지, 아니면 운영체제나, AI쪽을 공부하라고 말이다. 차라리 이런공부를 하게되면 어떤 특별한 알고리즘을 고완 고안할때 생각의 폭 자체가 넓어진것을 알수있을것이다. 또한 문제점이 생겼을때 똑똑한 대처방안을 고완고안할수 있다.
이런 ‘변하지 않는 핵심’을 잡는 감(Feel)이라는것은 하루아침에 생기는게 아니다. 부단히 연구하고 공부함으로써 그런 느낌을 받을수 있다고 본다. 물론 나도 이제 그 감(Feel)이라는것이 무엇인지 알게 되었다. 무엇보다도 빨리 이 감을 획득할수 있었던게 무작정 프로그래밍을 해왔고, 그에대한 경험이 밑받침 되었다는데에 부정하지 않는다. 하지만 항상 그런 느낌을 얻으려고 부단히 공부하고 여러 고수들에게 조언을 구함을 게을리 하지 않았다.
위에서 이야기한 일에 부여할수 있는 가치는 자신이 올바르게 방향을 잡을수 있을때 생겨날수 있다. 막연히 보안쪽으로 하고 싶다는것도 역시 좋다. 하지만 보안 회사에 일한다고 해서 반드시 핵심을 잡고 일하는것이 아니다. 자신이 핵심을 잡을수 있는 능력이 있다면 계속적으로 어필을 하고 공부하고 또 공부해야한다. 그렇게 하지 않는다면 처음부터 프로그래밍을 그만둘때까지 GUI프로그래밍만 하고 있는 자신을 발견할것이다. 물론 그것에 만족하는 사람이라면 강요는 안하겠지만, 개발자로서 성공하기는 힘들다. GUI가 정말 좋다면, GUI 라이브러리를 만드는 일을 해라. 또한 GUI의 유지보수를 편하게 할수 있는 프레임웍을 고완고안을 하는것도 좋다. 그러면 될것이라 생각된다.
개발일은 내 생각으로는 로우(Low) 레벨로 가면 갈수록 ‘변하지 않는 핵심’이라는 생각이 든다. 그만큼 어렵기도 하지만, 진입하기도 힘들고, 공부도 열심히 해야한다. 진짜 프로그래머(해커)는 이런 핵심 알고리즘을 만드는것을 좋아한다. 한번쓰고 버리는 코드보다는 영속적으로 인간에게 혜택을 줄수 있는 그런 코딩을 하기를 원한다는 것이다.
또한 이런일만을 할수 있는 환경을 스스로 만들어갈 정도로 자신을 외부에 어필을 한다든지 능력을 키우는 작업을 게을리 해서는 안된다. 그렇게 해서 자신이 하고 싶은 일을 하게된 사람은 일을 게을리 할리는 만무하다. 100% 열심히 할것이고 아웃풋도 역시 좋을것이기 때문이다. 그리고 그런 사람은 계속 ‘변하지 않는 핵심’에서 인정받으며 일을 할것이다.
좋은 글 잘 읽었습니다. 🙂
저도 처음 프로그래밍에 맛들리기 시작했을 때는 뭔가 기술렙助低?많이 다룰수록 잘 하는 거라고 생각했는데, 언젠가부터 근본적인 것을 쫓아가다보니 어떤 기술을 접하게 되더라도 어느 정도의 시간만 투자하고 나면 금방금방 익힐 수 있게 되더군요. 5년 정도를 Visual Basic만 가지고 줄기차게 코딩했지만 Win32 API만 써서 C 언어 프로그래밍을 한다든가.. 하나를 깊이 파고 나면 결국 그게 다른 곳에서도 통하더군요. (물론 아직 한참 모자라지요)
특히나 GUI 프로그래밍에 현혹(?)되어서는 안 되는 것 같습니다. 요즘 XHTML, CSS에 맛들이고 있지만 그 바탕에 깔린 게 무엇인지 이해하는 게 중요하겠죠.
헉; 글자가 조금 깨졌군요. 세벌식에서 가운뎃점을 입력한 것 뿐인데.. (euc-kr이라 그런가요-_-)
아, 그리고 확실히 운영체제에 대한 개념을 잡고 하는 프로그래밍이 다른 것 같습니다. 아직 운영체제를 깊이있게 공부해보진 않았지만, “API로 배우는 Windows 구조와 원리”라는 책 하나를 읽고 나니 PC 프로그래밍뿐만 아니라 로봇 MCU 프로그래밍할 때도 도움이 되더군요.
스스로 현재의 위치에서 만족하지 않고 부단한 노력을 하는 사람들은 스스로 그런 모습을 갖게 되는 것 같습니다. 전혀 다른 분야의 사람임에도 불구하고 고수들 끼리는 뭔가 통하는 것이 있는 걸보면 말이죠. 그리고 하루 하루가 갈 수록 점점 기본에 대한 공부가 가장 절실하다는 생각이 듭니다. 알고리즘, 파일구조, 네트웍 등등 ^^;
daybreaker 님 : 맞습니다. 진정한 ‘내공’이 무엇인지 정확히 인지하고 그런 내공을 쌓으려 노력해야죠.
psyblade 님 : 기본과 응용이 적절한 조화를 이룰때가 가장 이상적인것이지 않을까 합니다. 저의 경우는 응용부터 해봐서 왜 기본이 중요한지 절실히 느낄때가 많았습죠.
삽질과정에서 저절로 체득 하는 기본, 기본을 공부한 후 삽질하는 것과 차이가 있습니다. 즉 전자는 쉽게 까먹지만, 후자는 그렇지 않죠. 그건 사람마다 다르겠죠. 아무튼 자신만의 습득 과정을 체계적으로 만드는 게 매우 중요하다고 생각합니다. 단지 아무도 깨닫지 못할뿐이죠.
* 추신 : 고완이라는 말은 고안이 아닐까요?
고감자님. 틀린 맞춤법이 눈에 많이 띄어서 실례를 무릅쓰고 덧붙입니다.
1. “할수 있다” -> “할 수 있다”,
2. “잡을수 있을때” -> “잡을 수 있을 때”
3. “먹고 살기위한 가치가” -> “먹고 살기 위한 가치가”
4. “구현 기술이 있다. 한때 나는 이 구현기술을 얼마나 많이 아느냐가 가장 중요한것인줄 알았다. ” -> “구현 기술이 있다. 한때 나는 이 구현 기술을 얼마나 많이 아느냐가 가장 중요한 것인 줄 알았다.”
5. “wxPython을로” -> “wxPython로 또는 wxPython으로”
6. “어느것을” -> “어느 것을”, “될것을”-> “될 것을”
실제로 많은 분들이 “~수”, “~것”에 대한 맞춤법이 자주 틀리곤 합니다. 저도 마찬가지죠.
그럼 즐거운 주말 되시길.. ^^;
conv2 님 : 진짜…. 허극..~~~~ 이제 맞춤법에 신경을 진짜 써야될거 같습니다. 맞춤법을 잘 하면 각종 검색엔진에서 검색결과도 정말 잘 나올꺼라는 생각은 하는데. 매번 생각뿐입니다. 반성해야겠습니다.