프로그래밍의 도(道)
The Tao of Programming
영역: 죠프리 제임스(Geoffrey James)
필사: 세쓰 로버트슨(Seth Robertson)
한역: 윤태원
목차
제 1 권 : 무(無)
제 2 권 : 고대(古代)의 도사(道士)들
제 3 권 : 설계(Design)
제 4 권 : 코딩(Coding)
제 5 권 : 유지(Maintenance)
제 6 권 : 관리(Management)
제 7 권 : 운용의 묘
제 8 권 : 하드웨어와 소프트웨어
제 9 권 : 에필로그
제 1 권 무(無)
도사 프로그래머 가라사대 : “숨겨진 에러 코드를 찾아내는 방법을 익혔다면 하산할 때가 온 것이니라.”
1.1
무(無)에서 이상스러운 기운이 생겨났도다. 그 기운은 홀로 외로이 움직이지 않았다. 그 기운은 움직이지 않았으나 동시에 끊임없이
움직이고 있었다. 그것이 바로 모든 프로그램의 소스이다. 나는 그 이름을 알지 못하느니, 그것을 ‘프로그램의 도(道)’라고
부르게 되었다.
도가 위대하다면 운영체제(OS)도 위대하다. 운영체제가 위대하다면 컴파일러도 위대하다. 컴파일러가 아주 위대한 것이라면 애플리케이션은 위대하다.
사용자는 만족하고 그리하여 세상은 조화로 충만하도다.
프로그래밍의 도는 멀리까지 미치며 아침 바람과 함께 돌아온다.
1.2
도는 기계어를 낳았다. 기계어는 어셈블러를 낳았다. 어셈블러는 컴파일러를 낳았다. 그리하여 세상은 만가지도 넘는 언어로 가득하게 되었다.
모든 언어는 아무리 비천한 것일지라도 그 뜻한 바가 있다. 모든 언어는 소프트웨어의 음과 양(陰陽)을 나타낸다. 모든 언어는 ‘도’안에 그 자리가 있는 법이다.
하지만 할 수만 있다면 코볼(COBOL)로는 프로그래밍을 하지 말지어다.
1.3
처음에 도가 있었다. 도는 시간과 공간을 낳았다. 그리하여 시간과 공간은 프로그래밍의 음과 양을 이루게 되었다.
도를 깨닫지 못한 프로그래머는 언제나 프로그램을 짤 시간과 공간이 모자라는 법이다. 도를 깨달은 프로그래머는 언제나 목적을 달성할 수 있는 충분한 시간과 공간이 있다.
세상의 모든 이치가 그러한 법이니……
1.4
현명한 프로그래머는 도를 듣고 따른다. 보통 프로그래머는 도를 듣고 찾아본다. 멍청한 프로그래머는 도를 듣고 웃어 넘긴다.
그 웃음이 없었더라면 도는 존재하지 않았을 것이다. 가장 높은 음이 가장 알아듣기 힘든 법. 앞으로 나아감은 바로 후퇴하는 법.
위대한 재능은 인생의 후반에야 나타나는 법. 가장 완벽한 프로그램에도 버그는 존재하는 법.
제 2 권 고대(古代)의 도사(道士)들
도사 프로그래머 가라사대 ; “사흘간 프로그래밍을 하지 않으면, 삶에 아무런 의미도 없어지느니라.”
2.1
고대의 프로그래머들은 신비롭고 심오하도다. 우리는 그들의 사상을 감히 측정할 수 없도다. 그리하여 우리는 그들의 외양을 묘사할
수밖에 없도다. 그들은 물을 건너는 여우처럼 빈틈이 없다. 전장에 나선 장군처럼 방심하지 않는다. 손님을 맞는 여주인처럼
친절하다. 조각하지 않은 나무토막처럼 단순하다. 어두운 동굴 속의 검은 연못처럼 불투명하다.
누가 감히 그들의 마음과 생각에 담긴 비밀을 알아낼 수 있으리요? 답은 오직 도 속에 있을 뿐이다.
2.2
위대한 도사 튜링은 어느날 그가 기계가 된 꿈을 꾸었다. 잠에서 깨어난 튜링이 탄식하며 가라사대 : “나는 기계가 된 꿈을 꾸는 튜링인지, 튜링이 된 꿈을 꾸는 기계인지 알 지 못하노라!”
2.3
아주 큰 컴퓨터 회사에서 온 프로그래머가 소프트웨어 전시회에 다녀와 상사에게 이렇게 말하였다. “다른 회사에는 어떤
프로그래머들이 일하고 있습니까? 그들은 멋대로 행동하고 외관에는 신경쓰지 않습니다. 그들의 머리는 길고 텁수룩하며, 그들의 옷은
낡고 구겨졌습니다. 그들은 숙소에서 만취해서 돌아다니며 제가 발표할 동안에 야유를 해 댔습니다.”
상사가 가로되 : “너를 전시회에 보내지 말았어야 했다. 그 프로그래머들은 세상사를 초월한 사람들이니라. 그들은 삶을 어리석은
것으로 여기며, 우연의 일치로 생각한다. 그들은 아무런 거리낌없이 다닌다. 그들은 아무 것에도 신경쓰지 않으니, 그 것은 그들이
프로그램만을 위해 살기 때문이다. 왜 그들이 사회적인 관습 따위에 신경을 쓰겠느냐?”
“그들은 도 속에 살고 있느니라.”
2.4
제자가 스승에게 묻기를: “저 프로그래머는 설계도 않고, 문서 작성도 않으며 자기 프로그램을 테스트해 보지도 않습니다. 하지만 모두 그를 세계에서 가장 뛰어난 프로그래머라고 칭송합니다. 그 이유가 무엇입니까?”
스승이 답하기를: “그 프로그래머는 도를 깨달았느니라. 그는 더 이상 설계할 필요성을 느끼지 않는다. 그는 시스템이 다운 되도
화내지 않으며 그저 우주의 질서를 거리낌없이 받아들이기 때문이다. 그는 더 이상 문서를 작성할 필요가 없다. 그는 다른 사람이
자기가 짠 코드를 이해하건 말건 신경쓰지 않기 때문이다. 그는 테스팅할 필요가 없다. 그가 작성한 프로그램은 모두 그 자체로
완벽하며, 고요하고 또 우아하다. 그의 프로그램은 모두 그 목적이 스스로 뚜렷하기 때문이다. 아, 그는 진정으로 도를 깨달은
사람이니라.”
제 3 권 설계(Design)
도사 프로그래머 가라사대: “프로그램을 테스트하고 있을 때는 설계를 변경하기엔 이미 늦은 다음이니라.”
3.1
옛날에 컴퓨터 전시회에 참석한 사람이 있었다. 그는 매일 전시장에 들어가면서 문 앞에 선 경비원에게 이렇게 말했다.
“나는 상점을 터는 기술로 유명한 도둑이오. 미리 경고하지만 이 전시회도 내 손길을 벗어나진 못할 것이외다.”
그의 말에 경비원은 무척 신경이 쓰였다. 전시회에 출품된 컴퓨터 장비의 가치들이 가히 수십억원에 이르렀기 때문이다. 경비원은
자칭 도둑의 일거수일투족을 감시하였다. 하지만 그는 휘파람을 불면서 전시장에서 전시장으로 돌아다닐 뿐이었다.
자칭 도둑이 전시회장을 나갈 때 경비원은 그를 옆으로 데려가 몸수색을 실시하였다. 하지만 몸에는 아무 것도 없었다.
다음날, 그는 다시 돌아와 경비원의 약을 올렸다. “나는 어제 엄청난 수확을 올렸소. 오늘은 더 많은 것을 훔치고 말테요.” 경비원은 그를 더욱 철저히 감시하였다. 하지만 아무런 소득도 없었다.
전시회가 끝나는 날, 경비원은 호기심을 도저히 억누를 수가 없었다. “도선생, 나는 도저히 이해할 수 없소. 궁금증으로 인해 나는 밤잠을 이룰 수 없을 것 같군요. 제발 나를 깨우쳐 주시오. 당신이 훔친 것은 대체 무엇이요?”
도둑은 가볍게 미소를 지었다. “나는 아이디어를 훔치고 있소.”
3.2
옛날에 한 스승 프로그래머는 늘 구조화되지 않은 프로그램을 짰다. 한 제자가 그를 흉내내기 위하여 구조화되지 않은 프로그램을
짰다. 제자가 스승에게 자신의 성장을 평가해달라고 하자 스승은 프로그램이 구조화되지 않았다며 꾸짖었다. “뱁새가 황새를 따라가면
가랑이가 찢어지는 법이다. 구조를 초월하기 전에 먼저 도를 깨달아야 하느니라.”
3.3
위(魏)나라의 조정에 한 프로그래머가 있었다. 위후(魏候)가 프로그래머에게 묻기를: “회계 프로그램과 운영체제 중에 설계하기 쉬운 것은 어느 쪽이요?”
“운영체제이옵니다.” 하고 프로그래머가 답했다.
위후는 믿을 수 없다는 표정으로 반문하였다. “어찌 회계 프로그램처럼 하찮은 것이 운영체제의 복잡함을 능가한다는 말이요?”
“그렇지 않사옵니다. 회계 프로그램을 설계할 때는 프로그래머가 서로 다른 생각을 지닌 사람들을 조율해야만 하옵니다. 회계
프로그램이 어떻게 작동해야 하며, 보고서는 어떤 양식으로 출력되어야 하며, 세법에는 어느 정도로 충실해야 하는지 각양각색으로
떠들기 마련이옵니다. 반면에 운영체제의 외양에는 아무도 신경쓰지 않사옵니다. 운영체제를 설계할 때는 프로그래머는 기계와
아이디어의 가장 단순한 조화만 추구하면 되옵나이다. 이것이 운영체제가 설계하기 쉬운 까닭이옵니다. 옛말에는 이를 일컬어 사공이
많으면 배가 산으로 간다고 하옵니다.”
크게 감탄한 위후가 미소를 지으며 다른 질문을 던졌다. “그렇구려, 그런데 어느 쪽이 더 디버깅하기 쉽소?”
프로그래머는 아무런 답도 하지 못했다.
3.4
관리자가 도사 프로그래머를 만나 새 애플리케이션의 요구사항을 담은 문서를 건네주었다. 관리자가 묻기를: “다섯명의 프로그래머를 투입한다면 시스템을 설계하는데 얼마나 걸리겠소?”
“일년이 걸릴 것입니다.” 도사가 간단하게 대답하였다.
“하지만 우리는 이 시스템이 지금 당장 필요하단 말이요! 프로그래머를 열명 투입하면 어떻겠소?”
도사는 인상을 찌푸렸다. “그렇다면 이년이 걸릴 것입니다.”
“프로그래머를 백명 투입한다면 어떻겠소?”
도사는 가볍게 한숨을 쉬며 답하였다. “그 경우에는 시스템이 결코 완성되지 않을 것입니다.”
제 4 권 코딩
도사 프로그래머 가라사대: “잘 짠 프로그램은 그 자체로 천국이며, 못 짠 프로그램은 그 자체로 지옥이니라.”
4.1
프로그램은 작고 민첩해야하며, 그 서브루틴은 마치 진주 목걸이처럼 연결되어 있어야 한다. 프로그램의 내용과 정신은 일관적이어야
한다. 프로그램은 너무 작아도 너무 많아도 아니 되며, 필요 없는 루프나 필요 없는 변수가 있어서는 아니 되며, 구조가 없어도
아니 되며 지나치게 경직되어도 아니 된다.
프로그램은 ‘최소 경악의 법칙’을 따라야 한다. 이 법칙이 무엇이냐고? 프로그램은 사용자를 최소로 놀라게 하는 방향으로 반응해야 한다는 뜻이다.
프로그램은 아무리 복잡하더라도 하나의 객체처럼 동작해야 한다. 프로그램은 외관보다는 내부의 논리에 따라 작성되어야 한다.
프로그램이 이러한 요구를 따르지 못하면 무질서와 혼란이 발생한다. 이를 고치는 유일한 방법은 프로그램을 다시 작성하는 것뿐이다.
4.2
제자가 스승에게 묻기를: “프로그램을 짰는데 때로는 작동하고 때로는 작동하지 않습니다. 프로그래밍 법칙을 모두 따랐는데 왜 이런 일이 생기는지 도무지 알 수가 없습니다. 이유가 무엇입니까?”
스승이 답하기를: “너는 도를 깨닫지 못했기에 당황하는 것이니라. 사람들이 이성적으로 행동하리라 믿는 것은 오직 바보뿐이다.
너는 어찌하여 사람이 만든 기계로부터 이성적인 행동을 바라느뇨? 컴퓨터는 결정론을 흉내내는 것뿐이다. 오직 도만이 완전하다.
프로그래밍의 법칙은 일시적이며, 오직 도만이 영원하다. 따라서 너는 깨달음을 얻기 위해 도를 명상해야 할 것이니라.”
“하지만 제가 깨달음을 얻었는지 어떻게 알 수 있습니까?” 제자가 물었다.
“그 때가 되면 프로그램이 제대로 돌아갈 것이다.” 스승이 말했다.
4.3
스승이 도의 본질을 제자에게 설명하고 있었다. “도는 아무리 사소한 것일지라도 모든 소프트웨어 내에 존재한다.” 스승이 말했다.
“휴대용 계산기에도 도는 존재합니까?” 제자가 물었다.
“그러느니라.” 스승의 대답이었다.
“비디오게임에도 도는 존재합니까?” 제자가 물었다.
“비디오게임에도 도는 존재하느니라.” 스승이 말했다.
“퍼스널 컴퓨터의 도스에도 도는 존재합니까?”
스승은 불편한 듯 헛기침을 하더니 자세를 조금 바꾸었다.
“오늘의 수업은 여기까지다.” 스승이 말했다.
4.4
프라이스 왕의 프로그래머가 소프트웨어를 짜고 있었다. 그의 손가락이 키보드 위에서 춤을 추었다. 프로그램은 에러 메시지 하나 없이 컴파일 되었고 마치 봄바람처럼 가볍게 실행되었다.
“기가 막히군! 당신의 기술은 완전무결하구려!” 프라이스가 감탄하며 말했다.
“기술이라고요?” 프로그래머가 터미널에서 몸을 돌리며 말하기 시작했다.
“내가 따르는 것은 모든 기술을 넘어선 도입니다. 내가 처음 프로그램을 작성하기 시작했을 때는 프로그램 전체가 한 덩어리로
보였습니다. 삼년이 지나자 나는 더 이상 덩어리가 보이지 않았습니다. 그 때부터 나는 서브루틴을 사용하기 시작했지요. 하지만
이제는 내게는 아무 것도 보이지 않습니다.
내 존재는 형태 없는 ‘무’속에 존재합니다. 나는 아무런 감각도 느낄 수 없습니다. 내 정신은 아무런 계획도 세우지 않고
자유롭습니다. 그저 본능의 지시에만 따를 뿐. 간단히 말해 내 프로그램은 스스로 작성되는 것입니다. 가끔 어려운 문제가 발생하는
것은 사실입니다. 어려움이 다가오는 것을 다가오면 속도를 늦춥니다. 그리고 조용히 관찰합니다. 그리곤 코드에서 한줄만 바꾸면
어려움은 마치 연기처럼 사라지고 말지요. 그리고 나선 프로그램을 컴파일 합니다. 나는 조용히 앉아 일의 즐거움이 내 존재를 가득
채우는 것을 느끼며 즐깁니다. 나는 잠깐 눈을 감고 명상한 다음 터미널을 끕니다.”
프라이스 왕이 가로되, “내가 고용한 모든 프로그래머들이 그대처럼 현명하기를!”
제 5 권 유지
도사 프로그래머 가라사대: “프로그램의 길이가 세줄밖에 안되더라도, 언젠가는 손 볼 필요가 생기느니라.”
5.1
조심스레 사용한 문의 경첩에는 기름을 칠 필요가 없다. 흐르는 물에는 이끼가 끼지 않는다. 소리도 생각도 진공을 지나갈 수는 없다. 사용하지 않은 소프트웨어는 똥된다.
이들은 모두 위대한 미스터리들이다.
5.2
관리자가 어느날 프로그래머를 불러 물었다. “지금 짜고 있는 프로그램이 언제 끝나겠소?” 프로그래머가 즉시 답하기를. “내일까지 끝내지요.”
“좀 비현실적인 얘기 같군요. 정말로 언제까지 끝낼 수 있습니까?” 관리자가 다시 물었다.
프로그래머는 잠깐 생각을 하더니 말했다. “사실은 약간 추가하고 싶은 기능이 있습니다. 그걸 다 하려면 이주는 걸리겠는데요.”
“그것도 사실 기대하기 힘든 것 같군요. 그냥 프로그램이 완성되면 알려주시오.” 관리자가 툴툴대며 말했다.
프로그래머는 그러마고 답했다.
많은 해가 지나 관리자는 은퇴하게 되었다. 은퇴식장에 가던 도중 그는 프로그래머가 터미널 앞에서 잠들어 있는 것을 보게 되었다. 그는 어제 밤을 새가며 프로그래밍을 했던 것이다.
5.3
어느날 제자 프로그래머가 간단한 회계 프로그램을 짜라는 지시를 받았다. 제자는 많은 날을 열심히 일했다. 스승이 그의 프로그램을
실행해보니 스크린 에디터와 그래픽 처리루틴 몇가지와 인공지능을 응용한 인터페이스가 구현되어 있었다. 하지만 어디에도 회계와
관련된 기능은 없었다.
스승이 이에 대해 묻자, 제자가 시큰둥하게 대답했다. “그렇게 급하게 재촉하지 마세요. 언젠가는 회계에 관련된 기능을 넣을 테니까요.”
5.4
훌륭한 농부가 자신이 심은 쌀 한톨을 소홀히 하는 것을 보았는가? 훌륭한 선생이 반에서 가장 어리석은 학생이라고 무시하는 것을
보았는가? 훌륭한 아버지가 아이를 굶주리게 하는 것을 보았는가? 훌륭한 프로그래머가 코드를 고치는 것을 거부하는 것을 보았는가?
제 6 권 관리
도사 프로그래머 가라사대: “프로그래머는 많이 고용하고 관리자의 수는 줄여라. 생산성이 절로 향상될 것이다.”
6.1
관리자가 끊임없이 회의를 하면 프로그래머는 게임을 짠다. 회계사가 사분기 이익에 대해 불평하면 개발 예산은 삭감될 위기에 처한다. 수석 과학자가 푸른 하늘을 논하면 바람 구름이 몰려든다.
아, 이것은 진정한 프로그래밍의 도가 아니다.
관리자가 결론을 내면, 게임 프로그램은 잊혀진다. 회계사가 장기 계획을 세우면 조화와 질서가 회복된다. 수석 과학자가 신경 쓰기 시작하면 문제는 곧 해결된다.
아, 이것이 진정한 프로그래밍의 도이다.
6.2
프로그래머는 왜 생산성이 낮은가? 그들의 시간이 회의로 낭비되기 때문이다.
프로그래머가 왜 툴툴거리는가? 관리자가 지나치게 참견하기 때문이다.
프로그래머가 왜 하나씩 회사를 떠나는가? 지쳤기 때문이다.
무능력한 관리자 밑에서 일하는 프로그래머는 자신의 직업을 소중히 여기지 않는다.
6.3
관리자가 해고될 위기에 쳐했다. 하지만 그 밑에서 일하던 프로그래머가 새로운 소프트웨어를 개발하여 큰 성공을 거두었다. 결과적으로 관리자는 자리를 지킬 수 있었다.
관리자는 보너스를 주려고 하였지만, 프로그래머는 거절하였다. 프로그래머 가로되. “나는 이 프로그램이 재미있다고 생각했기 때문에 작성했을 뿐입니다. 그러므로 나는 아무런 보상도 바라지 않습니다.”
이 말을 들은 관리자가 말하기를, “이 프로그래머는, 비록 비천한 자리에 있으나, 종업원의 맡은 바 책무가 무엇인지 잘 알고 있다. 그를 보조 관리자로 승진시키도록 하라.”
그러나 이 말을 들은 프로그래머는 다시 한 번 거절하였다. “나는 프로그램을 짤 수 있기 때문에 존재합니다. 만일 승진한다면
다른 사람의 시간을 갉아먹게 될 뿐입니다. 이제 가도 됩니까? 지금 짜고 있는 프로그램이 하나 있거든요.”
6.4
관리자가 프로그래머를 찾아가서 말하기를: “당신의 출근 시간을 조정하기로 했소. 이제부터 아침 9시에 나오고 5시에 퇴근하도록 하시오.” 이 말을 들은 프로그래머들은 모두 분노하였고, 몇몇은 즉석에서 회사를 그만두었다.
그래서 관리자가 말하기를: “좋아요. 그렇다면 작업 시간을 자유롭게 정하도록 하시오. 맡은 프로젝트를 스케줄에 맞게 끝내기만 하면 상관하지 않겠소.” 만족한 프로그래머들은 이제 정오에 출근하여 이른 새벽까지 일했다.
제 7 권 운용의 묘
마스터 프로그래머 가라사대: “사장에게 컴퓨터 프로그램을 보여줄 수는 있다. 그러나 그가 컴퓨터 문맹에서 벗어나게 할 수는 없다.”
7.1
제자가 스승에게 묻기를: “동방에는 본사라는 이름의 거대한 트리구조가 있습니다. 그 트리구조는 부사장과 관리자들로 지나치게
비대해졌습니다. 트리구조는 ‘이리 가라’ 또는 ‘저리 가라’는 메모를 무수히 내려보냅니다. 하지만 아무도 그 메모의 진정한 뜻이
무엇인지는 이해하지 못합니다. 그 가지에는 매년 새로운 이름들이 나붙지만 결국엔 아무런 소용도 없지요. 어떻게 이렇게
부자연스러운 존재가 있을 수 있습니까?”
스승이 답하여 가로되; “너는 이 방대한 구조의 존재를 깨닫고, 거기에 아무런 이성적인 목적도 없다는 사실에 당황하고 있는
것이다. 본사의 그 끊임없는 방향 전환에서 아무런 즐거움도 느끼지 못하겠느냐? 우리를 보호하는 가지 아래서 아무런 방해도 받지
않고 프로그래밍을 할 수 있는 즐거움을 깨닫지 못했느냐? 왜 본사의 존재가 무가치하다는데 신경을 쓰는 것이냐?”
7.2
동방에는 어떤 물고기보다도 더 큰 상어가 있다. 이 상어는 대붕이라는 이름의 새로 변한다. 이 새가 일으키는 바람은 하늘을 가득
채우는 구름과도 같다. 대붕이 땅을 가로지르면 본사에서 보내는 메시지를 가져온다. 이 메시지는 갈매기가 해변에 떨어뜨리는 똥처럼
프로그래머의 수중에 떨어진다. 그 후 대붕은 바람을 타고 푸른 하늘을 등에 업은 채 집으로 돌아간다.
초보 프로그래머는 놀란 눈으로 대붕을 바라본다. 이해할 수 없기 때문이다.
보통 프로그래머는 대붕을 두려워한다. 대붕이 가져오는 메시지가 무섭기 때문이다.
도사 프로그래머는 터미널 앞에 앉아 일을 계속한다. 대붕이 다녀간 것을 알아차리지 못하기 때문이다.
7.3
상아탑에 사는 위대한 마법사가 새로운 발명품을 스승 프로그래머에게 가져왔다. 마법사는 거대한 검은 상자를 밀며 스승의 사무실로 들어왔다. 스승은 조용히 그를 지켜볼 뿐이었다.
“이 것은 통합적으로 분산된 다목적 워크스테이션이요.” 마법사가 자랑스레 말하기 시작했다.
“인간 환경공학적으로 설계된 독점 운영체제와 제6세대 언어, 그리고 복수의 최신 유저 인터페이스를 탑재하고 있지요. 이 워크스테이션을 제작하기 위해 수백명의 조수들이 몇 년이나 일해야 했소이다. 멋지지 않습니까?”
스승은 눈썹을 약간 치켜 뜨며 대답했다. “정말 멋지군요.”
“본사에서는 모든 사람들이 이 워크스테이션을 이용해서 새로운 프로그램을 개발해야 한다고 지시했소이다. 그러시겠습니까?”
“물론이지요. 워크스테이션을 즉시 컴퓨터실로 옮겨두겠습니다.” 스승이 말했다.
마법사는 만족하여 자신의 탑으로 돌아갔다.
며칠 후 제자가 스승 프로그래머의 사무실로 들어와서 물었다. “새로 짠 프로그램의 리스트가 어디 있는지 모르겠어요. 혹시 어디 있는지 아세요?”
“물론이지. 컴퓨터실에 있는 검정색 상자 위에 있다.” 스승이 말했다.
7.4
도사 프로그래머는 프로그램에서 프로그램으로 아무런 두려움 없이 옮겨다닌다. 관리자가 어떻게 변해도 그의 위치는 변하지 않는다. 그는 프로젝트가 취소되더라도 해고되지 않는다. 왜 그럴까? 도사 프로그래머는 도로 충만하기 때문이다.
제 8 권 하드웨어와 소프트웨어
도사 프로그래머 가라사대: “바람이 불지 않으면, 풀은 움직이지 않는다. 소프트웨어가 없으면 하드웨어는 쓸모가 없다.”
8.1
제자가 스승에게 묻기를, “한 컴퓨터 회사는 다른 회사들에 비해 월등히 큽니다. 난쟁이들 사이에 선거인처럼 보입니다. 이 회사의 한 부서만으로도 산업을 일으킬 수 있을 정도입니다. 왜 그렇습니까?”
스승이 답하여 가로되, “왜 그런 어리석은 질문을 하는가? 그 회사는 크기 때문에 큰 것이니라. 만일 그 회사가 하드웨어만
만들었다면 아무도 사지 않았을 것이다. 그 회사가 시스템의 유지보수만 했다면, 사람들은 그 회사를 하인처럼 다루었을 것이다.
하지만 그 회사는 이 모든 일을 하기 때문에 사람들은 그 회사를 신으로 여기는 것이다! 그들은 남들과 경쟁하려 들지 않기
때문에, 아무런 어려움 없이 세상을 정복하는 것이다.”
8.2
어느날 스승이 제자의 곁을 지나치고 있었다. 스승은 제자가 휴대용 게임기에 열중해 있음을 알았다. “미안하지만 내가 좀 볼 수 있을까?” 스승이 물었다.
제자는 깜짝 놀라 게임기를 스승에게 건네주었다. “이 게임은 Easy, Medium, Hard등 세단계로 이루어져 있구나.
하지만 이런 게임기에는 모두 또 다른 레벨이 더 하나 존재하고 있다. 이 레벨에서는 게임기가 사람을 정복하려 들지 않으며,
사람도 게임기를 정복할 수 없다.” 스승이 말했다.
“대단하십니다, 스승님.” 제자가 탄성을 질렀다.
“어떻게 게임기에 또 다른 레벨이 있다는 사실을 알아내셨나이까?”
스승은 게임기를 땅에 떨어뜨리더니 발로 밟아버렸다. 그러자 갑자기 제자는 깨달음을 얻었다.
8.3
개인용 컴퓨터로 작업을 하는 프로그래머가 있었다. 어느날 그는 자신의 작업실에 놀러온 메인프레임 프로그래머에게 자랑하기
시작했다. “나를 좀 보라고. 나 혼자만 쓸 수 있는 운영체제와 하드디스크도 있어. 컴퓨터 용량을 다른 사람과 나누어 쓸 필요도
없지. 소프트웨어는 성능이 우수할 뿐 아니라 쓰기도 편해. 왜 메인프레임처럼 불편한 환경에서 일을 하는 거지?”
그러자 메인프레임 프로그래머는 자신의 시스템을 친구에게 설명하기 시작했다. “메인 프로그램은 컴퓨터실에서 명상하는 고대의
현인처럼 앉아 있다네. 그 디스크 드라이브는 마치 거대한 기계의 바다처럼 서로 연결되어 있지. 소프트웨어는 다이아몬드처럼 다양한
면을 지니고 있으며, 원시림처럼 서로 얽혀있네. 각각 독특한 프로그램들은 마치 거세게 흐르는 강물처럼 시스템으로 들어왔다
나가지. 그게 내가 메인프레임을 좋아하는 이유라네.”
개인용 컴퓨터 프로그래머는 이 말을 듣고 할 말을 잃었다. 하지만 두 프로그래머는 죽을 때까지 친하게 지냈다.
8.4
갠지스 강으로 가던 하드웨어가 소프트웨어를 만났다. 소프트웨어 가로되, “너는 음이요 나는 양이로다. 우리가 함께 여행한다면 크게 유명해지고 많은 돈을 벌 수 있음에 틀림이 없도다.”
그리하여 그들은 한쌍이 되어 세상을 정복할 야심을 품게 되었다.
그들은 찢어진 누더기를 입고 가시나무 지팡이를 집은 채 절름거리는 펌웨어를 만나게 되었다. 펌웨어가 그들에게 가로되,
“도는 음과 양을 넘어 존재하느니라. 도는 호수의 물처럼 조용하고 움직이지 않느니라. 도는 명성을 구치 않으며, 따라서 아무도
그 존재를 알지 못하느니라. 도는 부를 구치 않으니, 도는 그 자체로 완전하기 때문이니라. 도는 시간과 공간을 넘어
존재하느니라.”
크게 부끄러워진 소프트웨어와 하드웨어는 집으로 돌아가고 말았다.
제 9 권 에필로그
마침내 도사 프로그래머 가라사대: “하산하거라.”
————————————————————————————————————————————————-
프로그래밍의 도….
그들은 남들과 경쟁하려 들지 않기
때문에, 아무런 어려움 없이 세상을 정복하는 것
제일 마음에 드는 부분이다.
출처 : http://kldp.org/node/67418
Tags: The Tao of Programming, 도, 철학, 프로그래밍