Visual Basic, C & C++
기타/참고 분류

프로그래머의 도

컨텐츠 정보

본문

프로그래밍의 도(道)  


=============================================================================== 
THETAOOFPROGRAMMING 
=============================================================================== 


이 글은 월간 마이크로 소프트 1,2 월호에 실린 것으로, 
원래 인터넷 유모란에 있는, Geoffrey James 가 영역하고, 
Seth Robertson 이 필사한 < The Tao of Programming > 이란 글을, 
윤태원(서울대 대학원 섬유공학과)씨가 한역한 것입니다. 

=============================================================================== 

[ 프로그래밍의 도(道) ] 
- The Tao of Programming 


「 도사 프로그래머 가라사대, 숨겨진 에러 코드를 찾아내는 방법을 익혔 
다면 하산할 때가 온 것이니라. 모름지기 프로그램에는 도가 존재하나니 
바로 프로그래밍의 도란 것이니라.」 

목차 
제 1권 : 무(無) 
제 2권 : 고대(古代)의 도사(道士)들 
제 3권 : 설계(Design) 
제 4권 : 코딩(Coding) 
제 5권 : 유지(Maintenance) 
제 6권 : 관리(Management) 
제 7권 : 운용의 묘 
제 8권 : 하드웨어와 소프트웨어 
제 9권 : 에필로그 

=============================================================================== 
무(無) 

제 1권 
=============================================================================== 

도사 프로그래머 가라사대 : 

「 숨겨진 에러 코드를 찾아내는 방법을 익혔다면 하산할 때가 온 것이니 
라. 」 

=============================================================================== 

1.1 

무(無)에서 이상스러운 기운이 생겨났도다. 그 기운은 홀로 외로이 
움직이지 않았다. 그 기운은 움직이지 않았으나 동시에 끊임없이 움직이고 
있었다. 그것이 바로 모든 프로그램의 소스이다. 나는 이름을 알지 못하느니, 
그것을 '프로그램의 도(道)'라고 부르게 되었다. 

도가 위대하다면 운영체제(OS)도 위대하다. 운영체제가 위대하다 
면 COMPILE러도 위대하다. COMPILE러가 아주 위대한 것이라면 애플리케이션 
또한 아주 위대하다. 

사용자는 만족하고 그리하여 세상은 조화로 충만하도다. 프로그 
래밍의 도는 멀리까지 미치며 아침 바람과 함께 돌아온다. 

=============================================================================== 

1.2 

도는 기계어를 낳았다. 기계어는 어셈블러를 낳았다. 어셈블러는 COMPILE 
러를 낳았다. 그리하여 세상은 만(萬)가지도 넘는 언어로 가득하게 되었다. 

모든 언어는 아무리 비천한 것일지라도 그 뜻한 바가 있다. 모든 
언어는 소프트웨어의 음(陰)과 양(陽)을 나타낸다. 모든 언어는 도 안에 
그 자리가 있는 법이다. 하지만 할 수만 있다면 코볼(COBOL)로는 프로그래 
밍하지 말지어다. 

=============================================================================== 

1.3 

처음에 도가 있었다. 도는 시간과 공간을 낳았다. 그리하여 시간과 공간 
은 프로그래밍의 음과 양을 이루게 되었다. 

도를 깨닫지 못한 프로그래머는 언제나 프로그램을 짤 시간과 공 
간이 모자라는 법이다. 도를 깨달은 프로그래머는 언제나 목적을 달성할 
수 있는 충분한 시간과 공간이 있다. 세상의 모든 이치가 그러한 법이 
니.... 

=============================================================================== 

1.4 

현명한 프로그래머는 도를 듣고 따른다. 보통 프로그래머는 도를 듣고 찾 
아본다. 멍청한 프로그래머는 도를 듣고 웃어 넘긴다. 그 웃음이 없었더라 
면 도는 존재하지 않았을 것이다. 

가장 높은 음이 가장 알아듣기 힘든 법. 앞으로 나아감은 바로 후 
퇴하는 법. 위대한 재능은 인생의 후반에야 나타나는 법. 가장 완벽한 프 
로그램에도 버그는 존재하는 법. 


=============================================================================== 
고대(古代)의 도사(道士)들 

제 2권 
=============================================================================== 

도사 프로그래머 가라사대 : 

「 사흘간 프로그래밍을 하지 않으면, 삶에 아무런 의미도 없어지느니라. 」 

=============================================================================== 

2.1 

고대의 프로그래머들은 신비롭고 심오하도다. 우리는 그들의 사상을 감히 
측정할 수 없도다. 그리하여 우리는 그들의 외양을 묘사할 수 밖에 없도 
다. 
그들은 물을 건너는 여우처럼 빈틈이 없다. 전장에 나선 장군처럼 
방심하지 않는다. 손님을 맞는 여주인처럼 친절하다. 조각하지 않은 나무 
토막처럼 단순하다. 어두운 동굴 속의 검은 연못처럼 불투명하다. 
누가 감히 그들의 마음과 생각에 담긴 비밀을 알아낼 수 있으리 
요? 답은 오직 도 속에 있을 뿐이다. 

=============================================================================== 

2.2 

위대한 도사 튜링(Turing)은 어느날 그가 기계가 된 꿈을 꾸었다. 잠에서 
깨어난 튜링이 탄식하며 가라사대 : 

「 나는 기계가 된 꿈을 꾸는 튜링인지, 튜링이 된 꿈을 꾸는 기계인지 알지 
못하노라! 」 

=============================================================================== 

2.3 

아주 큰 컴퓨터 회사에서 온 프로그래머가 소프트웨어 전시회에 다녀와 상 
사에게 이렇게 말했다. 

「 다른 회사에는 어떤 프로그래머들이 일하고 있습니까? 그들은 멋대로 행 
동하고 외관에는 신경쓰지 않습니다. 그들의 머리는 길고 덥수룩하며, 그 
들의 웃은 낡고 구겨졌습니다. 그들은 숙소에서 만취해서 돌아다니며 제가 
발표할 동안에 야유를 해 댔습니다. 」 

상사가 가로되 
「 너를 전시회에 보내지 말았어야 했다. 그 프로그래머들은 세상사를 초월한 
사람들이니라. 그들은 삶을 어리석은 것으로여기며, 우연의 일치로 생각한다. 
그들은 아무런 거리낌없이 다닌다. 그들은 아무 것에도 신경쓰지 않으니, 
그것은 그들이 프로그램만을 위해살기 때문이다. 왜 그들이 사회적인 관습 따위에 
신경을 쓰겠느냐? 」 
「 그들은 도 속에 살고 있느니라. 」 

=============================================================================== 

2.4 

제자가 스승에게 묻기를 
「 저 프로그래머는 설계도 않고, 문서 작성도 않 
으며 자기 프로그램을 테스트해 보지도 않습니다. 하지만 모두 그를 세계 
에서 가장 뛰어난 프로그래머라고 칭송합니다. 그 이유가 무엇입니까? 」 
스승이 답하기를 
「 그 프로그래머는 도를 깨달았느니라. 그는 더 이상 설계할 필요성을 느끼지 
않는다. 그는 시스템이 다운되어도 화내지않으며 그저 우주의 질서를 거리낌 
없이 받아들이기 때문이다. 그는 더 이상 문서를 작성할 필요가 없다. 그는 
다른 사람이 자기가 짠 코드를 이해하건 말건 신경쓰지 않기 때문이다. 그는 
테스팅할 필요가 없다. 그가 작성한 프로그램은 모두 그 자체로 완벽하며, 
고요하고 또 우아하다. 그의 프로그램은 모두 그 목적이 스스로 뚜렷하기 때문 
이다. 아, 그는 진정으로 도를 깨달은 사람이니라.」 


=============================================================================== 
설계(Design) 

제 3권 
=============================================================================== 

도사 프로그래머 가라사대 : 

「 프로그램을 테스트하고 있을 때는 설계를 변경하기엔 이미 늦은 다음이 
니라. 」 

=============================================================================== 

3.1 

옛날에 컴퓨터 전시회에 참석한 사람이 있었다. 그는 매일 전시장에 들어 
가면서 문 앞에 선 경비원에게 이렇게 말했다. 

「 나는 상점을 터는 기술로 유명한 도둑이오. 미리 경고하지만 이 전시회 
도 내 손길을 벗어나진 못할 것이외다. 」 

그의 말에 경비원은 무척 신경이 쓰였다. 전시회에 출품된 컴퓨터 
장비의 가치들이 가히 수십억원에 이르렀기 때문이다. 경비원은 자칭 도둑 
의 일거수일투족을 감시하였다. 하지만 그는 휘파람을 불면서 전시장에서 
전시장으로 돌아다닐 뿐이었다. 
자칭 도둑이 전시회장을 나갈 때 경비원은 그를 옆으로 데려가 몸 
수색을 실시하였다. 하지만 몸에는 아무 것도 없었다. 
다음날, 그는 다시 돌아와 경비원의 약을 올렸다. 
「 나는 어제 엄청난 수확을 올렸소. 오늘은 더 많은 것을 훔치고 말테요.」 
경비원은 그를 더욱 철저히 감시하였다. 하지만 아무런 소득도 없었다. 
전시회가 끝나는 날, 경비원은 호기심을 도저히 억누를 수가 없었 
다. 
「 도선생, 나는 도저히 이해할 수 없소. 궁금증으로 인해 나는 밤잠을 
이룰 수 없을 것 같군요. 제발 나를 깨우쳐 주시오. 당신이 훔친 것은 
대체 무엇이요? 」 
도둑은 가볍게 미소를 지었다. 
「 나는 아이디어를 훔치고 있소. 」 

=============================================================================== 

3.2 

옛날에 한 스승 프로그래머는 늘 구조화되지 않은 프로그램을 짰다. 한 제 
자가 그를 흉내내기 위하여 구조화되지 않은 프로그램을 짰다. 제자가 스 
승에게 자신의 성장을 평가해 달라고 하자, 스승은 프로그램이 구조화되지 
않았다며 꾸짖었다. 
「 뱁새가 황새를 따라가면 가랑이가 찢어지는 법이다. 구조를 초월하기 
전에 먼저 도를 깨달아야 하느니라. 」 

=============================================================================== 

3.3 

위(魏)나라의 조정에 한 프로그래머가 있었다. 
위후(魏候)가 프로그래머에게 묻기를 
「 회계 프로그램과 운영체제중에 설계하기 쉬운 것은 어느 쪽이요? 」 
「 운영체제이옵니다.」 
하고 프로그래머가 답했다. 
위후는 믿을 수 없다는 표정으로 반문하였다. 
「 어찌 회계 프로그램처럼 하찮은 것이 운영체제의 복잡함을 능가한다는 
말이요? 」 
「 그렇지 않사옵니다. 회계 프로그램을 설계할 때는 프로그래머가 서로 
다른 생각을 지닌 사람들을 조율해야만 하옵니다. 회계 프로그램이 어떻게 
작동해야 하며, 보고서는 어떤 양식으로 출력되어야 하며, 세법에는 어느 
정도로 충실해야 하는지 각양각색으로 떠들기 마련이옵니다. 반면에 운영체제의 
외양에는 아무도 신경쓰지 않사옵니다. 운영체제를 설계할 때는 프로그래머는 
기계와 아이디어의 가장 단순한 조화만 추구하면 되옵나이다. 
이것이 운영체제가 설계하기 쉬운 까닭이옵니다. 옛말에는 이를 
일컬어 사공이 많으면 배가 산으로 간다고 하옵니다. 」 
크게 감탄한 위후가 미소를 지으며 다른 질문을 던졌다. 
「 그렇구려, 그런데 어느 쪽이 더 디버깅하기 쉽소? 」 
프로그래머는 아무런 답도 하지 못했다. 

=============================================================================== 

3.4 

관리자가 도사 프로그래머를 만나 새 애플리케이션의 요구사항을 담은 
문서를 건네주었다. 
관리자가 묻기를 
「 다섯명의 프로그래머를 투입한다면 시스템을 설계하는 데 얼마나 걸리겠소? 」 
「 일 년이 걸릴 것입니다. 」 
도사가 간단하게 대답하였다. 
「 하지만 우리는 이 시스템이 지금 당장 필요하단 말이요! 프로그래머를 열명 
투입하면 어떻겠소? 」 
도사는 인상을 지푸렸다. 
「 그렇다면 이 년이 걸릴 것입니다. 」 
「 프로그래머를 백명 투입한다면 어떻겠소? 」 
도사는 가볍게 한숨을 쉬며 답하였다. 
「 그 경우에는 시스템이 결코 완성되지 않을 것입니다. 」 


=============================================================================== 
코딩 

제 4권 
=============================================================================== 

도사 프로그래머 가라사대 : 

「 잘 짠 프로그램은 그 자체로 천국이며, 못 짠 프로그램은 그 자체로 
지옥이니라. 」 

=============================================================================== 

4.1 

프로그램은 작고 민첩해야 하며, 그 서브 루틴은 마치 진주 목걸이처럼 
연결되어 있어야 한다. 프로그램의 내용과 정신은 일관적이어야 한다. 프 
로그램은 너무 작아도 너무 커도 아니되며, 필요없는 루프나 필요없는 
변수가 있어서는 더 더욱 아니된다. 또한 구조가 없어도 아니되며 지나치 
게 경직되어도 아니된다. 
프로그램은 < 최소 놀람의 법칙 > 을 따라야 한다. 이 법칙이 무엇 
이냐고? 프로그램은 사용자를 최소로 놀라게 하는 방향으로 반응해야 한다는 
뜻이다. 
프로

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
기적은 대개 부지런하고 열심히 그것을 좇는 사람에게 찾아간다. 앉아서 기적을 기다리는 사람에게는 영원히 찾아오지 않는다. (클레망스)