Friday, February 10, 2012
Retabbed
Login | Register
아티클
  Search
프로그래머의 의식 확장에 대한 소고
프로그래머의 의식 확장에 대한 소고

  모든 프로그래머들의 일반적 꿈은 능숙한 실력의 프로그래머가 되어 많은 일을 단 시간 내에 해결해서 많은 돈과 명예를 얻는데 있다고 할 수 있습니다. 하지만 이를 성취한 프로그래머는 실제 현업에서 일하는 프로그래머들 중에서 손으로 꼽을 정도에 지나지 않습니다. 대부분의 프로그래머들은 그냥 그런 정도의 보수를 받고 그런 정도의 대우를 받을 뿐입니다. 그것이 고뇐 노동의 대가를 통해서 얻을 수 있는 오늘날 우리 IT 업계의 현실적인 물질적 보상이라 할 수 있습니다. 그러나 많은 프로그래머들은 더 나은 금전적 보수와 보다 높은 명예적 대우를 얻기 위해 부단히 노력합니다. 하지만 이제 프로그래머들의 눈도 밝아지고 지혜도 늘어나서 단순한 노가다적인 코딩만이 프로그래머 삶의 전부가 아니며 그를 통해서 얻어지는 물질적 행복만이 전부가 아님을 알게 되었습니다. 이제 많은 프로그래머들이 고수 프로그래머가 되기 위해 필사적으로 노력합니다. 그것은 바로 필자와 같이 고수 프로그래머는 못되더라도 항상 프로그래밍이라는 일에 만족하고 그 속에서 즐거움을 찾아 부와 명예 이상의 즐거움을 얻는 프로그래머가 되기 위해서입니다. 고수 프로그래머는 어떠한 역경에도 불구하고 일을 사랑할 줄 아는 마인드를 가진 사람입니다. 만약 자신의 일에 열정과 애정을 가지지 못한다면 정령 고수 프로그래머라고 말하기 어렵다고 저는 봅니다. 거듭 말씀드리자면 일에 만족하고 일에서 즐거움을 찾지 못하면 진실된 고수 프로그래머라고 말하기 어렵습니다. 세상에는 각양각색의 사람들이 있고 그러한 사람들 중에서 또 다시 다종다양의 프로그래머들이 있습니다. 그러므로 프로그래머가 어떤 선택을 하는 것이 최선의 선택을 하는 것인지 정확하게 안다는 것은 미지수입니다. 하지만, 물질적 복락이라는 것은 끝이 없는 욕망을 부추기는 것이 자연스러운 현상입니다. 이것을 갖고 싶어 하게 되어 이것을 얻게 되면, 다시 저것을 얻고자 하고 저것을 얻게 되면 그것을 갖고 싶어 하게 되는 것이 물질적 욕망의 속성이라고 생각합니다. 프로그래머의 꿈이자 비전은 이러한 물질적 복락에 한정되어서는 안 됩니다. 고수 프로그래머는 꿈과 이상 그리고 비전을 보다 정신적인 측면에 추구합니다. 그것은 예로부터 학문에 달통하고 수행에 정통했던 많은 성현들의 가르침 속에서 배울 수 있습니다.

  고대의 성현들의 가르침이나 동서양 현자들의 가르침을 살펴보면 부와 명예보다는 책이나 일 속에서 삼매에 들어가거나 물아일체가 되는 것 혹은 마음자리를 깨우쳐 세상을 달관하는 깨달음의 경지에 이르는 것을 궁극의 즐거움이요 목표로 삼았습니다. 어떤 일에 몰두하거나 몰입한다는 것은 그 자체로서 경이로운 것이며 아름다운 것이라고 전해 왔습니다. 프로그래머가 돈이나 명예를 바라고 일한다는 것 자체가 나쁘다고 할 수는 없지만 과정이 결과보다 더 중시된다고 할 때 더 보람차자다고 생각합니다. 물론, 프로그래머들마다 결과를 꿈꾸면서 과정에 충실해 나가는 사람들도 있으며 결과를 중시하는 오늘날의 프로젝트 수행 관행 때문에 프로그래머들마저도 결과에 치우치게 되는 경향이 없지 않습니다. 그러나 일에 대한 즐거움과 일에 대한 성취감을 통해서 얻는 희열과 환희심이 프로젝트라는 일의 과정 속에서 모이고 모일 때 결과적으로 프로젝트 완수와 함께 금전적 보수와 명예적 대우를 받게 된다는 것을 우리는 인식해야 할 것입니다. 실제로 과정 자체가 훌륭하면 결국 결과도 올바르게 결실을 맺게 될 것입니다. 그러나 결과에만 매달리고 결과에만 집착하게 되면 과정 자체가 부실해 질 수 있습니다. 부단한 노력과 끊임없는 탐구정신 그리고 실험과 관찰이라는 과학적 성찰을 통해서 프로그래밍을 해 나갈 때 그 과정 속에서 일의 보람을 찾고 긍지를 얻을 때 일에 대한 멋을 즐길 수 있게 된다고 봅니다. 따라서 필자는 프로그래머에게 있어서 제 일의 원칙은 바로 일에 대한 즐거움을 찾는데 있다고 봅니다. 일이 즐겁지 못하면 돈이나 명예는 얻기가 어려울뿐더러 오래 지속적으로 획득할 수 있는 것이 못된다고 봅니다. 또한 일이 즐겁지 못하다면 스트레스를 많이 받게 될 것이요 결국 일에 대해서 거부감과 환멸심을 갖게 되고 급기야 건강을 잃게 되기도 할 것입니다.

 


  하지만, 현재의 프로그래머들은 밤샘의 노동을 마다하지 않고 열심히 일하고 있습니다. 사실, 일의 즐거움이라기보다는 고된 노가다의 연속이 프로그래밍입니다. 알고리즘을 중심으로 사유하는 과정과 논리적인 차원에서 버그를 잡는 데 시간적으로 쫓기어 제대로 된 방식으로 코딩하거나 디버깅할 여유를 갖지 못합니다. 이는 프로그래밍의 고상한 이론과 현실적 상황과의 여실한 괴리감이라고 할 수 있습니다. 필자의 경우도 프로그래밍을 하면서 느꼈던 것은 코딩이나 디버깅을 한 후에도 코딩과 디버깅의 과정에 대한 깊이 있는 사색과 성찰을 놓치는 경우가 많아 배움을 얻는데 부족함을 많이 느꼈습니다. 실제로 일을 하면서 일을 하는 과정 속에서 코딩과 디버깅에 대해서 깊이 있는 사유와 탐구 그리고 성찰을 하는 것이 무척 어렵습니다. 일은 많고 시간은 없으니 코딩이나 디버깅하면서 깊이 있는 사색과 성찰을 무시하고 그냥 무의식적이고 감각적으로 코딩하고 디버깅하는 일이 비일비재합니다. 이렇게 일을 많이 하면 자연히 실력이 늘어날 것 같은데, 사실 그렇지 않습니다. 자신이 시행 착오한 경험과 새로운 팁(Tip)의 발견 등을 자세히 정리하여 보관해 두어 그것을 나중에 필요할 때 참고하거나 시간 나는 대로 자꾸 반복적으로 암기하여 내면에 체계화시키는 것이 무엇보다 중요합니다. 또한 일의 무게에 지치거나 시간이 없을 때에는 깊이 있는 몰입이 불가능합니다. 그리고 문제의식을 깊이 있게 탐구할 시간적 여유가 없기 때문에 코드의 미학이나 코드의 체계에 대해서 많은 신경을 쓰지 못하고 스파게티 형태의 코드를 작성하게 되는 경우도 발생합니다. 따라서 고수 프로그래머가 아닌 이상 시간적 여유가 적고 일이 많을 경우에는 힘이  드는 것이 사실입니다.

 


  이런 악조건 하에서 일하게 되면 무엇보다도 한 단계 한 단계 점진적으로 일을 마무리 해나가는 것이 필요합니다. 자신에게 가장 쉬워 보이는 부분부터 정복해 나가면 조금이나마 진전을 맛볼 수 있고 그럼으로써 일에 대한 자신감을 가질 수 있습니다. 처음부터 어려운 내용을 코딩하거나 디버깅하기 보다는 주어진 일들 중에서 쉬워 보이는 부분을 먼저 코딩하고 디버깅하는 것이 보다 수월하다고 할 수 있습니다. 예를 들어, 오늘 하루 10 개의 윈도우를 프로그래밍해야할 경우, 그 10 개의 윈도우 코딩 중에서 가장 쉬운 것부터 차례대로 해 나가는 것이 필요합니다. 고수 프로그래머가 되는 길은 어려운 코딩을 많이 하는 것에 있다고 생각하지 않습니다. 고수 프로그래머는 쉬운 코딩을 정말 쉽게 작성할 수 있는 법부터 배웁니다. 그리고 이러한 경험을 통해서 어려운 코딩을 할 경우에도 쉽게 코딩하는 방법을 알게 됩니다. 쉬운 코딩을 많이 다양하게 경험해 보는 것이 고수 프로그래머로 가는 길들 중의 하나라고 저는 생각합니다. 그리고 필자의 졸고 “C 프로그래밍의 기초 및 학습론”에서 이야기한 것처럼 쉬운 코드를 적은 라인에서 많은 라인으로 늘려나가는 법, 즉 코드의 라인수를 증가시켜가면서 내공을 늘리는 것을 배워야 합니다. 쉬운 코딩 속에 존재하는 법칙성과 로직 들을 자세히 해석하고 분해하여 자신의 지식체계를 구축해 나갈 때 프로그래머는 고수 프로그래머로 도약하는 발판을 마련하게 될 것입니다. 물론 일의 불확정성으로 무작위로 프로그래머에게 떨어집니다. 따라서 쉬운 일이 따로 있고 어려운 일이 따로 있어 그것을 구별해야할 시간이 부족합니다. 어떻게 해서든 버그 없이 돌아가는 프로그램을 작성해야 한다는 것이 프로그래머에게 있어서 힘든 관건입니다.

  하지만, 일의 흐름을 잘 목도해 보면 그 흐름이라는 것을 통해서 어떤 모종의 법칙성을 발견할 수도 있습니다. 전혀 새로운 일을 하는 경우라고 해도 이전에 자신이 배웠던 지식이 조금이라도 있을 것이며 그것을 토대로 지식을 확장해 나가도록 노력해야 합니다. 지식이란 현재의 의식과 과거에 알았던 무의식적 사유와의 교류를 통해서 증대되는 것이라 생각합니다. 그리고 모르는 것이 있으면 주위사람에게, 특히 사수나 직장 선배들에게 물어보는 것이 필요합니다. 프로젝트라는 것은 프로젝트 요원들의 정신의 합일을 의미합니다. 서로의 열정과 노력 그리고 경험들이 하나로 아우러져서 프로그램이 완성되고 프로젝트가 성취되는 것입니다. 자신 혼자서 모든 것을 할 수 있는 시대는 이제 사라졌습니다. 팀웍이 중요합니다. 그러기 위해서는 서로 허심탄회하게 모르는 부분에 대해서 이야기를 나누고 정확하고 필요한 정보를 서로 교환하는 것이 요구됩니다. 물론 어려움이 많다고 포기하거나 지나치게 많은 것을 선임자들에게 물어보는 것도 도리가 아닙니다. 따라서 집에서 휴일이나 쉬는 시간에 책을 잘 들여다보고 기술력 함양에 힘을 쏟아야 할 것입니다. 그리고 메모하는 습관을 키워서 항상 한 번 질문했던 것은 또다시 질문하지 않도록 해두어야 합니다. 선임자를 너무 괴롭히고 사수에게 너무 의존하게 되면 결국 발전도 빨리 이루기 어렵습니다. 어느 정도 스스로 고민하고 고뇌하고 연구하고 탐구하는 그 과정 속에서 실력이 늘어남을 잊지 말아야 할 것입니다. 혼돈이 있어야 질서가 정립되는 것처럼 머릿 속에서 고민을 해봐야 프로그래밍의 미학과 정수(精髓)를 익힐 수 있습니다.

 


  한편, 사람에게 있어서 건강만큼 중요한 것이 없습니다. 건강은 일의 원동력이요 시발점입니다. 건강해야 만사를 이룰 수 있고 천하를 이해하고 배울 수 있고 경험하고 즐길 수 있다고 말합니다. 건강에는 몸의 건강이 있고 마음의 건강이 있습니다. 몸이 건강하기 위해서는 운동을 열심히 하고 영양가 있는 음식을 골고루 섭취해야 할 것입니다. 그리고 마음의 건강을 위해서는 스트레스를 받지 않도록 노력하고 항상 남을 원망하거나 남을 무시, 시기, 질투하기 보다는 내면을 응시하여 마음을 조용하고 고요하게 가라앉히도록 하는 것이 필요합니다. 또한 21세기의 위대한 심리학자 켄 윌버의 말대로 사람들 간에“무경계(無境界:No Boundary)”를 얻는 것이 필요합니다. 즉, 조직내에서 갈등과 저항을 없애고 자신의 내부에 존재하는 부정적 에너지를 몰아내려면 사람들 간에 경계를 설정해서는 안됩니다. 모든 것이 자신의 문제이며 자신의 내면과 마음을 성찰하여 자신을 반성하는 것이 중요합니다.  프로그래머는 정작 프로그램에서 버그가 발생할 때 왜 버그가 발생했을까? 무엇이 잘못되었을까? 내가 작성한 프로그램의 논리적 결함이 무엇일까? 등등 다양한 성찰을 합니다. 하지만, 실세계의 문제에 대해서는 프로그래밍 시에 했던 것과 같은 깊이 있는 성찰에 따라가지 못하는 듯 합니다. 그래서 회사의 잘못이 눈에 잘 드러나고 자신의 문제보다는 남의 문제가 크게 보여 지곤 합니다. 직장 동료 들간에 시기와 질투 그리고 불화와 갈등이 야기되는 것은 모두 자신의 한계이고 자신이 그들에게 무엇인가 부정적인 시각을 갖고 있음을 뜻합니다. 따라서 건강한 프로그래머가 되기 위해서는 자신의 내면적 문제를 정확하게 진단할 수 있어야 합니다. 그 후 남을 돌아보고 남의 이야기를 들을 수 있어야 합니다. 붓다께서 설파하신 바르게 보고, 바르게 생각하고 바르게 말하고 바르게 행동하는 것이 중요합니다. 물론 이러한 가르침이 어떤 틀에 박힌 정형화된 가르침이라고 식상해 할지 모르지만 이러한 가르침들이 일반 건강한 어린아이에게도 찾아 볼 수 있는 마음이라는 것을 우리는 알 필요가 있습니다.

 


  서양의 성현 예수께서 설파하신대로 우리는 어린아이와 같은 마음을 가질 필요가 있습니다. 특히, 프로그래머는 순수해야 합니다. 결함이 없는 코드라는 것은 무결한 코드를 의미하고 인간의 영혼에 비유하면 순결한 코드를 의미합니다. 물론 100% 순결한 코드란 존재하지 않을 수 있습니다. 중요한 것은 완전무결함에 있는 것이 아니라 온전함에 있다는 가르침에 귀를 기울일 필요가 있습니다. 이 말은 프로그램에 버그가 존재하더라도 쓸만한 프로그램이 되어야 한다는 것입니다. 즉, 치명적이지 않은 버그라면 한두 개 또는 그 이상 존재한다고 해서 그리 크게 문제가 될 것은 없습니다. 건강하다는 것은 결국 순수하다는 것이요 건강한 프로그래머가 건강한 프로그램을 제작할 수 있습니다. 따라서 프로그래머에게 있어서 심신(心身)의 건강이 무엇보다 중요하다고 할 수 있습니다.

  프로그래머는 끊임없이 성찰해야 하기 때문에 항상 배워야 합니다. 그리고 배움을 위해서는 심혼을 기울여야 하고 그럼으로써 신체의 생명 에너지와 마음의 정신 에너지를 많이 소비하게 됩니다. 하지만, 배우지 않는 프로그래머는 도태되게 되어 있습니다. 이는 프로그래머 세계에서 낙오된다는 것을 의미합니다. 다시 말해서, 더 이상 프로그래머의 삶을 지속할 수 없게 된다는 뜻을 포함합니다. 세상사를 살아가는데 있어서도 끊임없는 배움이 중요합니다. 배우지 않고서는 세상을 이해하고 살아가는데 많은 어려움과 애로사항을 경험하게 될 것입니다. 프로그래머는 시대의 흐름과 기술의 흐름에 크게 영향을 받기 때문에 변화에 적응하는 법도 배워야할 것입니다. 변화에 적응하지 못하면 힘들어지고 마음과 몸이 피폐해지기 쉽습니다. 왜냐하면 외부에서는 자신이 변화하도록 스트레스를 가중시키기 때문입니다. 우주의 법칙 자체가 변화한다는 것이며 고정된 것이라는 것은 없다는 진리(Truth)가 있습니다. 세상은 변화하고 사사물물 또한 변화하며 우리 자신도 변화합니다. 따라서 프로그래머는 세상의 변화에 기민해야하고 적극적으로 대처할 수 있어야 합니다.

 


또한 진실된 고수 프로그래머의 길은 어정쩡한 고수가 되지 않는 것입니다. 자신만이 고수 프로그래머고 다른 사람들은 어정쩡한 고수 프로그래머라고 생각하고 있다면 그 자신이 정말 진정한 고수 프로그래머인가 우리는 의심을 품게 됩니다. 고수 프로그래머는 겸손합니다. 고수 프로그래머가 남에게 지식을 나누어 주는 것은 자신이 잘났다고 나누어 주는 게 아니라 중수 프로그래머나 하수 프로그래머에게 자신의 것을 나눔으로써 끊임없이 자신을 비우도록 하는데 있습니다. 자신의 지식을 비우고 마음을 비움으로써 고수는 겸허하게 됩니다. 겸허한 것이 고수 프로그래머의 최고의 미덕들 중의 하나입니다. 하지만 무작정 겸허하기만 해서도 안 됩니다. 공자님 말씀대로 중용이 중요합니다. 올바른 명예와 함께 겸허함이 공존해야 합니다. 어느 한 쪽에 치우쳐서는 중용이 깨지게 됩니다. 고수 프로그래머는 명예를 지킬 줄 압니다. 그리고 자신의 것을 나누어줌으로써 자신을 비울 수 있는 지혜로움을 갖추기도 합니다. 어정쩡한 고수는 자신의 것을 나누면서도 자신이 최고라고 생각합니다. 자부심은 좋은 것입니다. 하지만 그것이 남에게 상처가 되고 남에게 정신적 피해를 준다면 그것은 올바르다고 할 수 없습니다. 불가(佛家)에서는 머무름 없이 마음을 내라고 하였습니다. 어디에 집착을 하거나 명예를 추구하기 위해서 프로그래밍 지식을 나누어주는 것은 올바르다고 할 수 없습니다. 무위적인 자세가 필요합니다. 그것은 겸허함과 올바른 명예를 제대로 알 때 비로소 얻어질 수 있는 것이라 생각합니다. 

  프로그래머가 내공을 늘리건 지식을 늘리건 지혜를 늘리건 결국은 의식을 확장시켜 나감으로써 고수가 된다는 점을 상기할 필요가 있습니다. 앞서 언급한 필자의 모든 내용은 프로그래머들이 생각해 보아야할 점을 지적해 본 것이며 고착화된 프로그래머들의 타성에서 벗어날 것을 내포하고 있습니다. 프로그래머들의 타성이란 결국 귀차니즘 으로부터의 탈피를 의미하기도 합니다. 프로그래머에게 있어서 일에 대한 즐거움도 중요하고 일에 대한 자신감도 중요하고 올바른 명예도 중요하고 겸허한 것도 중요한데 실제로 중요한 것은 근면한 것입니다. 부지런해야 합니다. 프로그래머가 부지런하다는 것은 일의 변화와 요구사항의 변화 등 시시각각으로 변화하고 일어나는 사건들과 상황 속에서 긴밀하게 대응하고 대처해 나가는 것을 의미합니다. 고치기 싫은 버그에 대해서도 성실하게 임하는 자세가 필요합니다. 그리고 부단히 정진하는 노력을 의미하기도 합니다. 나는 프로그래머이므로 코딩하고 디버깅만 하면 된다라는 타성에서 벗어나야 합니다. 프로그래머는 프로그래밍하는 기계가 아닙니다. 코딩과 디버깅 속에서의 성찰을 통해서 의식을 확장하여 삶 속에서 자신이 어떤 삶으로 프로그래밍 되었는지 꿰뚫어 볼 수 있어야 합니다. 코드의 흐름은 의식의 흐름이요 삶의 흐름 또한 마음의 흐름이라는 것을 인식할 필요가 있습니다. 혜능 조사께서 말씀하신 것처럼 바람에 휘날리는 깃발은 깃발이 움직이는 것도 아니요 바람이 움직이는 것도 아니며 다만 마음이 움직이는 것이라고 하였습니다. 삶이라는 것은 마음의 흐름 속에서 영위되는 것으로서 고수 프로그래머는 결코 삶에 구속되거나 삶에 의해 흔들리지 않는 견고한 마음의 입지를 구축한 프로그래머입니다. 즉, 프로그래머는 프로그래밍만 공부하면 된다는 타성에서 벗어나야 합니다. 그리고 삶을 자세히 관조하고 응시하며 성찰함으로써 내적 성찰을 도모하고 결국 마음을 밝혀 더 많은 세계를 포용하는 것이 필요합니다.

 


컴퓨터 프로그래밍은 소프트웨어라는 다소 미시적인 세계를 다루는 학문이라고 봅니다. 하지만 여기에 머물지 않고 이 미시세계로서의 프로그래밍 세계를 통해서 거시세계인 삶 자체를 성찰하는 것은 무한한 가치를 지닌다고 봅니다. 그리고 미시세계와 거시세계를 통관하는 마음의 세계를 이해하여 자신의 마음을 성찰하고 사람들의 모습을 통해서 자신의 모습을 거울처럼 비추어 알고 세계가 마음의 반영이라는 것을 인식하는게 중요합니다. 고수 프로그래머가 되기 위해서는 기술력을 쌓는 것 못지않게 마음공부를 통해서 마음을 깨우쳐서 밝고 맑은 정신 속에서 삶을 영위할 줄 알아야 합니다. 프로그래밍은 잘하는데 외골수이고 삶을 엉망으로 살아간다면 이러한 프로그래머는 고수 프로그래머라고 말하기 어렵습니다. 고수 프로그래머에서 '고수-高手'란 프로그래밍에 통달하면서도 동시에 그러한 미시세계의 법칙을 이해함으로서 세상의 법칙도 함께 이해한 프로그래머를 뜻한다고 말해야 하지 않을까 합니다. 고수 프로그래머에서 ‘高手’는 영원히 우리 모든 프로그래머들이 꿈꾸고 추구해야할 이상이자 비전(Vision)입니다. 그 ‘高手’라는 말은 함부로 쓸 수 없는 다소 고결하고 숭고한 표현이기도 합니다. 프로그래머의 완숙한 경지, 즉 마스터(Master)의 경지, 구루(Guru)의 경지에 바로 ‘고수’라는 말을 쓸 수 있습니다. 이 마스터, 구루의 경지는 바로 마음을 확철대오(確徹大悟)한 현자들에게 쓰는 어휘라는 것을 이해한다면 고수 프로그래머의 삶이 어떠해야하는지 우리는 짐작해 볼 수 있습니다. 고수 프로그래머는 의식을 확장하여 프로그래밍뿐만 아니라 모든 삶 속에서 고수적인 면모와 기질을 발휘하여 사람들을 따뜻하게 대해주고 문화(프로그래머에게 있어서는 개발문화)를 진작시키며 후학을 지도하고 배움을 널리 알려주는 매우 인간적이고 훌륭한 인격을 지닌 사람이라고 할 수 있습니다. 아무쪼록 여러분들 모두가 물질적 풍요로움 이상의 즐거움을 누리시길 바라며 항상 문제의식을 지니고 도전하는 자세로 고수 프로그래머라는 이상향을 통해서 정신적 유희와 의식 확장의 여행을 떠나시기를 바랍니다.

감사합니다.

참고문헌) 프로그래머의 길, 신영호 저, 홍릉과학출판사 출판


 


게시일자 Sunday, January 08, 2006 (Archive on Sunday, January 15, 2006)
게시자: 사이트관리자  저자: 신영호
돌아가기

평점:
평가:
평가 올리기

현재평점평균: 3.00
평점: 3
흠.. 저자가 잘못되었군요. ^^; 이 글의 저자는 신영호랍니다.
Terms | Privacy | host
Copyright 2005 Code99.NET
 | 아티클 | 자료실 | 블로그 | Q&A | 관리자에게