1. 코드가 복잡해지는 이유


  1. 세상은 복잡하고, 그 복잡한 세상이 가진 문제들의 복잡도가 코드에 반영된다. (= 요구 사항이 복잡할 때 코드가 복잡해지는 건 단순히 능력 부족에서 기인한 것이 아니라 원래 그렇게 될 수 밖에 없는 것이다)
  2. 이러한 복잡함을 다루기 위해서는 요구 사항에 대한 정보와 이를 처리할 시간과, 능력이 있어야 하는데 현실적인 상황들에서는 대체로 모두 부족하다.
  3. 이미 복잡해진 코드를 수정하는 일의 비용(시장 기회, 개발자의 인건비 등)은 기하급수적으로 증가하고, 방치할 수록 많은 이자를 지불해야 하기 때문에 틈틈이 **“일을 줄이는 일”**을 해야 한다.
    1. 이 “일을 줄이는 일”이란, 1) 빠르게 코드를 이해할 수 있는 코드 구조를 만들고, 2) 하나의 수정 사항으로 인하여 다른 코드에 미치는 영향을 줄이는 것이다.
    2. 수정 사항을 줄이려면 수정의 이유와 시점이 서로 다른 코드들을 분리 / 격리하여 작성해야 한다. 그리고 이러한 목적을 달성하기 위한 여러가지 기법들을 활용할 준비가 되어 있어야 한다.

2. 우리의 일을 최대한 줄이자


하지만 위의 문제들은 너무 어렵고 거대한 주제이다. 우리가 해볼 수 있는 것들은

와 같은 질문들을 통해 최대한 일을 줄여야 한다.

우리는 코드를 ‘추상화’ 하고 ‘리팩토링’을 하고 싶다는 욕구를 느끼게 될 것 이다. 하지만 슬프게도 대체로 그런 시간들이 넉넉히 주어지지는 않고, 막상 시간을 넉넉히 주더라도 만족할만한 결과를 내지 못할 가능성도 꽤 크다.