
잔디밭을 구경하는 한 관광객이 정원사에게 이렇게 완벽한 잔디밭을 어떻게 만들 수 있는지 물었다.
"매일 아침 이슬을 털고, 이틀에 한 번 잔디를 깎고, 일주일에 한 번 잔디를 골라주면 되지요." 정원사는 대답했다.
"그게 다예요?" 관광객은 물었다.
"그게 답니다. 그렇게 500년만 하면 당신 잔디밭도 이 정도로 괜찮아질 겁니다."
실용주의 프로그래머: 1판 서문 - 끊임없는 과정
훌륭한 잔디밭은 하루아침에 생겨난 게 아니다. 여러 세대에 걸친 정원사들이 조금씩 그러나 꾸준히 손질한 결과다. 훌륭한 프로그래머도 마찬가지다. 코드를 작성할 땐 그게 최선이라고 생각했지만 시간이 지나고 돌이켜보면 개선사항을 찾고 수정하곤 한다. 리팩터링의 대상은 코드뿐 아니라 프로그래머도 포함된다.
리팩터링 방식에는 한 번에 모든 걸 고치는 빅뱅 방식과 점진적 방식이 있다. 나는 올해로 26세다. 십수년 된 프로젝트를 한 번에 고친다는 게 얼마나 무모한 일인지 다들 알 것이다. 하물며 26년된 프로젝트를 한 번에 리팩터링한다는 건 두 말할 필요가 없다. 조금씩 그러나 꾸준히 개선사항을 찾고 고치면 어느새 훌륭한 프로그래머가 되어 있을 것이다.
열역학 용어 중 '엔트로피'가 있다. 이는 시스템 내의 무질서한 정도를 의미한다. 세탁기에서 꺼낸 옷을 접어 옷장에 넣지 않고 바닥에 내팽겨치는 건 엔트로피가 증가하는 것이고, 열역학적으로 자연스러운 일이다.
소프트웨어 공학은 엔트로피를 감소하는 데에 목적을 두고 있다. 프로그래머는 자연의 흐름을 거스르는 사람이다. 안타깝게도 열역학 제2법칙에 따라 우주의 엔트로피는 증가할 수밖에 없는데, 이 엔트로피가 우리의 소프트웨어에 많은 영향을 끼친다.
소프트웨어의 무질서도가 증가할 때 우리는 이를 '소프트웨어의 부패'라고 일컫는다. 보다 긍정적으로 표현하면 '기술 부채'라고 부르기도 한다. 은연중에 언젠가는 갚을 수 있다는 뉘앙스를 풍기면서 말이다. 하지만 아마 갚지는 않을 것이다.
실용주의 프로그래머: 1장 실용주의 철학 - 소프트웨어 엔트로피
"내가 담당하는 부분이 아니니까 난 몰라~"
"어차피 문제가 터질 때쯤에는 난 여기에 없어."
문제를 인지했지만 당장 고칠 수 없다면 todo나 fixme 등으로 이를 명시해야 한다. 자리를 떠나야 한다면 인수인계 문서에 이를 기록해야 한다. 그렇게 하지 않는 이들을, 난 '신용불량자 프로그래머'로 정의했다.
왜 엔트로피에 영향을 받아 신용불량자가 발생할까? 이 책에서는 깨진 유리창 이론을 언급한다. 설계 오류, 잘못된 경영, 미흡한 기획 등 유리창이 깨지는 요인이 많다. 이런 요인이 많을수록 구성원의 책임 의식이 결여되고 사기가 저하된다. 곧 프로젝트 실패의 지름길이다.
요즘 들어 퇴근하고 집에 도착하면 한두 시간은 여유가 있는데도, 자기계발해야 하는 걸 알고 있어도, 유튜브를 보다가 잠든다. 내 방에는 턱걸이와 딥스를 할 수 있는 치닝디핑이 있다. 부상을 시작으로 방지했던 운동 기구에 1년짜리 먼지가 쌓여 있다. 이것도 깨진 유리창이 아닐까? 운동 기구에 쌓인 먼지를 볼 때마다 귀찮음과 무기력함이 전염된 것 같다.
오늘 먼지를 닦아내고 운동을 다시 시작했다. 난 나를 리팩터링했다.