베터코드 인사이트의 부활
다시 한번 <관성적 일상에서 나와 차리는 일상으로 바꾸기>를 경험합니다. 한편으로 저의 관성에 대해 부정적으로 생각했었는데, 최근 읽는 뇌과학 책으로 인해서 그게 자연스러운 과정이란 사실도 깨달았습니다. 글에 대해서는 글 말미에 기록합니다.
관성이 발동하는 장면은 이렇습니다. 목록을 볼 때 페이징을 보자, 페이징을 싫어하는 편향이 발동하여 바로 정서적 반응을 합니다. 페이징 대신에 스크롤할 때마다 로딩시키면 좋겠다는 생각을 하여 개발자에게 요청을 하려고 합니다.
다행히 버퍼(buffer) 즉 완충 장치가 있습니다. 백로그(backlog)라고 하는 개념인데, 흔히 이슈 트래커를 스는 기업에서는 자연스러운 행동 양식이죠. 당장 요청하지 않고 기록으로 남겨 두고 다른 업무들과 우선순위와 시급성을 놓고 경합하게 됩니다.[1]
또 다른 이점은 일단 기록을 하기 때문에 다시 돌아볼 검토와 회고의 시간이 주어진다는 점입니다. <관성적 일상에서 나와 차리는 일상으로 바꾸기> 경험 덕분에 스스로 이렇게 묻게 되었습니다.
지금 하는 것인 맞나? 이렇게 하는 것이 맞나?
여기에 더하여 <대화를 이벤트로 만들고 클래스도로 표현하기> 활동의 흐름과 맞추는 리듬도 생깁니다. 기록을 남겨 두니 좋습니다. 마치 Git을 쓰듯이[2] 과거 기록을 쓰던 상태로 복원되어 축적할 수 있습니다. 한편, <대화를 이벤트로 만들고 클래스도로 표현하기> 에서 그린 그림을 보자 대번에 중복이 발생한 부분의 중첩을 풀어내는 일이 '목록'이라고 모호하게 부르는 것에 대한 실마리를 제공한다는 직관을 갖게 됩니다.
일단, 작업에 들어가기 전에 <낱말의 뜻을 깊고 넓게 묻고 따지는 일의 소중함>을 실천하기 위해 중복과 중첩을 사전에서 찾아봅니다. 중복은 무거울 중(重)과 겹옷 복(複)을 씨말로 하는 낱말입니다. 한자 重자는 '거듭 중'이라는 풀이도 있습니다. 그래서 뜻은 다음과 같네요.
거듭하거나 겹침.
한자어로 된 씨말을 따져 보면 중첩도 거의 비슷한 낱말이란 사실을 알 수 있습니다. 거듭 중(重)은 같고요. 두 번째 씨말은 겹쳐질 첩(疊)자를 씁니다.
거듭 겹치거나 포개어짐.
마치 수학의 인수분해와 같이[3] 요소들을 나눠보면 재구성을 할 수 있는 기회가 생깁니다. 소프트웨어 설계는 대체로 구조와 구성을 문제라고 할 수 있어서 기능으로 보기에 하나로 드러나도 이렇게 나눠보는 일에 설계에 대한 아이디어를 제시하는 경우가 많습니다.
자 이제 시작해 봅니다. 제 사고 과정을 그대로 드러내기 위해 실전에서 하듯 작업하는 대신에 하나씩 변환해 보겠습니다.
첫 호흡으로 진행한 일은 '시장'이라고 정한 개념을 분해하는 일입니다. 제 경험은 자연스럽게 이렇게 질문합니다.
지금 수준에서 그건 뭘로 나아갈까?
여기서 '지금 수준에서'라고 한정하는 일은 굉장히 중요한데, 어떻게 설명할 수 있을까요? 일단, 시장 출시나 앞서 말한 의사결정 과정은 생략하고 설계하는 사람 개인 수준에서만 다루겠습니다. 그러려면 우리가 현실에서 어떻게 현상을 만드는지를 알 필요가 있습니다.
최봉영 선생님 표현을 따라 한국말로 인식 과정을 풀어 보면 마주한 것을 녀기는 과정이 인식입니다. 이를 아주 간단히 도식화한 그림이 있습니다.
하지만, 이 그림의 한계는 '인식'이라는 관념을 설명할 뿐, 현실에서는 이렇게 모두 제외하고 빵 하나만 인식하는 일은 드뭅니다. 마치 실험실에서의 독립된 실험처럼 현실과 괴리가 있는 그림이고, 생각의 일부를 정교하게 표현하는 일로만 의미를 지닙니다.
그렇다면 우리가 현실을 모사해서 추상화할 때는 어떻게 할까요? 인지 활동에 따라 덩어리를 설정해야 합니다. 결국, 그 덩어리를 적절하게 설정하느냐가 경제성과 협업의 효과 따위를 결정하는 중요한 인지 활동이 됩니다.
[1] 여러 사람과의 상호작용 측면에서 보면 민주적 의사결정을 할 수 있는 정보의 머무름을 만들어냅니다. 물론, 백로그만 만든다고 해결되지는 않지만, 기본적으로 모든 요구는 잠시 멈춰서 관계자의 판단을 거치죠. 인간이 만든 제도적 장치인 민주주의 의사결정 방식과 굉장히 유사하다 느낍니다.
[2] 낯이 익은 느낌이고 말이란 생각이 들어 찾아보니 두 개의 글을 만날 수 있었습니다.
[3] 소프트웨어 설계뿐 아니라 다양한 분야에 적용할 수 있는데, 이를 기록한 글을 두 개 찾았습니다.