메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

AI 시대, 우리에게는 '더 단순하게 만들 시간'이 필요합니다.

소프트웨어 개발은 원래 복합적인 작업입니다


안타깝게도 우리는 시스템을 복합적으로 complex 만드는 데 그치지 않고 복잡하게 complicated 꼬아버리기를 즐기는 듯합니다.


‘복합적인 것’‘복잡한 것’의 차이는 무엇일까요? 눈송이를 예로 들어보죠. 눈송이는 복합적이지만, 그 눈송이를 만들어 낸 날씨는 예상할 수 없을 정도로 복잡합니다. 눈송이와 날씨 모두 수많은 구성 요소로 이루어져 있지만, 눈송이에서는 각 요소가 어떻게 상호작용하는지 들여다볼 수 있습니다. 그 안에서 우리는 패턴과 규칙을 발견할 수 있습니다.

 

 

소프트웨어의 복합적인 면은 다루기 어렵지만, 그 안에는 분명한 규칙이 존재합니다. 하지만 그 규칙을 무시하면 ‘복잡함’이 찾아옵니다. 그리고 이 복잡함은 우리의 프로젝트를 이해할 수도, 예측할 수도 없는 엉킨 논리 덩어리로 만들어 버립니다. 결국 우리가 프로젝트를 운영하는 방식부터 사람을 대하는 방식에까지 악영향을 끼치게 되죠.


복잡함을 다루는 일은 규칙도 모른 채 게임을 하는 것과 같습니다. 더 심각한 문제는 이 규칙은 애초에 알 수 없다는 점입니다.


슬픈 사실은 프로젝트를 복잡하게 만든 장본인이 대부분 우리 자신이라는 점입니다. 잠시 멈춰 서서 생각하지 않고, ‘이게 정말 맞나?’라고 묻는 내면의 작은 목소리를 외면하는 순간 복잡함이 싹틉니다.

 

우리에게는 단순하게 만들 시간이 부족합니다. 

하지만 시간이 부족한 이유는 우리가 스스로 일을 복잡하게 만들었기 때문입니다. 어떻게든 시간을 마련해야 합니다. 그렇지 않으면 배우고 개선할 수 없습니다. 단순함을 받아들이고 단순한 결과물을 만들 방법을 찾아야 합니다. 그렇지 못하면 당장 눈앞의 문제를 수습하느라 이리저리 뛰어다니며 시간을 허비하고 맙니다.

 

최초로 위키를 개발하고, 애자일 소프트웨어 개발 선언문을 공동 저술한 프로그래머, 워드 커닝엄은 “Do the simplest thing that could possibly work (동작하기만 한다면 가장 단순하게 만들라)”라고 말했습니다. 이 접근 방식은 단지 코드를 작성하는 방법만이 아니라 우리가 하는 거의 모든 일에 적용됩니다.

 


여기서 ‘단순하게 만들라’는 말은 본질을 희석할 수준으로 대충 만들거나 또는 그럭저럭 동작하게 하라는 뜻은 아닙니다. 이해하기 쉬우면서 변경하기도 쉬운 산출물, 조금 모호해도 ‘제대로 만들었다는 느낌’을 주라는 의미입니다. 『패턴 랭귀지』(인사이트, 2013) 를 쓴 건축가 크리스토퍼 알렉산더는 이것을 이름 없는 품질이라고 불렀습니다. 단순함은 여러분에게 만족감을 줍니다.

 

따라 하지 마세요

 

단순함을 주제로 글을 쓰다 보면 한 가지 문제에 맞닥뜨리게 됩니다. 모든 것을 단순하게 만드는 명확한 규칙이나 절차가 없다는 점이죠. 물론 코딩 표준이나 설계 방법론이 있다지만 결과물이 복잡해지지 않는다는 보장은 없습니다. 단순함은 일을 처리하는 ‘방법’이라기보다는 일을 대하는 ‘마음가짐’에 더 가깝습니다.


제가 간단하다고 느끼는 것이 여러분에게는 그렇지 않을 수 있고, 반대로 여러분이 간단하다고 여기는 것이 제게는 그렇지 않을 수 있기 때문입니다.


그래서 저는 여러분께 이래라저래라 말씀드릴 수는 없습니다. 여러분이 처한 상황을 알지 못하기 때문입니다. 따라 하기 쉬운 체계화된 규칙을 제시할 수도 없습니다. 그런 규칙이 존재하지 않기 때문입니다. 그래서 저는 제 경험을 바탕으로 설명하기로 했습니다. 이를 위해 집필한 제 책,『미니멀리즘 프로그래머』에는 여러 가지 '프랙티스(실천법)’를 소개합니 다. 실천법에 대한 내용은 제가 필요 이상으로 복잡하다고 느낀 상황에서 출발합니다. 그리고 그 상황을 더 단순하게 만들기 위해 취한 행동을 단계별로 정리했습니다.


물론 이 실천법이 모든 문제에 대한 만능 해결책은 아닙니다. 여러분이 무비판적으로 그대로 따라 하지는 않았으면 합니다. 제가 무언가를 더 단순하게 만들기 위해 걸어온 과정, 즉 하나의 이야기로 읽고,  여러분이 자신만의 길을 찾아가는 과정의 하나의 예시로 삼아 주시면 좋겠습니다.

 

 

용기를 가지세요


켄트 벡은 그의 저서 『익스트림 프로그래밍』(인사이트, 2006) 으로 현대 소프트웨어 개발의 새로운 장을 열었습니다. 그는 익스트림 프로그래밍 Extreme Programming (XP)의 다섯 가지 가치를 의사소통, 단순함, 피드백, 용기, 존중으로 제시합니다. 저는 이 가치들이 익스트림 프로그래밍이나 프로그래밍에 국한되는 것이 아니라 우리 삶 전반에도 적용할 수 있는 핵심 가치라고 믿습니다.

 

익스트림 프로그래밍(XP)의 다섯 가지 가치 : 의사소통, 단순함, 피드백, 용기, 존중 (출처)


이 책 곳곳에 담긴 ‘아이디어’는 여러분에게 한 사람으로서 적지 않은 요구를 합니다. 주변의 기대나 동료들의 압박 속에서도 스스로 가치 기준을 세우고, 그 기준을 지켜 나가라고 말합니다. 흐름에 휩쓸리지 말고 지금 자신이 무엇을 하는지 묻고 곰곰이 생각해 보라고 요구하며, 언제 물러서지 않고 분명하게 자신의 입장을 밝혀야 하는지 일깨워 주기도 합니다. 여러분이 삶에 단순함을 들여오려고 애쓸 때, 일을 복잡하게 만드는 모든 요인에 맞서 싸우라고 요청합니다.


이 모든 일에는 용기가 필요합니다. 

모든 위대한 변화가 거기서 시작합니다. 

 

그 과정을 즐겨주세요.

 

Dave Thomas speaking at the Pasadena Rails Studio (사진 출처: 위키피디아)

AI가 대신 코드를 작성하는 시대입니다. 그에 따라 프레임워크는 점차 거대해지고, 의존성은 늘어나고, 프로젝트는 무거워집니다. 우리는 더 빨라졌지만, 과연 더 나아졌을까요?

미니멀리즘 프로그래머』는 이 질문에서 출발합니다. "정말 이렇게까지 복잡해야 할까?"

이 책은 코드를 짧게 만드는 요령을 말하지는 않습니다. 대신, 복잡함을 만드는 습관을 하나씩 걷어내는 방법을 제시합니다. 무거운 라이브러리를 덜어내고, 불필요한 기능과 소모적인 회의를 줄이며, 데이터 중심 설계로 로직을 단순화하는 방법까지. 지금 당장 적용할 수 있는 29가지 실천 원칙을 제안합니다.

복잡한 코드의 홍수에서 잃어버린 프로그래밍의 즐거움을 되찾고, '미니멀리즘'이라는 새로운 나침반을 준비해 보시기 바랍니다.

 

댓글

댓글 입력