작성된 코드는 그 누가 보아도 쉽게 읽혀야 한다.
"읽기 어렵지만 뛰어난 성능을 내는 코드"와 "그럭저럭의 성능이지만 누구나 쉽게 읽을 수 있는 코드" 중 하나를 선택해야 한다면 내 대답은 언제나 후자다. 대부분의 코드나 서비스는 일단 작성되거나 출시된 이후에는 상당 기간 동안 방치되는 경우가 많기 때문이다.
인간의 기억은 시간이 지남에 따라 희미해질 수밖에 없다. 작성 당시에는 스스로 뿌듯할 만큼 정교한 코드로 구현했다 생각하더라도, 몇 달 뒤 그 코드를 변경해야 할 땐 오히려 내가 무엇을 어떻게 구현했는지 이해하는 데 많은 시간이 소요된다.
실제 조사에서도 개발자가 기존 코드를 읽고 이해하는 데 소비하는 시간이 전체 개발 시간의 40~70%에 달한다는 결과가 있다. 새로운 기능을 개발하는 것보다 기존 코드를 이해하고 유지보수하는 것이 훨씬 더 비용이라는 얘기다. (개인적인 경험으로는 이미 서비스 중인 프로젝트 코드라면 새로운 기능을 개발하는 것과 기존 코드를 유지보수하는 것의 비중은 7:3 혹은 8:2 정도가 되는 것 같다.)
여기서 말하는 "읽기 쉬운 코드"란 단순히 문법적으로 간단한 코드를 뜻하지 않는다.
중요한 것은 같은 팀의 모든 구성원이 이해할 수 있는 코드라는 점이다.
예를 들어 자바에서 코틀린으로 전환하는 과정에 있다고 가정하자. 코틀린을 사용하면 더 짧고 세련된 코드를 작성할 수 있지만, 팀 전체의 코틀린 숙련도가 아직 낮다면 예전 자바 스타일의 코드가 오히려 더 읽기 쉬울 수 있다. 이 경우 개인의 아쉬움을 감수하고서라도 팀 전체가 이해할 수 있는 코드를 선택하는 것이 더 낫다.
물론 절대적인 원칙은 없다. 극도로 높은 성능이 필요한 상황에서는 가독성을 희생해야 할 때도 있다. 예를 들어, CPU 연산 부하가 굉장하거나 response latency를 보장할 수 없는 상황에서는 캐싱, 루프 전개, 비트 연산 등 가독성을 해치는 방법을 사용할 수도 있다.
그러나 이 경우에도 "쉽게 읽을 수 없음"을 정당화해서는 안 된다. 복잡한 코드 작성이 불가피하다면, 그 맥락을 충분한 주석과 문서로 보완해야 한다. "가장 읽기 좋은 코드는 주석 없이도 쉽게 이해할 수 있는 코드다" 충분히 공감하는 주장이지만, 이런 상황에서는 적용되지 않는다.
또 하나 자주 간과되는 부분이 있다. 바로 "무지성한 추상화"와 "무지성한 공통화"다. 많은 개발자들이 중복을 죄악시하지만, 중복을 제거하기 위한 추상화가 언제나 정답은 아니다.
위와 같은 경우 차라리 중복을 허용하는 편이 코드를 이해하기 훨씬 쉽다. 추상화는 중복 제거가 목적이 아니라, 의도를 더 잘 드러내는 수단이어야 한다.
코드는 나 혼자 뿌듯해하거나 자기만족을 위해 작성하는 것이 아니다. 1인 개발자가 아닌 이상 코드 작성이란 결국 협업을 위한 절차이며, 미래의 나, 혹은 내 동료가 다시 읽어야 기록이다. 코드가 아니라 단순한 줄글이라 하더라도, 복잡한 문장이나 어려운 구문으로 작성된 글은 읽기 싫은 것과 마찬가지다.
워낙 컴퓨팅 성능이 발전함에 따라 대부분의 성능 문제는 추가 하드웨어 투입과 아키텍처 개선으로 어느 정도 보완할 수 있게 되었다. 하지만 난해하게 작성되어 그 누구도 이해할 수 없는 코드는 쉽게 되돌릴 수 없다.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
컴퓨터가 이해하는 코드는 누구나 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 읽고 이해할 수 있는 코드를 쓴다.
Martin Fowler, 1999
좋은 개발자란 컴퓨터가 잘 이해하는 코드를 작성하는 사람이 아니라, 동료와 미래의 자신이 쉽게 이해할 수 있는 코드를 작성하는 사람이다. AI 도구를 사용하여 누구나 손쉽게 코드를 생성할 수 있는 시대가 와버렸지만, 결국 그 코드를 다시 읽고 이해해야 하는 주체는 아직 인간일 가능성이 높다. 먼 미래에는 모든 코드를 오직 AI만이 읽을 수 있는 시대가 올지도 모른다.
그러나 그럼에도 불구하고 나는 아직 그 누구든 쉽게 읽을 수 있는 코드를 가장 높은 가치라고 생각한다.
2025년 9월 2일. 야근하고 돌아온 집에서 샤워하다가 떠오른 생각을 호다닥 작성하다.