Computer Science 이야기/Books

[클린코드] 추천사 ~ 1장

Isaac_Lee 2025. 1. 19. 01:17
사소한 곳에서 발휘하는 정직은 사소하지 않다.

사소한 것은 중요하다. 이 책은 사소한 듯 보이나 실제로는 사소하지 않은 내용을 다룬다. 사소한 것들을 신경 쓰지 않을 때 전체적인 매력이 떨어지게 된다. 우리가 설계가 아주 잘되어 있는 집에 입주한다고 하자. 실용성도 좋고 디자인도 멋지게 만들어졌다. 근데 막상 들어가 보니 손잡이가 틀어져있고, 화장실 타일을 삐뚤어져 있으며, 문이 꼭 맞게 닫히지 않는다면 어떨까? 그 집에 대한 매력도가 현저하게 떨어질 것이다. 우리의 코드에도 이런 방식을 취해야 한다. 사소한 것에 성실해지자.

 

우리는 소프트웨어를 만드는데 집중했었다. 하지만 우리는 대부분의 시간을 소프트웨어를 유지보수 하는데 보낸다. 자동차를 정비하고 수리하는 유지보수를 우리는 미루는가? 미룬다면 자동차는 굴러가지 않을 것이다. 필자는 총 주행거리가 27만 km가 넘어가는 차량을 운행 중이다. 하지만 이 차량은 높은 주행거리가 무색하게 정말 (약간의 과장을 보태면) 새 차처럼 운행이 가능하다. 왜 그런가? 오일류 교체 주기를 잘 따르고, 소모품 유지보수를 철저하게 했기 때문이다. 우리는 차량을 유지보수하는 원칙을 코드에도 적용해야 한다. 코드에도 인정사정없이 리팩터링을 수행하고, 매일 매 순간 코드를 검사하고 이상이 없는지 확인하며 예방 정비를 해야 한다.


여러분은 어떤 문안에서 일하고 있는가?

"장인 정신"

 

훌륭한 코드를 작성하기 위해서 우리가 가져야 하는 태도이다. 실용주의 프로그래머라는 책에서도 장인 정신을 언급한다. 하지만 이런 장인 정신은 배우기가 어렵다. 먼저 지식이 있어야 하고 이를 몸으로 익혀 체득해야 한다. 따라서 클린코드의 필자는 이 책을 아주 열심히 독파해야 하는 책이라고 언급한다. 이 책을 통해 클린코드에 대한 경험적, 직관적 추론을 기르기를 소망한다(휴리스틱).


 

깨끗한 코드를 위해 코드를 빨래(?)하고 있다.

 

깨끗한 코드의 필요성에 앞서, ChatGPT 등 생성형 AI가 판을 치는 이 시대에, 과연 "코드"에 대해 배우는 것이 의미가 있냐고 묻는 독자가 있을 수 있다. 모호하고, 추상적으로 요구사항을 전달해 줘도 그 의도를 정확하게 파악하고 코드를 작성해 주는 시대가 오지 않을까? 이 책에서는 그렇지 않을 것을 기대한다.

 

인간의 창의력과 직관은 대단한 무기이다. 그런 무기를 가진 인간조차 고객의 막연한 감정만 갖고는 성공적인 시스템을 구현하지 못한다! 우리는 코드를 통해 결국 요구사항을 구체화하고 표현해 낸다. 결국 정밀한 표현이 필요하다. 따라서 앞으로도 코드는 항상 존재하리라.

 

그럼 이제부터 왜 깨끗한 코드가 필요한지를 알아보자. 왜 우리는 깨끗한 코드를 작성해야 할까? 일단 기능이 동작하게 구현하고, 나중에 수정하면 안 되는 것일까? 나중은 결코 오지 않는다(르블랑의 법칙). 그리고 그렇게 남겨진 나쁜 코드는 야금야금 우리의 생산성을 저하시킨다. 누군가 작성한 코드를 해독하면서 개발을 해야 하며, 이를 방치하면 얽히고설킨 코드에 내 코드를 연결하기 위해 점점 코드의 복잡성은 올라간다. 그러다 결국 생산성은 0에 수렴한다.

 

 

깨끗한 코드를 만드는 노력은 비용을 절감하는 방법일 뿐만 아니라 전문가로서 살아남는 길이다. 이 사실을 인정하길 바란다. 혹자는 이렇게 말할 수 있다. "인정합니다. 하지만 우리의 매니저는 일정과 요구사항을 강력하게 밀어붙여서 따를 수밖에 없습니다." 그들이 일정과 요구사항을 강력하게 밀어붙이는 이유는 그것이 그들의 책임이기 때문이다. 그럼 우리의 책임은 무엇인가? 좋은 코드를 사수하는 것이 우리 프로그래머들의 책임이다. 나쁜 코드의 위험을 이해하지 못하는 관리자의 말을 그대로 따르는 것은 우리의 책임을 저버리는 전문가 답지 못한 행동이다.

 

우리는 새 코드를 짜면서 끊임없이 기존 코드를 읽는다. 우리가 저자이자, 독자인 셈이다. 따라서 우리가 코드라는 글을 쓰는 저자라는 것을 인지하고 독자와 소통의 문제가 없도록 하려는 책임을 다한다면, 우리의 코드 작성 난이도는 낮아질 것이다.

 

보이스카우트에서는 "왔을 때보다 더 깨끗하게 하고 떠나라"는 규칙이 있다고 한다. 우리는 이 규칙을 코드에 적용해서 매번 코드를 작성할 때 전보다 나아지도록 조금씩 노력하면서 작성해 보자. 한꺼번에 많은 시간을 들일 필요도 없다. 시간이 지날수록 코드는 좋아진다.

 

마지막으로 항상 명심해야 하는 인용으로 이 글을 마치고자 한다.

 

빨리 가는 유일한 방법은, 언제나 코드를 최대한 깨끗하게 유지하는 습관이다.