콘텐츠로 건너뛰기

[펌] 현자의 코드

  • 기준

현자의 코드(Philosopher's Code)

picknic12@naver.com

프로그래머가 고수가 되기 위해서는 그리고 실용주의적인 프로그래머가 되기 위해서는 프로그래밍의 각종 엘리먼트(element:요소)들을 조화롭게 통합시켜 하나의 작품을 만들어내는 능력이 필요하다. 이는 고대의 현자들이 이룩한 내면의 연금술, 즉 깨달음의 연금술과 비슷하다. 고대의 현자들이 수행을 통해 내면의 빛을 얻었다면 프로그래머는 코딩을 통해서 의식의 각성(Awakening)과 내면의 각성을 얻으며 그로 인해 얻어진 결과물이 바로 현자의 코드(Philosopher's Code)라고 말하고 싶다. 이 글은 비록 부족한 필자지만 프로그래머가 현자의 코드(Philosopher's Code)를 작성하는 길을 제시하기 위한 글임을 밝힌다.

머리말

본 글은 필자가 전산분야에 발을 들여 놓은 이후 지금까지 17년간 배우고 익힌 지식들을 토대로 작성한 글이다. 우리 프로그래머 모두는 일반적으로 작성되는 프로그래머의 코드(Programmer's Code)라고 하는 통상적인 코드는 작성할 수 있다. 하지만 우리는 더 좋은 코드를 작성하기 위해서 노력한다. 물론 상황에 따라 생산성에 의해 그러한 좋은 코드를 작성할 시간을 갖지 못하는 경우도 있다. 하지만, 어떠한 상황에서도 고객의 요구사항과 설계에 정의된 제시사항에 따라 자신의 진실성을 반영하는 코드를 작성해야 한다. 이렇게 마음 깊은 곳에서 나오는 진실성에 토대를 둔 코드를 필자는 현자의 코드(Philosopher's Code)라고 이름 붙였다. 현자의 코드(Philosopher's Code)란 용어는 연금술의 대가, 헤르메스 신의 현자의 돌(Philosopher's Stone)이라는 글귀를 참고한 것이다. 단, 본 글은 신비주의적인 연금술을 소개하고자 하는 글이 아니라 진지한 프로그래머로서 자신을 성찰하고 자신의 진실된 마음을 반영하여 창조적인 코드를 작성하고자 하는 프로그래머들을 위한 안내 글이다. 또한 본 글은 프로그래머의 삶을 확장하여 코딩을 자아성찰을 위한 도구로서 활용하였으면 하는 뜻에서 집필한 글임을 밝힌다.

철학과 전산학의 조우(遭遇)

과연 진실로 철학과 전산학은 회통(會通:서로 교류하고 소통함)할 수 없는가? 이러한 의문은 몇 년 전 매트릭스 영화를 통해서 해소되었으며 영화에서 컴퓨터세계와 철학사상은 서로 교류하고 소통할 수 있음을 보여주었다. 전산학의 사상은 폰노이만, 알렌 튜닝, 도날드 누스, 알렌 펠리스, 에드가 다이즈크스트라, 죤 바쿠스, 로버트 플로이드, 찰스 안토니 리차드 호어, 데니스 리취, 켄 톰슨, 니쿨라우스 워스, 마빈 민스키, 죤 맥카시, E. F. 코드 등등 기라성 같은 석학들에 의해 구축되었고 기반이 마련되었다. 그리고 이러한 전산학의 사상에는 깊이 있는 사유, 즉 진지한 사색이 언제나 함께하였다. 그러한 진지한 사색은 철학자나 현자들의 사색과 다를 바가 없다고 보는 것이 필자의 견해이다.

필자가 알기에 실용주의적 관점에서 전산학의 요체는 깔끔하고 읽기 쉽고 실행 가능한 효과적이고 효율적인 코드를 작성하는데 있다고 본다. 하지만, “실용주의 프로그래머”에서 밝힌 바처럼 완벽한 코드는 존재하지 않다. 왜냐하면, 코드는 엔트로피의 증가와 함께 끊임없이 진화(Evolution)하는 경향이 있기 때문이다. 세계가 변화하고 고객의 마음이 바뀌고 기술이 향상되고 개발자 자신의 의식(Consciousness)과 능력이 발달하기 때문에 그에 종속된 코드는 변화하게 된다. 코드의 라인수가 증가하거나 코드의 섬세함이 고도화되어갈 수록 보다 성능은 개선되고 효율적인 코드로 재작성 되기도 한다. 물론 반대로 엔트로피의 증가로 인해 코드가 순수성의 의미를 잃고 퇴화(Involution)하여 복잡해지고 읽기 어렵게 된다고 할 수도 있다. 코드는 시간의 흐름에 따라 진화와 퇴화가 동시에 병존한다.

소프트웨어 개발에는 철학이 있다. 그것은 실무적으로 얼마나 적은 멤버를 통해서 생산성을 높여가면서 효율적인 프로그램을 개발해내는가이다. 물론 여타의 개발철학이 있고 숨겨진 사상이 존재할 수 있다. 이상적인 견지에서는 개발자들이 프로그램을 마음 편하게 그리고 쉽고 간결하게 완성하는데 모든 철학의 초점이 맞추어진다. 하드웨어의 성능 발달로 성능(Performance)의 문제는 많이 줄어들었다. 이제는 보다 더 개발자들 간에 읽기 쉬운 코드, 마음을 깨끗하게 하고 마음을 어지럽히지 않는 순수하고 정갈한 코드가 요구된다. 이러한 코드는 개발자의 마음의 반영이다. 또한 개발자의 이성과 정신에 의해 코드가 작성되기 때문에 얼마나 개발자가 이성적으로 논리적이며 진지한 사유를 했느냐에 따라 코드의 구조와 명료성 그리고 가독성 등이 결정된다.

코드의 가치를 결정짓는 많은 요인이 있다. 생산성, 효율성, 가독성, 재사용성, 실행가능성, 버그프리, 유지보수용이성, 변화수용성, 등등 말이다. 이러한 요인들은 코드의 품질을 좌우하며 프로그래머의 능력을 결정짓는다. 사실, 이러한 코드의 가치는 프로그래머의 전체적이고 종합적인 능력이다. 이렇게 전체적이고 종합적인 프로그래머의 능력은 그 근저에 고되고 든든한 실용주의적이고도 철학적인 사유가 담겨 있어야 한다. 건물을 짓기 위해서 고된 건축설계작업이 필요하고 터널을 뚫기 위해서 고된 토목설계작업이 필요한 것처럼 말이다. 우주구조가 홀론(Holon:그리스어로 hol은 전체, on은 부분을 뜻함)으로 되어 있다는 가설처럼 프로그램 코드 구조는 홀론의 구조와 유사하다. 즉, 부분이 고장 나면 전체가 고장 나고 전체가 온전하기 위해서는 부분이 온전해야 한다. 부분은 다시 더 작은 부분들의 모임이며 전체를 이룬다. 전체가 부분이고 부분이 전체인 것이다. 유사한 비유로서 예를 들어 함수 정의에서 또 다른 함수를 호출하는 것이나 클래스 내에서 또 다른 클래스를 정의하는 경우를 들 수 있다. 또한, 프로그래머에게 있어서 코드는 의식의 상징체계이며, 코드의 흐름은 의식의 흐름이다. 현자의 코드(Philosopher's Code)를 작성하기 위해서는 프로그래머의 정신세계의 반영인 코드에 대한 이와 같은 철학적이고 진지한 사유가 기반이 된다.

현자의 코드(Philosopher's Code)

1년, 아니 2년 더 나아가 3년, 4년, 계속해서 5년, 6년 끊임없이 코드를 작성한 사람은 무엇인가 내면에 강한 코드에 대한 사상체계가 녹아들게 된다. 필자는 6년간 프로그램 개발직에서 프로그래밍을 해봤는데 필자가 얻은 것은 프로그램 개발을 통해서 얻어지는 코드라는 것은 결국 회사의 자산인 동시에 자신의 내면을 반영해 주는 거울과 같은 존재라는 것이다. 도날드 누스 교수가 말한 바대로 프로그래밍은 아트(Art), 즉 기예(技藝)이다. 다시 말해서 기술이요 예술이라는 것이다. 코드는 정성과 심혼을 다해 프로그래머가 작성해 내는 산물이다. 고행을 하는 수도승이 내면에 빛을 만들어 내어 마음을 정화하는 것과 같이, 프로그래머는 코드를 통해서 이성의 논리와 사유를 완벽하게 만들어 나간다.

프로그래머의 의식이 담겨있고 잘 작성되어 있는 코드로서 프로그래머가 각고의 노력을 통해서 만들어낸 생명이 깃든 산물이 코드이다. 이렇게 프로그래머의 심혼과 혈기가 담겨있는 코드를 필자는 현자의 코드(Philosopher's Code)라고 말한다. 현자의 코드(Philosopher's Code)는 마음을 정화해 감으로써 얻어지는 코드를 의미한다. 코드를 많이 작성하고 오랜 숙련을 통해서 마스터(Master)의 경지에 이르고 구루(Guru)의 경지에 도달하게 되면 코드에는 프로그래머의 진실성과 모든 열정과 힘이 담긴다. 사실, 코드는 의식이요 힘이다. 코드는 하드웨어라는 물체를 움직이고 하드웨어를 컨트롤하며 하드웨어와 조화를 이루어 기능을 한다. 노련한 경륜과 노하우로 무장한 경력 프로그래머는 사색하는 철학자와 다를 바 없다. 철학자나 사상가들만이 사색하는 것이 아니라 프로그래머 역시 이들 못지않은 진지한 사색을 한다. 아니 사변적인 철학자가 아닌 진실된 실용주의적 사색을 하는 이가 바로 프로그래머다. 알고리즘적인 사유와 버그를 잡아내기 위한 집중적인 사유가 바로 그것이라 할 수 있다. 또한 이성의 논리와 추론 그리고 버그를 찾아내는데 유용하게 사용되는 직관적 사유 등은 철학자 못지않게 프로그래머의 의식을 각성시켜 주고 프로그래머를 진지하게 만든다. 필자는 많은 프로그래머들로부터 진지한 모습을 보아왔다. 마치 철학자가 자신의 존재와 우주에 대해서 의문을 품고 사색해 들어가는 것과 같이 프로그래머는 실세계의 문제를 사색해 들어감으로서 실세계의 정보를 처리하는 생명력이 깃든 코드를 작성해 낸다. 이렇게 생명력이 깃든 코드라고 언급한 것은 그 만큼 프로그래머가 실세계의 실재(Reality)에 대한 문제와 정보를 있는 그대로 처리할 수 있는 코드를 만들어 냈기 때문이기도 하며 노련하고 숙련된 기예의 발현이기 때문이기도 하다. 프로그래머는 화가나 작곡가처럼 작품을 완성하는 예술가이기도 하다. 그리고 더 나아가 진지한 사색이 반영되어야 하기 때문에 나이가 들고 경륜이 쌓일수록 현자에 다가선다. 현자라는 것은 이성적 논리와 직관적 통찰력이 현상계의 실재(Reality)를 꿰뚫어 볼 수 있을 정도로 세련되게 다듬어져 있는 상태의 의식을 지닌 사람을 말한다. 프로그래머는 실세계의 많은 문제들을 처리함으로써 실재의 모습을 추상화시켜 나가는 법과 그들을 구체화하는 법을 배우게 된다. 이러한 과정 속에서 얻어지는 코드는 깨달음이 반영된 코드이며 깨달음이 없는 코드는 현자의 코드(Philosopher's Code)가 아니라고 할 수 있다.

프로그래머의 가난

한편, 사상가나 철학가 그리고 현자에 다가갈수록 그는 물질적으로 가난해 지기도 한다. 하지만, 가난한 현자만이 존재하는 것은 아니다. 진실된 현자는 자신이 작성한 코드 하나하나에 애정을 갖고 깊은 정감을 가지며 깊은 즐거움과 만족을 누린다. 그렇기 때문에 그 어떤 물질적 풍요로움 못지않은 마음의 환희심을 얻는다. 또한 프로그래밍을 잘하게 되면 그 만큼 좋은 댓가를 받기 때문에 생활고에 어려움은 없을 것이다. 다만, 프로그래머로서 풍요로운 물질적인 삶을 살고자 하는 것은 아마 환상이 아닐까 생각해 본다. 험난한 육체적, 정신적 노동을 통해서 프로그래머의 삶은 정신적 풍요로움에 그 목적을 두어야 한다는 것을 이제 많은 프로그래머들이 알고 있기 때문이다.

프로그래머는 흔히 노가다이며 힘든 직업이며 비전(Vision)이 안보이며 돈의 댓가를 충분히 받지 못하는 직업이라고 말한다. 이는 마치 수도승이 어떠한 댓가도 없이 수행과 희생만을 통해서 마음의 정화와 의식의 진화를 이루어 나가는 모습과 비교해 볼 수 있다. 프로그래머는 고달프다. 하루하루가 힘들고 매우 괴로운 나날을 보낸다. 하지만, 조개가 괴로움 속에서 영롱한 진주를 잉태해 내듯이 프로그래머는 어려운 환경 속에서 심혈을 기울여서 코드를 만들어 낸다. 이러한 코드는 프로그래머의 경륜이 무르익어갈 수록 더욱 가치 있고 보람된 코드로 진화해 나간다. 화가 반 고흐가 얼마나 어려움 속에서 예술적 기질을 발휘했는가를 상기하자. 프로그래머의 가난, 그 속에서 순수한 내면의 꽃이 핀다는 것을 잊지 말자. 괴테가 눈물 젖은 빵을 먹어 본적이 없는 사람과는 말하지 말라고 하지 않았는가? 고독과 외로움, 절망과 고난 속에서 마음은 정화된다고 이야기 된다.

프로그래머의 목적이 무엇인가? 결국 즐거운 삶을 살기 위한 것이 아닌가? 하지만, 인생이라는 것이 음양의 조화로 이루어지듯 즐거운 삶만이 존재한다는 것은 인생의 절반만을 누리는 것에 불과하다. 우리는 프로그래머의 목적을 단순히 즐거운 삶을 살아가기 위한 태도에서 선회해야 한다. 즉, 가난과 힘든 역경을 통해서 내면의 진실성을 찾고 마음의 풍요로움을 얻는 것 말이다. 누구나 한 번쯤 고된 프로그래밍 노가다를 해 본 경험이 있을 것이다. 흔히, 고수 프로그래머라고 말하는 이들은 너무나 이를 잘 알고 있다. 컴퓨터 업계의 고수라고 할 수 있는 스티븐 잡스가 스탠포드 대학 강연에서 마지막으로 인용한 말로서“배고파라 바보가 되라”고 말하지 않았는가? 이 글은 선사(禪師:Zen Master)의 경지에 이르지 않고서는 가히 할 수 없는 이야기다.

컴퓨터 업계의 고수나 선사(禪師:Zen Master), 그 분들 모두는 일맥상통한다. 그들은 삶의 진리를 찾아 나서는 사람들이다. 현자의 코드(Philosopher's Code)를 작성하는 프로그래머들은 한편으로 코딩이라는 매개를 통해서 내면의 진리(Truth)를 찾아 나서는 사람들이라고 말할 수 있다. 그들은 고독과 싸우고 배고픔과 싸운다. 필자는 기라성 같은 고수들보다 못하지만 그들을 흉내 내려고 나름대로 배고파봤고 하루에도 수없이 요구사항이 변경되는, 즉 코드를 수없이 뒤 없는 힘든 노가다를 감내해야 했다. 따라서 필자는 필자보다 더 많은 고생을 했거나 고생을 하고 있는 프로그래머들을 존경하지 않을 수 없다. 하지만, 중요한 것은 마음이다. 얼마나 그러한 고생을 통해서 내면에 진실성을 얻었는가이다. 고생만 하고 아무것도 얻지 못한 프로그래머는 필히 필자의 글이 도움이 되길 바란다. 고생을 미덕으로 생각할 줄 알아야 한다. 현자의 코드(Philosopher's Code)란 수많은 고난과 고생을 통해서 정화된 순수한 마음이 반영된 코드이다. 그냥 단순한 생각으로 작성된 코드를 현자의 코드(Philosopher's Code)라고 말하고 싶지 않다. 현자의 코드(Philosopher's Code)는 땀과 눈물이 배어있는 가난한 프로그래머의 코드를 의미한다.

현자의 코드(Philosopher's Code)에 대한 형식적 요건

필자는 지금 프로그래머 삶을 살지는 않지만 약 10여만 라인 정도의 코드를 작성해 본 결과, 100여만 라인 정도의 코드를 작성한 사람이라면 그리고 그 과정 속에서 자신을 성찰하고 세상을 통찰해 나갔다면 충분히 현자의 코드(Philosopher's Code)를 작성해 낼 수 있다고 본다. 코드에 생명력이 깃들고 다른 누가 보아도 읽기 쉽고 하드웨어에서 효율적으로 실행 가능한 그러한 코드가 바로 현자의 코드(Philosopher's Code)이다. 물론, 100만 라인을 채워야 현자의 코드(Philosopher's Code)를 작성할 수 있다는 뜻은 아니라. 비록 1만 라인의 코드를 작성해도 지극한 성찰과 혹독한 어려움을 이겨내고 다양한 사색과 문제의식을 통해서 실세계의 이치를 고도의 지성으로 단순화시키는 방법을 연마했다면 가능할 것이다. 즉, 이러한 현자의 코드(Philosopher's Code)는 특정하고 특별한 사람이 작성하는 코드가 아니다. 초보자도 자신이 얼마나 심혈을 기울이고 심기를 바쳤느냐에 따라 예를 들어, 알파벳으로 보석모양의 그림을 그리는 알고리즘의 프로그램이라도 코드에 생명력이 있다면 그 코드는 현자의 코드(Philosopher's Code)라고 할 수 있다. 에디슨은 전구를 발명하기 위해서 1 만 번의 실험을 해봤다고 한다. 그리고 9,999번의 실패를 통해서 9,999 가지의 오류를 알게 되었다고 한다. 현자의 코드(Philosopher's Code)도 마찬가지다. 무수히 많은 실패와 시행착오를 통해서 얻어질 때 코드는 황금과 같은 빛을 발하는 법이기 때문이다.

코드에 생명력이 깃들어 있다는 것은 첫째, 읽기 쉬워야 하며, 둘째, 명료하고 깔끔하여 직관적이어야 하며, 셋째 무엇보다 버그가 없는 실행 가능한 코드여야 하며, 넷째, 효율적인 성능으로 실행되는 코드여야 한다. 물론 여타의 더 추가적인 특징을 지닐 수 있으나 이정도면 프로그래머의 진지한 사유를 반영한 코드라고 할 수 있다. 물론 보다 상세하게 현자의 코드(Philosopher's Code)에 대한 나름대로의 형식적 요건들을 정한다면 다음과 같이 열거할 수 있을 것 같다.

1. 버그의 수가 최소화되어야 한다.

2. 실행 가능한 코드여야 한다.

3. 읽기 쉽도록 가독성(Readability)이 좋은 직관적인 코드여야 한다.

4. 재사용성(Reusability)이 높아야 한다.

5. 프로그래머 자신의 에고(ego)가 반영된 트릭을 사용한 복잡한 코드가 아니라
단순한 코드여야 한다. 즉, 프로그래머의 진실성이 반영된 코드여야 한다.
코드가 단순하다는 것은 프로그래머의 사유가 정리되었다는 것이며 순수한 의식에서
나온 코드라는 것을 방증한다.

6. 코드패턴과 디자인 패턴 등을 잘 활용한 코드일수록 현자의 코드(Philosopher's Code)에 가깝다.
물론, 이는 어려운 코드가 현자의 코드(Philosopher's Code)라는 뜻이 아니다. 다만, 정리되고 체계화된
노련한 엔지니어에 의한 코드가 현자의 코드(Philosopher's Code)를 구성하는 하나의 요소라 할 수 있다.

7. 리팩토링을 통해 코드의 엔트로피를 최소화한 코드여야 한다.

8. 트릭이 아닌 지성적인 기술적 노하우가 담긴 코드여야 한다.
즉, 다양한 기법과 프로그래밍 언어의 엘리먼트가 다양하게 녹아들어 있어야 한다.

9. 요구사항의 변화나 기타 변화에 적응할 수 있는 코드여야 한다.

10. 들여쓰기와 띄어쓰기 그리고 코딩 스타일 등 코드의 구성이 미학적이어야 한다.

11. 코드 전체 구조에서 어느 한 곳을 떼어내거나 어느 한곳을 추가해도
코드의 안정성을 크게 위협해서는 안 된다.
즉, 코드의 부분과 코드의 전체가 조화를 이룬 코드여야 한다.
코드는 부분과 전체가 상호 유기적으로 연결되어 있으되
한편으로는 부분과 전체가 명료하게 분리되어 있어야 한다.

12. 모듈간의 커플링이 최소화되고 응집도가 높아야 한다.

13. 실제로 프로그램의 생산성을 높여주는 구조적이면서 함수나, 클래스 등으로
모듈화된 코드가 좋은 코드라 할 수 있다.

14. 프로그래머의 진지한 사유가 반영된 깔끔하고 정제된 코드여야 한다.
즉, 알고리즘이 순수해야 하며 군더더기가 없는 코드여야 한다.

15. 한 번에 완성된 코드가 아니라 여러 번의 수정과 보완을 거쳐
점진적으로(Incrementally) 개선된 코드일수록 현자의 코드(Philosopher's Code)가 될 가능성이 높다.

16. 코드를 읽는 이가 감명과 감동을 받을 수 있는 예술적인 코드이어야 한다.

17. 코드를 읽는 이의 의식을 각성시키고 새로운 교훈을 줄 수 있는 코드이어야 한다.
즉, 현자의 코드(Philosopher's Code)는 완벽함 자체에 있는 것이 아니라 온전함에 있는 것이다.

18. 정에 의해 얼음이 확실하게 쪼개지듯 명료한 주석이 코드와 함께해야 한다.
주석은 코드의 부속물이 아니라 코드와 완전한 조화를 이루는 코드의 벗이다.

19. 주관적인 코드가 아니라 객관화를 거친 코드일수록 훌륭하다.
짝 프로그래밍과 코드 공유가 대표적으로 좋은 예라고 할 수 있다. 짝 프로그래밍과 코드 공유를 통해서 코드는 좀 더 세련화 되고 다듬어진다.

20. 남이 알아주는 코드가 아니라 자신의 내면에서 우러나오는
진실된 이성적 논리가 반영된 코드여야 한다.

물론, 이러한 요건들은 형식적인 것에 지나지 않는다. 그리고 20가지 정의를 모두 지켜야만 반드시 현자의 코드(Philosopher's Code)가 완성되는 것은 아니다. 또한 이는 필자가 아는 바로서의 현자의 코드(Philosopher's Code)를 말한 것이며 수많은 프로그래머들마다 다양한 사유와 의식을 가지고 살아가기 때문에 어떤 정형화된 현자의 코드(Philosopher's Code)란 존재하지 않는다. 이를 위해서, 필자는 시중에서 베스트셀러로 인기를 누렸거나 누리고 있는 서적들을 참고하여 상기와 같이 현자의 코드(Philosopher's Code)가 구비해야할 조건들을 열거한 것이다. 다소 비슷한 사항을 포함하여 20가지로 정리해 봤는데, 이 외에도 현자의 코드(Philosopher's Code)를 이루기 위한 여러 가지 특성과 조건이 필요하리라 생각한다. 하지만, 어떤 코드가 현자의 코드(Philosopher's Code)라고 단언해서는 안 된다. 다만, 현자의 코드(Philosopher's Code)란 누가 보더라도 감명을 주는 코드이고 실행 가능한 버그 없는 코드라는 점에서는 동일하다. 그리고 현자의 코드(Philosopher's Code)는 단순히 외양적이고 외면적인 코드가 아니라 자신의 내면에서 우러나온 진실성이 반영된 코드여야 한다. Code Complete의 저자 스티브 맥코넬이 말한 바와 같이 완벽한 코드는 진실된 코드이다. 현자의 코드(Philosopher's Code)도 이와 다를 바가 없다. 또한 20가지 요건은 단순히 눈으로 보고 읽어서 되는 것이 아니라 프로그래머가 직접 실전에 적용해야 한다. 이를 적용하는 데는 프로그래머의 마음가짐이 중요하다. 심법은 현자의 코드(Philosopher's Code)를 정교하고 체계적으로 찍어내는 격률(格率)과 다를 바 없다. 현자의 코드(Philosopher's Code)는 순수한 마음으로만 알 수 있는 것이다.

프로그래머의 마음가짐(심법:心法:Mind Rule)

그렇다면 어떠한 마음가짐으로 코드를 작성해야 현자의 코드(Philosopher's Code)를 작성할 수 있는가? 그것은 이미 많은 서적들이 출간되어 우리들에게 알려주었고 지금도 알려주고 있다. 저 멋진 책, “실용주의 프로그래머”라는 서적이 있지 않은가? 물론 필자의 졸저 “프로그래머의 길”도 참고가 될 것이다. 그 외에 많은 서적들이 존재한다. 하지만 책이 모든 것을 해결해 주지 않는다. 즉, 책을 읽는 것만으로 현자의 코드(Philosopher's Code)를 작성할 수 있는 것이 아니다. 현자의 코드(Philosopher's Code)를 작성하기 위해서는 마스터 프로그래머, 즉 코드 구루의 도움이 필요하다. 스승이 필요한 것이다. 스승이 없이는 현자의 코드(Philosopher's Code)를 창조해 내기 어렵다. 물론 가능할 수는 있다. 하지만 누가 어려운 길로 돌아가려고 하겠는가? 우리는 쉽고 편안한 길을 선택할 필요가 있다. 그것은 바로 훌륭한 코드의 스승을 찾는 것이다. 물론, 훌륭한 코드의 대가(Master)를 찾는 것이 쉽지 않다. 훌륭한 코드 구루를 찾는 것이 하나의 훈련(Discipline)이라고 할 수 있다. 코드 스승은 직장 상사가 될 수 있고 학원 강사가 될 수 있고 친구가 될 수 있고 후배사원이 될 수도 있다. 전산업계가 활발히 움직이고 있는 사회에서는 어디에나 코드 스승이 존재한다. 하지만 진실된 코드의 스승은 자신의 마음과 행동이 진지하게 준비되었을 때 오게 된다고 현자들은 이야기 한다.

현자의 코드(Philosopher's Code)는 일반 프로그래머의 코드와 동일하게 보인다. 하지만, 필자는 간단히 말해서 별 생각 없이 작성하여 컴퓨터상에서 돌아가기만 하는 코드를 일반 프로그래머의 코드라고 말하며, 프로그래머의 심혼(心魂)과 정성이 담긴 코드를 현자의 코드(Philosopher's Code)라고 말한다. 그렇다면 프로그래머의 심혼이란 무엇인가? 그것은 바로 노동의 신성함과 자아성찰이 담긴 마음을 의미한다. 억지로 돈을 벌기 위해서 코딩하는 프로그래머에게는 자아성찰의 기회가 줄어든다. 또한 노동의 신성함은 어디에서 오는가? 그것은 바로 힘든 일이지만 일을 사랑하고 자신의 일을 천부적인 것으로 받아들일 때 얻어지는 것이다. 힘든 노동 속에서도 자신의 마음을 성찰해 나가면서, 즉 자신의 마음속에 있는 논리의 오류를 하나하나 수정해 나가고 이를 주도면밀하게 관찰하고 사색해 가면서 코딩하는 프로그래머의 코드와 단순히 억지로 코딩하는 일반 프로그래머의 코드는 차이가 있다. 즉, 노동의 신성함을 인식하고 인고의 노력을 통해서 창조되는 순수한 마음이 담긴 코드를 현자의 코드(Philosopher's Code)라고 할 수 있다. 그리고 왜 순수한 마음이어야 하는가? 그것은 바로 현자의 코드(Philosopher's Code)를 작성하기 위한 올바른 지성적 사유가 가능하기 위해서라고 할 수 있다.

현자의 코드(Philosopher's Code)는 신성한 것이요 다차원적인 것이다. 올바른 사유와 정직한 마음으로 자신의 두뇌와 마음에 존재하는 오류들을 조금씩 수정해 나가는 고된 노력과 과정을 통해서 한 줄 한 줄 작성하는 코드, 그것이 바로 프로그래머의 심법이 담겨있는 신성한 현자의 코드(Philosopher's Code)라고 할 수 있다. 현자의 코드(Philosopher's Code)는 굳이 누구에 의해서 정의되는 것이 아니라 자신을 포함하여 많은 다양한 의식의 차원을 지닌 프로그래머들의 순수한 마음에 의해 스스로 깨달아 아는 것이다. 그러한 깨달음은 코드를 보는 것뿐만 아니라 작성하는 순간순간에 코드 속에 녹아들고 자신의 마음과 의식 속에 빛으로 창조된다. 따라서 코드의 겉모양이 미학적이지 않아도 자신의 마음속의 논리적 오류를 올바르게 수정하고 자신의 순수한 열정을 올바르게 표현한 코드라면, 즉 심법(心法)이 반영된 코드라면 그 코드는 현자의 코드(Philosopher's Code)에 다가갈 수 있는 것이다. 그러나 아리스토텔레스가 물체는 형상과 질료로 구성되어 있다고 이야기한 바와 같이, 코드를 구성하는 의미를 뜻하는 내용 못지않게 표현을 뜻하는 외양도 중요함을 잊지 말아야 할 것이다. 더 나아가 자신이 작성한 코드를 통해서 마음을 정화(淨化)할 수 있다면 금상첨화일 것이다. 그러기 위해서는 깔끔하고 명료한 그리고 직관적인 코드를 많이 접해 보고 많이 모방해 봐야한다. 남들이 잘 작성해 놓은 현자의 코드(Philosopher's Code)를 읽는 것만으로도 마음의 명료함을 얻을 수 있다는 점을 잊지 말자. 좋은 코드, 현자의 코드(Philosopher's Code)를 항상 가까이 하도록 하자.

코드의 연금술

프로그램이라는 것은 코드의 체계이다. 즉, 코드의 단순한 모임이 아니라 유기적인 관계로 코드들 간에 상호교류하는 집합체라는 것이다. 그리고 그러한 코드 체계를 구성하는 요소들은 엘리먼트(element)라고 하여 for문에서부터 if문, 연산자, 배열, 구조체, 객체지향의 경우 클래스, 상속, 다형성, 템플릿 등 다양한 엘리먼트로 구성된다. 이러한 엘리먼트들은 프로그래머에게는 사상의 빌딩블록이며 코드의 연금술 재료가 된다.

고대로부터 인간의 몸은 지, 수, 화, 풍의 사대로 구성되어 있고 이 사대는 4가지 엘리먼트라고 이야기 되어왔다. 그리고 여기에 제 5의 원소로서 빛이 들어간다. 제 5의 원소는 엘릭서(Elixir)라고 하며 이 4가지 엘리먼트의 합성을 통해서 이루어진다고 고대로부터 이야기 한다. 물론 제 5 원소라는 영화도 나왔다. 여기서 중요한 것은 프로그램이라는 것도 조건문, 연산문, 함수문, 구조문, 배열문 등등 다양한 엘리먼트가 합성되어 하나의 완벽한 코드가 만들어 진다는 것이다. 얼마나 정교하고 노련하게 심혼을 기울여서 코드를 개발했느냐에 따라 코드는 마음을 정화시키고 이성적 논리의 오류를 제거해 주는 동시에 프로그래머의 진실성(Veracity)을 반영해 준다. 이렇게 작성된 코드를 이름 하여 현자의 코드(Philosopher's Code)라고 이야기 할 수 있다. 프로그래머라면 고통과 고생을 감내하고 인내하면서 지혜로움을 살려 현자의 코드(Philosopher's Code)를 만들어 나갈 때 프로그래머로서의 긍지와 자부심을 갖는다고 생각한다. 필자가 6년간 프로그래밍을 통해 얻은 나름대로의 가치관이라면 결국 얼마만큼 자신의 정신에 존재하는 오류(버그)들을 제대로 파악하고 그것을 제거하여 코드에 반영 하는가였다. 프로그래머의 의식이 진실하지 못하다면 코드는 버그를 갖게 될 것이며, 그러한 코드는 결코 좋은 코드가 될 수 없다. 하지만, 어려운 역경을 극복하고 코드를 구성하는 엘리먼트들을 정교하게 배합하여 지혜롭게 코드를 창조해 낼 때 그러한 코드는 프로그래머의 마음과 생명이 담긴 현자의 코드(Philosopher's Code)라고 말할 수 있을 것이다. 명료하고 실행가능하며 혼신의 힘이 깃들인 코드는 환희심을 가져다준다.

코드는 정신의 반영이며 실세계의 반영이여 조직 문화의 반영이다. 코드를 정갈하게 다듬고 세련화하는 과정 속에서 그리고 코드의 엘리먼트들을 적절히 배합하여 조화롭게 융화시켜 나갈 때 마음도 영향을 받는다. 즉, 코드의 온전성을 추구해 나가는 것은 자신의 내면을 밝히고 정화하는 길이다. 그리고 자신의 내면을 성찰하고 고요히 지켜보는 과정을 통해서도 말끔하고 깨끗하고 군더더기 없는 코드를 만들어 낼 수 있다. 많은 경험도 중요하지만 지적인 통찰력과 심오한 탐구 그리고 진지한 실험과 관찰이 궁극적으로 코드의 연금술을 완성시켜 나가는 과정이라고 할 수 있다. 또한 코드의 연금술을 통해 현자의 코드(Philosopher's Code)를 작성해 나감에 따라 의식은 진화하게 된다. 더 나아가 세월이 흘러 코드는 사라지고 코드에 대한 기억이 의식 저편으로 사라진다 해도 그러한 코드를 작성하려고 심혼을 기울이고 정성을 바쳐 얻어진 정신만은 영원히 인생의 흐름 속에서도 영속될 것이다.

맺음말

글을 쓰고 나니 필자의 글이 다분히 세속에서 초연해 보이는 고답(高踏)적인 분위기를 자아낸다. 하지만 명심해야할 점이 있다. 프로그래머에게 있어서 정신의 안정과 평온을 위해서는 돈이나 명예보다 일을 아끼고 소중히 여기는 마음자세가 필요하다는 점이다. 일 자체에 충실하고 그곳에 전념할 때 코드는 빛을 발하고 현자의 코드(Philosopher's Code)로 완성된다. 현자의 코드(Philosopher's Code)는 무를 베듯 명료하게 정의되는 것이 아니라 마음으로 느끼고 알 수 있는 그리고 마음과 마음으로 전해져서 알 수 있는 프로그래머의 정신세계의 상징적 반영이다. 또한 필자는 현자의 코드(Philosopher's Code)를 본 적은 있어도 작성해 봤다고 단언할 수는 없다. 그리고 현자의 코드(Philosopher's Code)를 작성했다고 현자가 되는 것은 아니다. 현자의 코드(Philosopher's Code)를 작성해 나감으로써 점진적으로 현자에 다가선다는 것을 깨닫게 될 것이다. 하지만 결코 현자의 코드(Philosopher's Code) 작성만으로 현자의 경지에 이르지는 않는다는 점을 강조해 두고 싶다. 독자제현님들께서 지혜의 눈으로 이 말에 숨겨진 뉘앙스를 읽을 수 있기를 바란다. 필자가 글을 작성한 후 느낀 점은 과연 필자가 전 세계 프로그래머들 중에서 어느 정도의 실력을 가지고 있는가에 대한 의문이었다. 필자보다 유능하고 마음이 넓은 고수 프로그래머에게 진심으로 죄송한 마음이 든다. 무명 고수라는 말이 있다. 진실된 고수는 세상에 나타나지 않고 숨어서 세상을 올바르게 인도한다고 말이다. 진실된 고수 프로그래머는 이름 없이 하루하루 조용히 기업 속에서 일하는 프로그래머일 것이다. 필자는 이름 있는 고수도 아니고 더욱이 무명고수도 아니다. 하지만, 필자를 스치고 지나간 수많은 인연을 통해서 고수들의 세계를 엿볼 수 있었다. 현자의 코드(Philosopher's Code), 바로 이것은 어느 누구도 가난한 프로그래머로부터 뺏을 수 없는 꿈이다. 그러나 Philosopher's Code 그것은 고대의 연금술처럼 단순히 이상(理想:Idea)으로 생각해서는 안 된다고 본다. 고수들의 심법을 통해서 분명 이룰 수 있고 보다 온전한 형태의 삶을 향해서 정진해 나가는 우리 프로그래머들의 자화상이 바로 현자의 코드(Philosopher's Code)이기 때문에 더욱 이를 구현하고 실체화하는데 노력을 게을리 해서는 안 될 것이다.

참고문헌
1. 프로그래머의 길, 신영호 저, 홍릉과학출판사
2. C 프로그래밍의 기초 및 학습론, 신영호 저, 홍릉과학출판사
3. 물질의 궁극원자 아누, 문성호 저, 아름드리미디어

부족한 글 읽어주셔서 감사합니다. 항상 평안하세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다