simple과 easy. 이 두 용어의 차이는 무엇이며 목표는 어디로 잡아야 하는가? 쉬움(easy)은 단순하게(simple) 만들지 않는다. 오히려 쉬움은 복잡(complex)하게 만드는 경향이 있다. 예를 들면 value와 time을 함께 엮은 state는 쉽다. 하지만 단순하지는 않다. 오히려 모든 복잡성의 씨발점이 된다. 우리는 익숙함을 단순하다고 착각하기도 하지만 실은 쉬울 뿐이다. 결국, 우리는 단순함을 추구해야 한다. 쉬움은 알아서 잘 따라올 것이다.

이 발표는 simple, complex, easy, hard 섞어 쓰기도 하고 잘못 쓰기도 하는 이 용어들을 명료하게 정의한다. 단순함은 객관적이지만 쉬움은 상대적이란 설명에 놀라고 깊이 공감했다. 왜 이제까지 단순함을 상대적이라 생각했을까?

하지만 OO(Object Oriented)에서 사용하는 도구 세트(toolkit)를 보니 복잡한 것밖에 없다. 리치 히키가 말하는 단순함을 추구하기 위해선 패러다임을 바꿔야만 하나? 그냥 clojure 만세로 끝나는 것일까? 아니다. 명료한 개념 정의와 단순하게 만들 수 있는 여러 도구를 배우는 것만으로도 현업에서 OO를 버리지 못하는 내게도 이 발표는 도움이 됐다.

추상(abstraction)에 관한 얘기도 무척 흥미로웠다. 프로그래밍에서 추상화를 왜 하는가? 생각을 해보니 나는 복잡성을 감추기 위한 용도로 주로 사용해왔다. 그런데 여기선 단순함을 위한 추상화와 복잡성을 감추려는 추상화를 구분해서 설명한다. 육하원칙에 각 요소에 대한 추상화를 설명하는데, 이렇게는 한 번도 생각을 안 해봤던지라 놀라웠다. 말은 멋지지만 실로 어려운 코드 재사용성에 대한 힌트를 여기에서 얻을 수 있지 않을까란 생각을 했다.

DOD(Data Oriented Design)와 목적은 다르지만, 방법은 유사하다. 리치 히키는 단순함을 위해 값(value)을 분리했고 DOD는 성능을 위해 데이터를 분리했다.

Now, ask yourself what TDD means to you. Is TDD a discipline you use to make things easy? Or is it a discipline you use in order to be thoughtful, careful, and to keep things simple?

- Simple Hickey by Uncle Bob