삶의 단위를 찾아서
우리가 사는 세상은 복잡하다. 현실에는 여러 가지 흐름이 있고, 우리는 그 흐름이 만들어내는 현상 속에 살아간다. 이 현상을 개선하거나 덜 나빠지게 하기 위해 우리는 가설을 세우고 문제를 다룬다. 프로그램은 복잡한 현실속 존재하는 문제를 코드의 세계로 옮겨 해결하려는 시도다. 그래서 나는 현실의 문제를 해결해 현상을 개선하는 것이 소프트웨어의 본질적 가치라고 생각한다. 세상이 변화하고 진화하듯, 소프트웨어도 유동적으로 이를 대응해나갈 수 있어야 한다.
나는 요즘 이 개념을 더 잘 적용하고자 블라디미르 코리코프의 '단위 테스트'라는 책을 읽고 있다. 그는 소프트웨어의 지속 가능한 성장을 위해 단위 테스트가 필수라고 말한다. 또한 테스트 코드를 작성하고 이를 가능하게 하는 코드 구현체의 구조를 바꿀 때에는 비즈니스 가치와 도메인의 중요성을 최우선해야 한다고 강조한다. 테스트 코드는 코드 구성의 미적 완결을 위한 행위가 아니란 것이다. 맞는 말이다. 이 관점에서 소프트웨어를 테스트 가능한 단위로 나눈다는 것은, 결국 해결하고자 하는 문제의 본질을 명확히 파악하고 있다는 뜻이라고 생각한다.
그렇다면 도대체 무엇이 ‘단위’인가. 나에게 단위라는 개념은 여전히 어렵다. 이 복잡한 세상 속에서 나는 무엇을 단위라고 불러야 할까. 어쩌면 가장 기본이 되어야 할 이 개념이 자꾸 내 발목을 잡는다.
세상의 조각
문득, 이 고민이 코드에만 머무르지 않는다는 생각이 들었다. 우리가 살아가는 세상은 우리가 인지하지 못하는 거대한 흐름을 따라 계속 변한다. 그 흐름 속에서 누군가는 기뻐하고 슬퍼하며, 부유해지거나 가난해지고, 행복과 불행을 겪는다. 또한 그 거대한 흐름 속에서 여러 역할을 동시에 수행하며 살아간다.
이 급류 속에서 나 또한 여러 역할을 가진다: 개발자, 남편, 직장 동료, 아들, 그리고 곧 태어날 아이의 아빠.
각각의 역할은 나에게 다른 모습을 요구하고, 다른 책임을 동반한다. 어쩌면 이 세상에서 내가 맡은 역할을 잘 수행한다는 건, 이 거대한 흐름을 나의 역할에 해당하는 단위로 쪼개어 당면한 문제를 해결해 나가는 과정이 아닐까. 개발자로서 잘 해내야 하는 일과 남편으로서 잘 해내야 하는 일의 단위는 분명 다르다.
이 생각은 꼬리에 꼬리를 물고 질문으로 이어진다.
- 각 역할의 책임을 더 잘한다는 것은 무엇을 의미할까?
- 개발자로서 더 잘한다는 건 뭘까?
- 한 가정의 가장이자 남편, 그리고 아빠로서 잘한다는건 뭘까?
- 결국 내가 정말로 잘 해내야 하는 것은 무엇일까?
그렇다면 지금 이 순간, 나는 이 거대한 흐름의 어떤 조각을 해결하기 위해 존재하는가. 오늘, 내가 집중해야 할 단위는 무엇일까. 책을 덮고 한참 생각에 잠긴다.