·에세이

구조로 생각한다는 것

문제를 빠르게 푸는 사람과 깊게 푸는 사람의 차이는 속도가 아니라 문제를 표현하는 언어의 정밀도에 있다.

#사고#방법론#엔지니어링

소프트웨어 엔지니어로 일하다 보면 자주 목격하는 장면이 있다.

같은 문제를 받은 두 사람이 있다. 한 명은 바로 코드를 치기 시작한다. 다른 한 명은 5분 동안 아무것도 안 한다. 결과는? 보통 두 번째 사람이 더 빠르게 끝낸다.

이 차이가 왜 생기는지 오래 생각했다.

문제의 표현이 곧 해법의 형태를 결정한다

어떤 문제를 어떤 언어로 표현하느냐가, 가능한 해법의 집합을 미리 제한한다.

"이 API가 느리다"라고 표현하면, 자연스럽게 캐싱·인덱싱·쿼리 최적화 쪽으로 손이 간다. "이 데이터 흐름에서 불필요한 변환이 몇 번 일어나는가"라고 표현하면, 전혀 다른 해법이 보인다.

같은 현상, 다른 표현. 하지만 도달하는 해법의 공간이 완전히 달라진다.

구조화의 핵심은 분리다

좋은 구조 사고는 결국 무엇이 본질이고 무엇이 우연적 복잡도인가를 분리하는 능력이다.

데이터베이스 스키마 설계에서, 비즈니스 도메인의 본질적 관계와 구현의 편의를 위한 비정규화를 명확히 구분하는 것. 이 구분이 흐릿해지면 나중에 무엇을 바꾸면 어디가 깨지는지 예측할 수 없게 된다.

이 원칙은 코드 밖에서도 동일하게 작동한다.

글이 도움이 됐다면 GitHub에서 이야기 나눠요.