본문 바로가기

실용주의 프로그래머

[실용주의 프로그래머] 소프트웨어 엔트로피

 

1) 서문 

 

- 소프트웨어 개발은 거의 모든 물리 법칙에서 제외되지만, 엔트로피는 우리에게 많은 영향을 끼친다.

  엔트로피는 시스템 내의 '무질서'한 정도를 가리키는 물리학 용어다.

  안됐지만, 열역학 법칙에 따르면 우주의 엔트로피는 점점 증가한다. 

  소프트웨어의 무질서도가 증가할 때, 프로그래머들은 이를 '소프트웨어의 부패'라고 일컫는다.

 

- 소프트웨어가 부패하는 데에는 많은 요소들이 관여한다. 가장 중요한 것은 프로젝트에서 발생하는 심리학적이거나

  문화적인 요소다. 설사 팀이 한 사람으로 구성되었다고 해도, 프로젝트의 심리학은 매우 미묘한 문제일 수 있다.

  최고의 계획, 최고의 사람들이 있다고 해도, 프로젝트는 그 생애 동안 몰락하고 썩어갈 수 있다.

  그렇지만 엄청난 어려움과 끊임없는 방해 속에서 무질서로 향한 자연의 흐름을 거스르고 용케 훌륭하게 끝나는

  프로젝트도 있다. 

 

 무엇이 다른가?

 

- 도심에서 어떤 건물은 아름답고 깨끗한 반면, 다른 건물은 썩어 가는 유령선 같다. 왜? 깨끗하고 온전하며 사람들이

  거주하는 건물이, 부서지고 황폐한 을씨년스러운 곳으로 금세 바뀌어 버리는 이유는 뭘까?

  도시 부패를 연구하는 사람들은 아주 재미있는 유인 메커니즘을 발견했다. 

깨진 창문

 

- 오랜 기간 수리하지 않고, 방치된 창문 하나가 거주자들에게 버려진 느낌을 스며들게 한다.

  당국자들이 그 건물에 별 관심이 없다는 느낌 말이다. 

  그래서 다른 창문이 하나 더 깨진다. 

  사람들은 이제 어지르기 시작한다. 낙서가 등장한다. 심각한 구조적 손상이 시작된다.

  꽤 짧은 시간 안에 소유주가 그걸 고치려는 의지를 넘어설 정도로 건물이 손상되고,

  결국 버려진 느낌은 현실이 되어 버린다. 

 

- '깨진 창문 이론'은 뉴욕과 다른 주요 도시 경찰들에게, 큰일을 막기 위해 조그만 것들을 엄중 단속해야겠다는

  영감을 불어넣어 줬다. 정말 그렇게 된다. 깨진 창문, 낙서, 기타 작은 위반 행위를 잘 단속했으니 중범죄가 줄었다. 

실용주의 프로그래머 Tip 4
깨진 창문을 내버려두지 말라 

 

- '깨진 창문'(나쁜 설계, 잘못된 결정, 혹은 형편 없는 코드)을 고치지 않은 채로 내버려 두지 마라.

  발견하자마자 바로 고쳐라. 적절히 고칠 시간이 충분치 않다면 판자로 덮는 것만이라도 하라.

  불쾌한 코드를 주석처리 하거나, '아직 구현되지 않았음'이라는 메시지를 표시하거나, 가짜 데이터로 대치해 놓거나 하라.

  더 이상의 손실을 예방하기 위해 어떤 조치든 취하고 현 상황을 잘 관리하고 있다는 것을 보여줘라. 

 

- 깨끗하고 잘 기능하는 시스템들이 일단 창문이 깨지기 시작하면, 급속도로 악화되는 것을 많이 보아 왔다.

  소프트웨어의 부패에는 다른 요인들도 있는데, 그것에 대해서는 다른 곳에서 다루겠지만, 

  방치는 다른 어떤 요인보다도 부패를 더 가속 시킨다. 

 

- 여러분은 어쩌면 주변을 돌아다니며 프로젝트의 깨진 우리를 전부 청소할만한 시간이 있는 사람이 없을 거라고

  생각할지도 모르겠다. 만약 계속 그렇게 생각한다면 큰 쓰레기통을 구하거나 아니면 다른 곳으로 이사 갈 계획을 

  세우는 게 나을 것이다. 엔트로피가 우리를 지배하도록 내버려 두지 마라.

 

 

2) 불끄기

- 이와 대조적인 얘기지만, 앤디가 아는 사람 중에 대단히 부유한 사람이 있었다.

  그의 집은 티 하나 없이 깨끗하고 아름다우며, 값을 매길 수 없는 골동품과 예술품으로 가득 차 있었다.

  하루는 거실 벽난로에 너무 가깝게 드리워진 태피스트리에 불이 붙었다.

  사태를 수습하고 집을 구하기 위해 소방서에서 사람들이 달려왔다.

  불이 한창 번지고 있었지만 그들은 불은 그대로 놔둔 채로 멈춰 섰다.

  크고 더러운 소방호스를 집안으로 끌어들이기 전에 정문과 불의 진원지 사이에 있던 매트를 굴려 마느라고.

 

그들은 카펫을 더럽히고 싶지 않았다. 

 

- 분명 꽤나 극단적인 경우이긴 하지만, 이것이 소프트웨어에서 일어나먄 하는 일이다. 

  깨진 창문 하나는 - 조악한 설계의 코드, 형편없는 경영상의 결정 등 프로젝트 기간 동안 팀이 동고동락해야 하는 것들 

  - 내리막길로 가는 첫 걸음이다. 깨진 창문이 꽤 있는 프로젝트를 한다면,

  "나머지 코드가 전부 쓰레기니까 나도 그렇게 하지 뭐."라는 사고로 빠져들기 너무도 쉽다. 

  이 시점까지 프로젝트가 괜찮았다면 큰 상관은 없다. '깨진 창문 이론'이 나온 최초의 실험에서는 버려진 자동차 한 대가

  일주일 동안 아무도 손대지 않은 채 방치되었다. 

  하지만 창문 딱 하나가 깨지자 몇 시간 만에 자동차 내부는 도둑질을 당했고, 차체는 뒤집혀졌다. 

 

- 같은 맥락에서, 코드가 청순할 정도로 아름다운(깨끗하고, 잘 설계되었으며, 우아한) 프로젝트와 팀에 여러분이

  속해 있다면, 아마도 아까 소방관들과 마찬가지로 별도의 특별한 주의를 기울여서 엉망으로 만들지 않도록 

  노력할 확률이 높다. 비록 불길이 일어날지라도(데드라인, 출하 날짜, 시사회 데모 등) 

  엉망진창으로 만드는 첫째 사람이 자신이 되는 것만은 피하려 한다.