보이 스카웃 규칙
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라
개요
The Boy Scout Rule : "Always leave the campground cleaner than you found it."
보이 스카웃 규칙 : 언제나 처음 왔을 때보다 깨끗하게 해놓고 캠프장을 떠날 것.
인용
97 Things Every Programmer Should Know 에서
[[/Clean-Code]]의 저자인 Uncle Bob이 작성한 문서이기 때문에 내용 대부분은 비슷하다.
다음은 위의 글을 번역한 것이다.
보이 스카웃에는 "언제나 처음 왔을 때보다 깨끗하게 해놓고 캠프장을 떠날 것"이라는 규칙이 있습니다. 엉망으로 어질러져 있는 곳을 발견하면, 일단 청소하세요. 누가 그렇게 했는지는 생각하지 마십시오. 다음으로 야영하러 오는 사람들을 위해 신경써서 환경을 개선하세요. 이 규칙은 원래 스카우팅의 아버지인 Robert Stephenson Smyth Baden-Powell이 남긴 글에서 나온 것입니다. 그는 "처음 왔을 때보다 더 나은 세상을 만들고 떠나려 노력하라"라고 한 바 있습니다.
비슷한 규칙을 코드에 적용해 보면 어떨까요? "작업을 완료하고 체크아웃 할 때에는 체크인 했을 때보다 모듈을 깨끗하게 할 것." 정도가 되겠군요. 원래 코드를 작성한 사람이 누구이건 간에, 우리 모두가 조금씩 노력하여 모듈을 개선시켜 나간다면 어떻게 될까요?
제 생각에 우리가 이 단순한 규칙을 실천한다면, 시스템의 오랜 문제점들이 사라져가는 것을 볼 수 있을 거라 봅니다. 나아가 우리의 시스템은 점차 발전해 더 좋아질 겁니다. 또한 각자 맡은 작은 부분만을 담당하는 개개인의 집합이 아니라 시스템 전체를 돌보는 팀을 볼 수 있을 겁니다.
저는 이 규칙을 지키는 것이 무척 까다롭다고는 생각하지 않습니다. 작업을 끝내기 전에 모듈을 완벽하게 만들라는 말이 아닙니다. 그냥 작업을 시작했을 때보다 약간만 더 좋아지게 하면 됩니다. 물론 모듈에 막 추가한 코드가 깨끗해야 하는 건 당연하고요. 정리하자면 작업한 모듈을 체크아웃 하기 전에 적어도 한 가지를 깨끗하게 하자는 것입니다. 예를 들어 변수 하나의 이름을 더 읽기 좋게 개선할 수 있을 겁니다. 큰 함수 하나를 작은 함수 두 개로 쪼갤 수도 있겠죠. 순환 참조 문제를 고치거나 인터페이스를 추가해 정책 코드를 분리할 수도 있습니다.
솔직히, 제게는 일반적인 행동 양식에 대한 말처럼 들립니다. 화장실에서 일을 보고 손을 씻거나, 쓰레기를 바닥에 버리지 않고 쓰레기통에 넣는 것처럼 말이죠.
코드에 똥을 싸놓는 일은 노상방뇨처럼 모두가 용납하지 않는 행위여야 합니다. 그런 것은 그냥 놔둬서는 안 됩니다.
하지만 그뿐만이 아닙니다. 사실 내가 작성한 코드만 관리하는 것도 그런 종류의 일에 속합니다. 반면 모두가 힘을 합쳐 팀의 코드를 관리하는 것은 완전히 다르다고 할 수 있습니다. 팀끼리 서로 도와가며, 서로의 코드를 청소해 나가는 것입니다. 그런 팀의 사람들이 보이스카웃 규칙을 따르는 이유는 자기네들에게 좋은 영향을 주는 규칙이어서가 아닙니다. 그 규칙이 세상의 모든 이에게 좋은 영향을 주기 때문에 따르는 것입니다.
by Uncle Bob
이 글의 라이선스는 Creative Commons Attribution 3을 따릅니다.
Clean Code 에서
- [[/Clean-Code]] - 1장 깨끗한 코드. 18쪽.
잘 짠 코드가 전부는 아니다. 시간이 지나도 언제나 깨끗하게 유지해야 한다. 시간이 지나면서 엉망으로 전락하는 코드가 한둘이 아니다. 그러므로 우리는 적극적으로 코드의 퇴보를 막아야 한다.
미국 보이스카우트가 따르는 간단한 규칙이 우리 전문가들에게도 유용하다.
캠프장은 처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.
체크아웃할 때보다 좀 더 깨끗한 코드를 체크인한다면 코드는 절대 나빠지지 않는다. 한꺼번에 많은 시간과 노력을 투자해 코드를 정리할 필요가 없다. 변수 이름 하나를 개선하고, 조금 긴 함수 하나를 분할하고, 약간의 중복을 제거하고, 복잡한 if 문 하나를 정리하면 충분하다.
클린 코더에서
- 클린 코더 - 1장 프로의 마음가짐. 54쪽.
코드를 조금 바꾸는 일은 언제 해야 할까? 항상 해야 한다! 모듈을 살펴볼 때마다 작고 가벼운 변화를 더해 구조를 개선해야 한다. 코드를 읽을 때마다 구조를 바꿔야 한다.
어떤 사람들은 이런 철학을 무자비한 리팩토링이라 부르지만, 나는 '보이 스카웃 규칙'이라 부른다. 보이 스카웃 규칙이란 모듈을 체크인할 때는 항상 체크아웃했을 때보다 깨끗해야 한다는 규칙이다. 코드를 볼 때마다 착한 일을 하라.
이는 보통 사람들이 소프트웨어에 대해 생각하는 방식과 정반대다. 사람들은 동작 중인 소프트웨어를 계속 바꾸는 일이 위험하다고 생각한다. 아니다! 정말 위험한 일은 소프트웨어를 고정된 상태로 두는 일이다. 소프트웨어를 구부리지 않는다면, 정말 변화가 필요할 때, 소프트웨어가 단단히 굳어있을 것이다.
왜 개발자들은 코드 바꾸기를 무서워할까? 코드를 망가트릴까 봐 겁이 나서다! 왜 코드를 망칠까 봐 겁이 날까? 테스트가 없기 때문이다.
The Nature of Software Development 에서
- Chapter 19. 리팩토링.
가장 훌륭한 개발 방법은 야영지 규칙(Campground Rule)을 따릅니다. 야영지는 그곳을 발견했을 때보다 떠날 때 더 나은 곳이어야 한다는 규칙입니다. 피처를 추가할 때마다 주변 코드를 깔끔하게 정리하면서 시작하세요. 완벽할 필요는 없습니다. 피처가 쉽게 자리잡을 수 있는 정도면 충분합니다. 항상 그랬듯이, 피처가 작동한 이후에는 코드를 정리하세요. 정리는 자주 할수록 좋습니다.
(중략)
개발자는 항상 모든 것을 뒤엎고 새로 시작하고 싶은 유혹에 빠집니다. 그것은 절대 최선책이 될 수 없습니다. 대신, 리팩토링을 잘하고 야영지 규칙을 따르세요.
From: 소프트웨어 장인 정신 이야기
- 소프트웨어 장인 정신 이야기. 2장. 39쪽.
받았을check out 때보다 더 깨끗한 코드를 제출check in하라.
참고문헌
- Clean Code / 로버트 C. 마틴 저/박재호, 이해영 역 / 인사이트(insight) / 2013년 12월 24일
- The Nature of Software Development 론 제프리스 저 / 이기곤 역 / 한빛미디어 / 2017년 01월 01일
- 소프트웨어 장인 정신 이야기 / 로버트 C. 마틴 저/정지용 역 / 인사이트(insight) / 초판 1쇄 발행 2023년 03월 09일 / 원제: Clean Craftsmanship: Disciplines, Standards, and Ethics
- 클린 코더 - 로버트 마틴 저 / 정희종 역 / 에이콘출판사 / 2016년 07월 20일 / 원서 : The Clean Coder: A Code of Conduct for Professional Programmers