원문작성 [2008/05/05]



그러다가 어느 시점에서 특정한 조건이 충족되면 주어진(자바 언어에서 ArrayList로 선언된) 리스트의 내용을 모두
비워야 하는 순간이 있었다. 필자를 포함한 두 사람은 급히 다음과 같은 코드를 작성했다.


     for (int index = 0; index < list.size(); index++){

            list.remove(index);

     }


필요한 내용을 모두 구현한 다음에 테스트를 수행했는데, 결과가 원하는 대로 나오는 것 같더니, 어느 순간 엉뚱한 결과가 나오기도 했다. 그래서 두 사람은 디버거(debugger)를 돌리면서 변수의 상태를 하나씩 검사하다가 위의 루프에서 오류를 발견하게 되었다.

  버그를 발견한 두 사람은 서로 마주보고 웃으면서 루프의 내용을 다음과 같이 고쳤다.


     for(int index = list.size() - 1; index >= 0; index--){

            list.remove(index);

     }


프로그램은 정상적으로 동작했고 모든 것이 해결되었다. 하지만 두 사람이 급하게 작성한 코드를 제3자에게 검토(review)해달라고 부탁했을 때 제3의 프로그래머는 위의 루프가 도대체 왜 필요하냐고 말하더니, 코드를 이렇게 고쳤다.


       list = new ArrayList();


  우주의 법칙이 그렇듯이 살아있는 소프트웨어는 항상 복잡성, 즉 엔트로피가 상승하는 방향으로 운동하는 속성을 가지고 있다. 사용자의 요구조건이 늘어날수록, 프로그래머의 수가 증가할수록, 소프트웨어의 생명주기가 길어질수록, 소프트웨어의 엔트로피는 상승한다.

아무리 깔끔하고 단정하게 설계된 소프트웨어라고 하더라도 이와 같은 우주의 법칙을 거스를 도리는 없다. 커니건과 파이크가 지적한 네 가지 속성을 아무리 철저하게 구현한 프로그램이라고 해도 몇 사람의 프로그래머가 거쳐 가고 나면 깔끔하던 코드는 불어터진 스파게티처럼 보기 흉한 밀가루 반죽이 되어버린다.


- 이야기 셋. 리팩토링



어려운 문제를 드디어 풀어냈다는 성급한 기대가 K씨의 심장을 빠르게 뛰게 만들었다.

사실 프로그래머가 이와 같은 '유레카'의 순간에 느끼는 순백의 열정은
사랑에 빠진 청춘의 감격과 별로 다를 것이 없다.

적어도 그 순간만큼은 세상의 모든 사물이 그 자리에서 동작을 멈추고 시간이 정지한다.

논리의 미로를 더듬어 나가는 프로그래머의 영혼과 차츰 모습을 드러내는 숨은 그림을 제외하고

세상에 존재하는 것은 아무 것도 없게된다.

그러니까 고도로 집중되어 있는 그 순간의 환희를 위해서 
프로그래머는 평생을 비트의 세계에서 떠나지 못하는 것이다.


- 프로그래머 K씨의 하루




<임백준의 소프트웨어 산책>

임백준 지음

한빛미디어, 2005

'암묵지 > 추억의 책장' 카테고리의 다른 글

연인 서태후  (0) 2008.08.22
이외수가 전해주는 마음의 열쇠, 뼈  (0) 2008.08.22
임백준의 소프트웨어 산책  (0) 2008.08.22
난장이가 쏘아올린 작은 공  (0) 2008.08.22
백만불짜리 습관  (0) 2008.08.22
배려  (0) 2008.08.22

+ Recent posts