Posting in Korean:

Linus Torvalds가 한 말이라고 한다. 최근 내 경험과도 맞닿아 있어 이 글을 써본다.

“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.”

위 말은 요약된 버전같고, 조금 더 구체적인 맥락은 git의 설계 철학과 관련이 있다.

“git actually has a simple design, with stable and reasonably well-documented data structures. In fact, I’m a huge proponent of designing your code around the data, rather than the other way around, and I think it’s one of the reasons git has been fairly successful […] I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important.”

git은 commit이 정점(node)가 되는 tree 구조로 볼 수 있는데, 변화들을 추적해나간다는 관점에서 commit에는 hash가 붙어 불변성이 부여된다. 뜬금없는 예시일 수 있지만, blockchain에서의 block (transactions의 모음으로)이 git의 commit에 대응되고, transaction들은 코드 상의 변화에 해당하는 delta, 그리고 각 commit간의 관계는 hash chain으로 parent의 hash를 참조하는 구조다. 데이터 구조 관점에서 보면 전체적인 형태는 거의 같다. git과 blockchain이 다른 문제를 풀고자 했던 것이 아니라, 결국은 분산된 환경에서 consensus를 형성하는 것이 중요했고, 과거 내용이 변경되면 굉장한 혼란을 초래할 수 있기 때문에 둘 다 필연적으로 append-only 구조로 수렴하게 되었다.

내가 진행하는 프로젝트도 크게 두-세 가지 정도의 추상화를 적용하고 나면, 핵심은 몇십 줄 안으로 압축되고, 나머지는 추상적 대상의 구체화 역할만 맡게 된다. 이후에는 집중적으로 노력을 들여야할 부분과 그렇지 않은 부분들을 구분할 수 있어 구현 비용을 크게 줄일 수 있다.