본문 바로가기

programming/참고사이트

어린왕자 프로그래머 Version!!

출처:http://j.mp/bb5Mc0 저 또한 퍼온 글입니다. 문제가 될시 자삭하도록 하겠습니다.


인터넷 어느 사이트에서 본글입니다,

재미 있어서 한번 올려 봅니다.

제가 본 사이트 올려 놓으신 분도 다른데서 보신거라 하여, 원작자의 허락을 득하지 못했습니다. 혹, 문제가 된다면 자삭 하겠습니다. (올라온지는 좀 되었더군요.)

 

 

            *                                        *                                          *

 

 

제 2장. 

..... 
해가 뜰 무렵, 야릇한 목소리가 나를 깨웠다. 그 목소리는 말했다. 
"양 한 마리를 보여줘!" 
"뭐라구?" 
..... 
"부탁이야... 양을 한 마리 그려줘..." 
그래서 나는 다음과 같은 코드를 보여주었다. 

printf("Sheep.\n"); 

그러자 그는 주의 깊게 바라보더니, 
"안 돼! 이 양은 stdio.h를 include 해야 하는 걸." 이라고 말했다. 
그래서 난 친절하게 다음과 같은 코드를 보여주었다. 

putchar('S'); putchar('h'); putchar('e'); putchar('e'); putchar('p'); 

"코드가 너무 지저분에.. 나는 깔끔한 양을 원한다고." 

나는 디버깅을 계속해야 했으므로 더 이상 참지 못하고 다음과 같이 썼다. 
Class Box: 
Object sheep; 
void peek(); 
.... 
"이건 상자 클래스야. 네가 원하는 양은 peek() 메쏘드로 호출할 수 있어." 
그러나 나의 어린 슈퍼바이저의 얼굴이 환히 밝아지는 것을 보고 나는 놀라지 않을 수 없었다. 
"이게 바로 내가 원하던 거야! 이 peek()는 메모리를 많이 써?" 
"왜 그런 걸 묻지?" 
"내 컴퓨터는 아주 옛날 꺼거든..." 
"거기 있는 걸로 아마 충분할 거야. 네게 준 것은 기본 자료구조를 사용했으니까." 

이렇게 나는 어린 왕자를 알게 되었다. 

제 4장 
.... 
나는 어린 왕자가 쓰던 시스템이 B612 시스템이라는 근거를 가지고 있었다. 이 시스템은 터키 계산학자가 1999년 이후에 제시하였던 모델이었다. 
그 당시 그는 그 모델이 훌륭하게 작동한다는 것을 보였다. 하지만, 그의 논문은 후줄근한 폰트로 작성되어 있었기 때문에 아무도 그 논문에 관심을 가지지 않았다. ... 2009년 그가 간지나는 IEEE 형식의 논문으로 작성하자 모두들 그 논문을 인정했다. 

내가 이렇게 자세하게 이야기하는 이유는 어른들 때문이다. 어른들은 숫자를 좋아한다. 
새로 짠 프로그램의 이야기를 할 때면 그들은 가장 긴요한 것은 물어 보는 적이 없다. 

" 그 프로그램은 어떻게 동작하지? 그 칩은 무슨 일을 하지? 칩의 형태는 어떻지?" 

라는 말을 하지 않는다. 

" 그 프로그램의 용량은 얼마지? 그 칩의 가격은 얼마고? 수행시간은 몇 초지?" 

라고 그들은 묻는다. 

그제서야 그들은 다 이해했다고 생각하는 것이다. 만약 어른들에게 
" 메인보드에는 RAM이 아름답게 꽃혀있고 슬림한 케이스를 가지고 있었어요."라고 말하면 그들은 알지 못한다. 그들에게는 "쿼드코어에 1TB 하드를 가진 컴퓨터"를 봤다고 말해야 한다. 그러면 그들은 "아, 참 좋은 컴퓨터구나!" 하고 소리친다. 

 

 
 
3장 
어린 왕자가 어떤 시스템을 사용해왔는지 아는데는 오랜 시간을 알았다. 나는 어쩌다 들려오는 명령어들을 흘려 듣고 모든 것을 알게 되었다. 

가령, 그가 처음으로 나의 ipad를 보았을 때 (내 ipad는 그릴 수 없다. 저작권 문제 때문에..) 
그는 이렇게 물었다. 

"이 물건은 뭐야?" 

"그건 물건이 아니야. 그건 아이패드야. 내 아이패드." 

나는 내가 무선으로 접속한다는 것을 자랑스럽게 말했다. 

.... 
그러자 그는 큰 소리로 외쳤다. 

"그럼 아저씨도 다른 시스템 프로그래머였구나? 어느 개발환경에서 왔어?" 

나는 그 말을 듣자, 수수께기 같은 그의 경력에 한 줄기 실마리를 잡은 듯했다. 

.... 

그는 생각에 잠긴 듯 한동안 말이 없더니 이렇게 대답했다. 
"잘 됐어. 아저씨가 짠 클래스는 다른 어플리케이션에서도 사용할 수 있을꺼야." 
"물론이지. 그리고 네가 얌전히 굴면 peek()를 iterating 할 수 있는 메쏘드도 짜줄게." 

"iterating? 그것 참 괴상한 생각이다!" 
"그렇지만 일일이 peek()하면 귀찮을텐데." 
... 
그 때 어린 왕자는 엄숙하게 말했다. 
"괜찮아. 내 시스템은 아주 작은 시스템이야." 
그리고는 어쩐지 쓸쓸한 목소리로 덧붙였다. 
"몇 번 호출해봤자, 그렇게 많이 메모리를 쓸 수도 없어...." 


5장. 
..... 
어린 왕자가 느닷없이 물었다. 
"아저씨가 짠 코드에는 memory leak이 있지는 않겠지?" 
"그럼 자바에는 garbage collector가 있어서... 근데 왜 그렇게 간단한 프로그램에 대해서 메모리 누수를 걱정하지?" 

어린 왕자는 "아이 참!" 이면서 당연한 듯이 대꾸했다. 따라서 나는 그에 대해서 한 참을 생각해야 했다. 

어린 왕자가 가지고 있는 시스템은 많은 응용 프로그램들과 시스템 프로그램들이 
(그가 말하는 수준으로 봐서는.) 구동되고 있었다. 실제로 돌아가는 프로그램이라면 
내버려 두어야 한다. 

하지만 나쁜 프로그램이라면 바로바로 메모리에서 detach 시켜버려야 한다. 가장 무서운 것은 
garbage 들이었는데 (C의 경우라면 heap에 쓰고 free시켜주지 않은..) 이 녀석들은 바로바로 
free해주지 않으면 그 때는 정말 제거할 방법이 없는 것이다. 
불행히도 어린왕자의 시스템은 매우 작아서 그런 쓰레기들이 많이 차지하게 되면 
정작 중요한 프로그램은 하나도 돌릴 수 없게 되어버리는 것이다. 
 
 
6장 
... 
나흘째 되는 밤, 나는 그 새로운 사실을 알았지. 네가 내게 이렇게 말했거든. 
"나는 프로그램을 release하는 것을 좋아해. 빨리 source-forge에 배포해줘." 
"기다려야지..." 
"뭘 기다리지?" 
"프로그램이 다 구성될 때까지 기다려야지." 
너는 처음에는 몹시 놀랐지만 웃음을 떠트리면서 이렇게 말했지. 
"아직 집에 있는 건만 같거든!" 
물론 프로그램을 다 구성해서 완료하는 것은 있는 일이다. 불행히도, 프로젝트가 조금 더 크거나 하면 새로운 버전을 내는 것은 너무 어려운 일이다. 하지만, 너는 간단한 프로그램만 짜니 몇 분만 컴파일 하면 되었겠지. 

"어느 날 나는 마흔 네번이나 revert 한 적이 있었어!" 
그리고는 잠시 후 너는 다시 말했지. 
"몹시 슬플 때에는 같은 코드를 조금만 수정해서 컴파일을 하게되지..." 
"마흔 네 번 revert 한 날 그럼 너는 매우 슬펐니?" 
그러나 어린 왕자는 대답하지 않았다. 

10장 
... 
그래서 그는 이웃의 다른 시스템을 가진 사람들부터 먼저 가기로 했다. 
첫 번째로 찾아간 네트워크는 직장 상사의 것이었다. 
그는 와이셔츠와 빨간 색 넥타이를 매고 회전식 듀오백에 앉아있었다. 

"아! 부하 직원이 한 명 찾아왔군!" 어린 왕자가 오는 것을 보고 상사가 말했다. 
.... 
상사에게는 세상이 다 부하 프로그래머인 것이다. 
어린 왕자는 너무 피곤했으므로 하품을 했다. 
"어린 왕자씨, 오늘도 야근인 것 알죠?" 그것을 본 상사가 말했다. 
"하지만, 너무 피곤해요. 쭉 월화수목금금금이었잖아요." 
"그렇다면 오늘은 조금 일찍 퇴근하도록 하세요. 칼퇴근 해보는 것도 여러 날이 지났을 테니까요. 상사가 퇴근하지 않는데 어린 왕자씨가 퇴근 하는 것은 신기한 구경거리에요. 자~ 한 번 잘 퇴근해보세요." 
"그렇게 말씀하시니까 겁이 나서... 감히 퇴근을..." 
"흠! 그러면 별 문제 없겠군요..... 그렇다면 퇴근을.." 
그가 뭐라고 중얼되었다. 화가 난 기색이었다. 
왜냐하면 그 직장 상사는 납기일을 몹시도 의식하는 사람이었기 때문이었다. 그렇기 때문에 중요한 시간에 칼퇴근을 한다는 것은 있을 수 없는 일이었다. 물론 그는 모든 시간을 중요하게 여겼기 때문에 어쨌든 야근은 존재하는 것이었다. 
"만약 디버깅을 하지 않다가 중요한 버그가 들어와서 업체로부터 클레임을 받게 된다면, 그래서 담당자가 문책당해야 한다고 주장한다면, 그래서 누군가 책임진다면 내 잘못인가요? 어린 왕자씨 잘못인가요?" 
"당연히 상사의 잘못이시죠..." 어린 왕자가 조심스럽게 말했습니다. 
"맞습니다. 완벽한 프로그래밍은 완벽한 디버깅에 근거해야 하는 겁니다. 물론 우리 손에 닿지 않는 버그는 어쩔 수 없겠지만, 우리가 할 수 있는 것은 해야지." 

... 
"이제 저는 이 곳을 떠나봐야 겠습니다!" 어린 왕자가 말했다. 
"아니, 떠나지 마세요, 떠나지 마세요. 당신에게 새로운 잔업을 드리죠." 필사적이 된 상사가 말했다. 
"무슨 잔업이요..." 어린 왕자가 힘없이 말했다. 
"버그 잡는 겁니다." 
"아니.. 이제 보이는 버그는 다 고쳤는데요?" 
"사내 대화 프로그램의 버그를 고쳐달라는 요구가 있어서요." 
.... 
어린 왕자는 머뭇거리다가 한 숨을 내쉬고 길을 떠났다. 
"그러면 인사고과에 좋지 못할텐데요!" 상사가 위엄에 넘치는 표정으로 외쳤다. 
(어른들은 참 이상하군) 하고 어린 왕자는 속으로 중얼거렸다. 

11장 
두번째로 찾아간 사람은 속칭 재야의 고수였다. 
"아! 나의 우월한 배포판을 받을 사람이 찾아온다!" 고수가 말했다. 자신의 배포판을 쓰는 사람들을 고수는 측은한 눈으로 처다보기 마련이다. 
.... 
" 너는 정말로 나를 무척 숭배하니?" 
"'숭배한다'는 게 무슨 뜻인데요?" 
"'숭배한다'는 것은 내 창작물이 매우 우월하고 또 아름다워서 너의 디자인 실력으로 감히 흉내낼 수 없어서 "최고에요!"라는 리플을 달거나 추천을 하는거지." 
"하지만 아무도 그 창작품을 쓰지 않잖아요?" 
"나를 기쁘게 해다오. 아무튼 나를 숭배해다오!" 
"아저씨를 숭배해요." (아무튼 다른 대안이 없었기에) 어린 왕자는 말했다. 
그리고 어린 왕자는 떠났다. 어린 왕자는 (어른들은 아무래도 좀 이상해.)라고 이렇게만 생각했다. 

12장 
그 다음 별에서는 디버깅하는 사람이 살고 있었다. 
그 방문은 매우 짧았지만 어린 왕자를 깊은 우울에 빠뜨렸다. 
"뭘하고 있어요?" 코드 한 무더기와 주석 한 무더기를 앞에 놓고 말없이 손을 놀리는 그 사람에게 어린 왕자가 말했다. 
"디버깅을 하고 있지." 침울한 표정으로 그가 말했다. 
"왜 디버깅을 해요?" 
"버그를 잡기 위해서지." 머리를 숙이며 그가 말했다. 
"왜 버그를 잡아요?" 
"깔끔하고 아름다운 프로그램을 위해서지." 그가 대답했다. 
"왜 그런 프로그램을 짜죠?" 
"그래야 디버깅이 쉽거든!" 이렇게 말하고 그 사람은 침묵을 지켰다. 
(어른들은 참 이상하군)하고 어린 왕자는 속으로 중얼거렸다. 
 
 
13장 
네 번째로 찾아간 곳은 파일 공유자가 살고 있었다. 어찌나 모니터에 얼굴을 처 박는 지 어린 왕자가 도착했을 때도 고개조차 들지 않았다. 
"안녕하세요. 라면이 불었어요." 어린 왕자가 책상위의 컵라면을 보고 말했다. 
"여기 이 파일 셋에 토렌트의 파일 두 개에 다시 아까 파일구리에 올려놓은 거 열 개를 더하고.. 안녕. 그리고 빅파일로 보낼게 서른 여섯 개고... 후유! 그러니까 다 합치면 512GB, 일만 사천 사십개 하고 한 개가 되는 구나." 
"뭐가 만 개나 되는거야?" 
"응? 너 아직도 거기있니? 너무 바빠서 ....다시 셋에 둘을 더하면" 
"뭐가 만개나 되는건데?" 어린 왕자가 다시 물었다. 
실업가가 머리를 들었다. 
"내가 2009년 12월 25일에 컴퓨터를 부팅한 이후로 방해 받은 것은 딱 세 번이야. 첫번째는 DDos 공격에 서버가 맛이 갔을 때였고, 두 번째는 신경통 때문이었지.. 나는 이 자세로 컴퓨터를 하니까.. 그리고 음.. 세 번째는 바로 지금이야!" 
.... 
"만 개나 되는 파일을 들고 뭐하는 거야?" 
"뭘 하느냐고?" 
"그래." 
"아무것도 하는 것 없어. 그것들을 소유하고 있지." 
"파일을 소유하고 있다고?" 
"그래." 
"하지만 내가 전에 본 어떤 약관에 따르면...." 
"회사들은 컨텐츠를 소유하지 않아. 그들은 <판매하지>. 그건 아주 다른 애기야." 
"그럼 아저씨에게 파일을 소유하는 게 무슨 소용이 돼?" 
"마일리지가 올라가지." 
"마일리지가 올라가는 게 무슨 소용이 있어?" 
"다른 파일들을 고속으로 다운 받는데 소용되지." 
(이 사람도 디버깅 하는 사람 처럼 말하고 있군) 하고 어린 왕자는 생각했다. 
.... 
"그럼 아저씨는 파일들 가지고 뭘 해?" 어린 왕자는 말했다. 
"그것들을 하드에 압축해서 넣어두지. 그리고 조각 모음을 쉴 새 없이 하는 거야. 그것은 힘든 일이지." 
어린 왕자는 그래도 흡족해 하지 않았다. 
"나는 말이야. 내 오픈 오피스로 수치작업을 할 수 있고, 브라우저로는 네트워크에 접속할 수 있어. 하지만 아저씨는 그렇게 불법으로 얻은 프로그램으로 아무것도 못 하잖아!" 
"그럴 수는 없지. 하지만 그것들을 공유할 수는 있거든." 
"그게 무슨 말이야?" 
"파일 공유 사이트에 내 파일들을 압축해서 올려놓는거지." 
"그리고 그 뿐이야?" 
"그 뿐이지." 
... 
(어른들은 정말 아주 이상 야릇하군)하고 어린 왕자는 혼자 속으로 중얼거릴 뿐이었다. 

14장. 
다섯 번째로 찾아간 곳은 아주 재미있는 곳이었다. 그곳에는 굉장히 큰 컴퓨터와 프로그래머 한 사람이 있었을 뿐이었다. 그 사람은 계속해서 어떤 게임의 패치를 만들고 있었다. 
... 
그 사람에게 다가가서 어린 왕자는 공손하게 인사했다. 
"안녕. 그건 명령이야." 패치 만드는 사람이 말해따. 
"명령이 뭔데?" 
"그것은 새 패치를 만드는 거지. 자 여깄어." 
그리고 그는 다시 새롭게 덮어 쓴 USB를 주는 것이었다. 
"왜 다시 USB를 줬어?" 
"명령이야." 
"무슨 말인지 모르겠는걸." 어린 왕자가 말했다. 
"명령은 명령이니까. 자 여기 새로운 버전이야" 
그리고 그는 손수건으로 땀을 닦고 열심히 코딩하는 것이었다. 
"나는 정말 고된 직업을 가졌어. 전에는 무리가 없었는데. 그냥 매 년 혹은 매 달 컨텐츠를 새롭게 꾸몄으면 되었었지. 그러면 나머지 시간에는 유지보수만 했으면 되었거든. 
"그럼, 그 후 게임이 망했어?" 
"아니, 안 망한게 더 문제지! 유저들은 갈수록 컨텐츠들을 빨리 소비하고 있기 때문에 내 상관들은 계속해서 패치를 만들어 내길 원했어." 
"그래서?" 
"그래서 이 게임의 컨텐츠는 1분에 1번씩 조금씩 바뀐단다. 예를 들면 NPC의 옷 색깔이 조금 바뀐다던가.." 
"그것 참 이상하네! 아저씨네 게임은 계속 패치가 되다니!" 
"조금도 이상할 것 없지. 우리가 이야기 하고 있는 사이에 벌써 새 던전의 프로토타입이 공개되었어."(아마 이것은 컴퓨터가 매우 좋았기 때문이며 이런 개발자들이 수도 없이 많이 있기 때문이리라.) 
"벌써?" 
... 
그가 그 축복받은 곳을 잊지 못하는 것은 스물 네 시간동안에 천 사백 사십 개의 버전업을 할 수 있었기 때문이었는데, 그것은 어린 왕자가 차마 스스로에게도 고백하지 못하는 것이었다.