사변적 담론은 인간의 의식을 저속하게 하기도 하고 고결하게 만들기도 합니다. 특히, 프로그래머라는 기술직에 있어서 사변적 담론이란 거리가 먼 팔촌의 조카일지 모릅니다. 필자의 글이 다분히 사변적 담론에 그치게 되더라도 그 속에 존재하는 나름대로의 통찰을 얻었으면 합니다. 물론 필자의 사변적 담론 속에는 필자가 경험해 온 프로그래머의 세계가 고스란히 들어 있다는 것을 인식해 주셨으면 합니다.
혹자는 프로그래머라면 기술로서 승부를 해야 하지 인간성으로 승부를 해서는 안 된다고 말합니다. 또한 이는 기술력이 좋은 프로그래머가 결국 인간성이 좋은 프로그래머라는 뜻을 함유하고 있다고 말할 수 있습니다. 사실, 기술력이 좋은 프로그래머는 다양한 프로그래밍 언어와 개발툴을 통해서 전산업계를 선도하고 있으며 전산분야를 이끌어 가는데 있어서 큰 역할을 함은 말할 나위가 없습니다. 따라서 기술력 있는 프로그래머는 많은 보수를 받고 인정을 받는 것이 현실입니다. 만약 자신이 많은 보수와 회사 내에서 인정을 받지 못한다면 자신의 기술력을 의심해 봐야 할 것입니다. 기술력은 생산성과 직결하고 “고결한”버그 없는 프로그램의 완성과도 연관됩니다. 하루에 많은 량의 코드를 버그 없이 생산할 수 있다면 그는 회사에서 중요한 위치를 점하게 될 것입니다. 즉 회사에서의 명예뿐만 아니라 금전적인 측면에서도 좋은 위치를 차지하게 될 것입니다.
하지만 기술력 있는 프로그래머가 인간성이 좋다는 것은 편견으로 보여 지곤 합니다. 그 이유는 기술력만 좋은 사람이 있기 때문입니다. 기술력만 좋은 사람은 자신의 기술력을 자랑하거나 자신만의 노하우를 숨기고 다소 외골수적으로 행동하기 때문입니다. 기술력을 오로지 자신만의 이익을 위해 사용하려는 경향이 많습니다. 또한 많은 사람들과 교류를 하더라도 허심탄회하게 자신의 지식을 공유하거나 나누려고 하지 않고 숨기거나 감추려고 하기 때문에 기술력만 좋은 프로그래머는 인간성이 좋다고 말하기 어렵지 않나 생각해 봅니다. 회사의 입장에서 보면 저작권 문제도 있고 회사의 기술적 자산이기 때문에 이러한 프로그래머가 좋을 수 있습니다. 하지만 음지와 양지에서 지적저작권과 회사의 기밀 유지라는 명분이 있어도 반대로 양지와 음지에서는 지식공유라는 21세기 네트워크 사회의 문화적 흐름이 있다는 것을 명지(明智)해야 할 것입니다.
참고로, 현대의 지식공유 사회와 네트워크 사회 속에서 정보 공유는 필수적이 되었으며 누구나가 자신이 가진 것을 저작권에 위반이 되지 않는 상태에서라면 공유할 수 있게 되어있습니다. 저작권의 근원적 취지도 문화의 발전과 문명의 진화를 위해 못박아 놓은 것이므로 저작권이란 인류 모두가 상호발전을 위해서 문화와 문명을 일구어가기 위한 토대가 되는 것입니다. 즉, 저작권이란 업체들간에 선의의 경쟁을 부추김으로써 문화와 문명 발전의 원동력이라고 보여 지기도 합니다. 따라서 인류의 문화와 문명을 발전시키는데 일조한다면 저작권의 법적인 책임감이 다소 퇴색될 수 있습니다. 즉, 저작권은 자본주의 사회에서 복지사회로 넘어가는 가교 역할을 한다고 봅니다. 서로의 기술적 이권을 내세우는 자본주의 경쟁사회에서 서로의 복지를 위해서 어느 정도 지식은 내밀하게나마 공유하고 서로가 기술 경쟁력을 높이도록 저작권의 취지가 맞추어져야 할 것입니다. 지식공유란 지식을 갈취하거나 지식을 무작위로 도용하여 자신의 것으로 노력 없이 사용하는 것을 의미하지 않습니다. 진실된 지식공유는 서로의 발전과 상호 진화를 위해서 큰 도움이 됩니다. A라는 회사의 프로그래머가 a라는 문제에 막혀있어서 프로그램을 개발할 수 없을 때, B라는 회사의 프로그래머가 a라는 문제를 가르쳐 주고 다시 B라는 회사의 프로그래머가 b라는 문제에 막혀있어서 프로그램을 개발할 수 없을 때 또 다른 C라는 회사의 프로그래머가 b라는 문제를 해결해 준다면 인류의 복지는 무한히 확장되어갈 수 있을 것입니다. 또한 이는 불가(佛家)의 인과법칙처럼 작은 복덕이 전체 사회에는 커다란 영향과 반향을 일으켜서 자신에게 돌아오게 될 것입니다. 처음에 씨앗을 만들어 그것을 열매를 맺은 후 그 열매에서 나온 씨앗을 나누어 주면 그것이 일파만파로 퍼져나가 무한히 많은 복덕을 짓게 되는 것처럼 말입니다.
물론, 프로그램 개발 회사들 간에서 저작권이라는 것은 회사의 존망을 좌우하기 때문에 매우 의미가 깊습니다. 저작권이 회사의 생명과 같이 중요한 위치를 차지하고 있다고 할 수 있습니다. 저작권의 취지가 서로의 경쟁을 높여 상호 문화와 문명을 발전시키는 원동력으로 위상을 자리매김해야 한다는 점을 명지해야할 것입니다. 선진 회사가 어느 정도 낙후된 기술은 다른 열등 회사에게 나누어주는 것은 나쁠 것이 없습니다. 하지만, 경쟁 업체에게 기술을 넘겨주는 것은 문화와 문명의 진화에 역행하게 될 수 있습니다. 따라서 프로그래머의 세계에서도 나눔이라는 것, 즉 지식공유라는 것은 기술자체의 공유가 아니라는 점, 그리고 기술자체의 공유라도 사소하고 작은 공유라는 점을 인식할 필요가 있습니다. 이러한 작은 기술공유가 건전한 개발 문화와 경쟁 문화를 이룬다고 봅니다. 이 점에서 우리는 이현령비현령(귀에 걸면 귀걸이 코에 걸면 코걸이)의 비유일 듯하지만 실천적 경제학자로서 유명한 E. F. 슈마허가 말 한대로 “작은 것이 아름답다”는 구절을 상기할 필요가 있습니다. 기술합병이 아닌 이상 큰 기술공유가 아니라 작은 기술공유가 많은 사람들 간에 누적이 되어 네트워크를 통해서 순환되고 소통될 때 가치가 있는 것이라 할 수 있습니다. 결론적으로 저작권이 문제가 되지 않는다면 작은 차원에서의 기술공유는 나쁘다고 할 수 없습니다.
각설하고, 기술력 높은 프로그래머가 좋게 평가받는 것은 기술력이 높을수록 고객의 마음을 배려하는 훌륭한 프로그램을 개발해 내기 때문이라고 할 수 있습니다. 그리고 기술력 있는 프로그래머일수록 자신의 모든 노력을 총동원하여 어떻게 하면 고객의 모든 요구사항을 수용하고 버그가 없이 생산성을 높여 개발해 낼 수 있을까를 염두에 둔다고 볼 수 있습니다. 기술력 있는 프로그래머는 결코 고객의 요구사항을 무시하지 않습니다. 고객의 요구사항을 외면하거나 회피하려고 하는 프로그래머는 기술력있는 프로그래머라고 하기 어렵습니다. 고객의 마음을 이해하고 고객에게 즐거움을 줄 수 있도록 최선을 다하는 프로그래머가 바로 진실된 프로그래머요 고수 프로그래머라고 생각합니다. 고수 프로그래머는 항상 자신의 프로그램이 무결한지, 즉 버그가 없는지를 고민합니다. 그리고 고객이 원할 때까지 항상 버그를 치유해 나가는데 부단히 노력합니다. 따라서 기술력 있는 프로그래머란 일단 훌륭한 프로그래머라고 할 수 있습니다. 기술은 진지한 열정과 노력이 동원되는 매우 고된 내적 싸움(Internal Struggle)으로부터 얻어지는 능력입니다. 고도의 지적인 노가다가 프로그래밍이라는 말이 있을 정도로 기술력 중에서 힘든 일이 프로그래밍이라고 할 수 있습니다. 그러한 프로그래밍을 고된 노력을 통해서 고도의 수준으로 향상시키는 프로그래머라면 어느 정도 우리는 그의 개인적인 인간성을 제쳐놓고 존경해 줄 필요는 있습니다.
고객의 요구사항은 고객의 의식을 반영합니다. 따라서 기술력을 향상시키고자 하는 프로그래머라면 고객의 요구사항을 절대로 무시하거나 불평해서는 안 됩니다. “왜 진작 말하지 않았는가?”, “왜 작성한 코드를 새롭게 작성하라고 하는가?” 등등 많은 불만과 불평을 프로그래머에게 가져다주는 것인 실시간적으로 발생하는 고객의 요구사항입니다. 하지만, 프로그래머는 프로그램의 버그만을 치유해 주는 것이 아니라 고객의 의식까지 영향을 줍니다. 프로그래머가 개발한 프로그램은 프로그래머의 의식과 고객의 의식이 합일된 상태를 의미합니다. 만약 고객이 만들어진 프로그램에 대해서 불평을 하거나 불만을 표시한다면 결국 프로그래머와 고객 간의 의식의 합일이 이루어지지 않았음을 의미한다고 할 수 있습니다. 그리고 프로그래머의 의식이 정(正)이라면 고객의 의식은 반(反)이 되고 프로그램은 합(合)이 됩니다. 미국 신문의 어느 유명한 만화에서 프로그래머에게 있어서 고객은 악마라고 표현하곤 하였습니다. 그것은 고객이 바로 프로그래머의 의식과 대립되는 의식을 다분히 많이 보유하고 있기 때문입니다. 이것이 우주적인 법칙이고 굳이 아인슈타인의 상대성이론을 끌어들이지 않아도 누구나 알 수 있는 이야기입니다. 동양철학에서는 음양의 원리로 해석하고 있는데, 여하튼, 프로그래머에게 있어서 고객은 대립적인 대극(쌍대)을 이루는 의식을 지니고 있다고 할 수 있습니다. 그래서 프로그래머는 고달픕니다. 자신의 의식과 다른 그리고 자신의 생각과 일치하지 않는 것을 일치시키기 위해서 노력해야 하기 때문입니다. 프로그래머는 단순히 코딩하는 기계가 아니라 고객의 의견에 주의를 기울이고 생각하고 고객과 의사소통하는 능동적인 생명체라고 할 수 있습니다. 결국 프로그래머가 자신의 생각과 고객의 생각을 합일 시켜 정반합을 완성시켰을 때 프로그램은 완성됩니다. 하지만, 프로그램이라는 본성이 진화의 행로를 따르고 있으며 정반합 사상이 결국 영원히 우주적으로 전개되기 때문에 완벽한 프로그램으로의 귀결이란 존재하지 않습니다. 단지, 어느 정도 서로 간에 완성도가 인지되면 그때 프로그램 개발은 멈추게 되는 것이라 할 수 있습니다.
결국 기술자로서 프로그래머는 자신의 실력을 마음껏 발휘하여 고객의 세계를 포용할 수 있는 능력으로 발전해야 할 것입니다. 실력이 있어야, 즉 기술력이 있어야 고객의 불만과 불평을 해소할 수 있습니다. 물론, 어느 사장님께서 말씀하신 것처럼 휴먼 인터페이스 차원에서 해결된다면 굳이 기술력이 요구되지도 않습니다. 고객과의 대화와 의사소통을 통해서 기술적인 문제들을 미리 해결하고 기능을 제외시키거나 축소시킬 수 있기 때문입니다. 만약 고객과의 대화와 의사소통이 원활하지 못하다면 많은 기능들을 소프트웨어로 구현해야 하는 고달픔이 일어나게 될 것입니다. 따라서 코더가 아닌 프로그래머라면 고객의 생각과 마음을 정확하게 이해하여 자신의 생각과 기술력을 조화롭게 합일시키는 능력이 필요합니다. 때로는 이러한 과정 속에서 새로운 의식이 형성되기도 하고 참신한 발상을 얻게 되기도 합니다. 그리고 무엇보다 소프트웨어 개발에 대한 철두철미하고 섬세한 심법(心法)을 얻을 수 있습니다.
그리고 기술력이 좋아야 기술력을 나눌 수 있는 능력을 갖게 되는 것입니다. 기술력이 좋지 못한 프로그래머는 자신의 기술력을 남과 공유하고 싶어도 공유할 수 없습니다. 괜히 공유한다고 하였는데 몇 줄짜리 코드지만 버그가 있는 코드를 공유한다면 받는 이는 좋아하지 않을 것입니다. 그리고 코드의 공유가 아니라 이론의 공유가 되더라도 결코 잘못된 이론에 의한 기술지식은 올바르게 공유될 수 없다고 할 수 있습니다. 따라서 기술력 있는 프로그래머가 지식공유에도 큰 공헌을 하게 되는 것입니다. 물론, 인간성이 좋지 못한 프로그래머들은 자신의 지식을 자랑하기만 하고 남에게 갈켜주는 것을 아까와 합니다. 필자도 실력이 특출나지는 않았으나 과거에 남에게 조그만 노하우를 갈켜주는 것을 무척 아까와 했습니다. 그런 결과 사람들과 소원해지고 직장 내에서도 무시를 당하곤 하였습니다. 불가(佛家)에서도 보시(남에게 자신의 가진 것을 베품)를 가장 기초적이고 제 1의 가르침으로 삼고 있습니다. 자신이 아깝다고 생각하는 조그만 지식도 남과 나눌 수 있을 때 진실된 인간성의 성숙으로 발 돋음 한다고 할 수 있습니다. 기술력도 좋고 인간성도 좋은 프로그래머를 찾는 것은 참 힘듭니다. 필자가 알기에 고수 프로그래머란 기술력도 좋고 인간성도 좋은 프로그래머를 의미합니다.
그래서, 어찌 보면 프로그래머가 갖추어야할 인간성과 기술력의 두 가지 사항은 첨예하게 대립하기도 합니다. 둘 다 갖추면 좋겠지만 기술력이 바탕이 된 인간성을 택하느냐 아니면 인간성이 바탕이 된 기술력을 택하느냐의 문제가 되기 마련입니다. 음과 양이 있을 때 어느 한 쪽이 좋다고 할 수 없고 다만 선현들께서 음양이 순환되어야 가치가 있다고 한 것처럼, 기술력에 치우신 프로그래머라면 인간성과 도덕심을 향상시키는 심법(心法)을 배워야 하고, 지나치게 가진 기술지식도 없이 남과 지식을 공유하고자 하는 마음을 가진 프로그래머라면 기술력을 쌓는데 노력해야 할 것입니다.
가장 좋은 상황은 인간성과 기술력을 병행해서 때로는 인간적으로 대해주기도 하고 때로는 기술력으로 승부를 거는 것으로 이것이 바로 진실된 프로그래머의 승부사적 기질이라고 생각해 봅니다. 고객과 의견 충돌이 있을 때 인간적으로 해결하도록 노력하되 안 되면 기술력으로 승부를 걸어야 할 것입니다. 그리고 휴먼 인터페이스에서 기술적 사항이 배제되는 것 또한 어느 정도 기본적인 기술력이 갖추어졌을 때 승산이 크다고 봅니다. 기술적으로 알아야 고객과의 대화를 통해서 문제들과 기능들을 미리 해소시켜 나갈 수 있다고 할 수 있습니다.
프로그래머에게 필요한 기술력은 다종다양한 프로그래밍 언어와 각양각색의 개발툴을 골고루 다루는 것뿐만 아니라 하나의 언어와 개발툴이라도 제대로 사용할 줄 아는데 있습니다. 그리고 기술력이 무르익게 되면 자연히 심법(心法)이 녹아들게 되어 있습니다. 어검술이라고 하여 내공으로 검을 날려 적을 공격하는 것이 있는데, 기술력이 완숙한 경지에 이르기 위해서는 나름대로 기술력에 내공을 실어야 합니다. 내공이란 결국 심법과도 일맥상통하며, 이러한 경지에 이른 사람을 마스터(Master) 또는 구루(Guru)라고 합니다. 심법은 코드를 체계적으로 찍어내는 격률(格率)과도 같은데, 코드패턴이나 디자인 패턴 등이 대표적으로 기술력과 심법 또는 내공이 가미된 마스터피스(Masterpiece)라고 할만합니다. 일반적으로 구조적이라던가 객체지향이라던가 컴포넌트지향이라던가 하는 말들은 거의 모두 프로그래밍에 격률 또는 간단히 말해서 법칙성을 부과한 것이라고 할 수 있습니다. 심법이란 “이것은 이것이다”또는 “저것은 저것이다”라는 것처럼 확연히 구분되어지는 것이 아니라 마음으로 느끼어 마음으로 새겨질 수 있는 법(다르마, Dharma)이라고 할 수 있습니다. 하지만, 그것이 개인적인 차원에서 다양하게 나타날 수 있어 종종 모호하게 비추어질 수 있으나, 정통적이고 보편적인 법칙이 엄연히 존재하기 때문에 많은 사람들이 함께하는 기준을 채택하고 GoF의 디자인패턴과 같은 정통 서적을 참고하면 도움이 될 것입니다. 프로그래밍에 있어서 격률을 배우는 것이 바로 심법을 배우는 것이라는 사실을 안다면 상기의 내용을 이해하는데 어려움이 없을 것입니다.
그리고, 인간성이라는 것은 결국 불가(佛家)에서 말하는 다르마로 귀결됩니다. 다르마란 마음을 고요하게하고 깨끗하게 하는 것입니다. 특히, 마음을 너그럽게 갖고나 항상 여여한 마음을 갖는 것이 인간성을 향상시키는데 큰 도움이 됩니다. 인간성이라는 것은 에니어그램의 지혜에서도 밝혀진 것처럼 다양하게 나타납니다. 인간성은 인간의 성질과 특질이라고 할 수 있습니다. 이러한 성질과 특질은 서양의 점성술(Astrology)이나 사주 명리학(命理學)에서 이야기하는 바와 같이 선험적으로 정해진 것으로서 바꾸기가 어렵다고 하기도 합니다. 그러나, 필자의 경우 기본적인 성격으로서의 이러한 인성이라는 인간의 성질과 특질이 바꾸기 어렵다고 하더라도 인성의 핵심부에 자리하고 있는 참다운 마음(참나, Real Self)은 순수하다고 생각합니다. 맹자께서도 성선설을 주장한 것처럼 내면에 잠재되어 있는 참된 나를 찾아 정진한다면 인성도 순수하게 바뀐다고 보는 것이 필자의 견해입니다. 안철수 전 CEO님의 저서 “영혼이 있는 승부”에서 안철수님은 이렇게 이야기 하고 있습니다. “일단 시도한 것이라면 아주 열심히 해야 한다. 열심히 하는 과정에서 실패할 수도 성공할 수도 있는데 그 결과보다 중요한 것은 그런 가운데 자기를 알아가는 것이며, 이 자체만으로도 무척 가치가 있다.”자신을 알아가는 것, 즉 자신의 순수한 성품과 본성을 찾아 정진하는 그것이 바로 참다운 인간성의 완성으로 가는 길이라 생각해 봅니다.
프로그래머는 기술력에 대한 향상심과 더불어 마음 씀씀이의 너그러움과 자신을 알아가는 것이 무엇보다도 중요합니다. 결국 기술력과 인간성의 조화로움을 추구할 때 프로그래머는 세상을 이해하고 삶을 깊이 있게 경험할 수 있으며 항상 새롭고 새로운 삶을 영위해 나갈 수 있다고 봅니다. 끊임없이 배우고 부단히 성찰하는 과정 속에서 기술력은 향상되고 심법(心法)과 참다운 본성의 껍질을 하나씩 제거해 나가게 될 것입니다.
감사합니다.