독후감. 쪼개기 법칙
내 마음을 돌보는 쪼개기 전략
- #book
본 포스트는 "트레바리" "나알기-자기돌봄: 나를 알고, 나와 친해지는 시간" 독서모임 독후감입니다.
코딩으로 벌어 먹고 사는 사람이 본 쪼개기
저는 소프트웨어 엔지니어입니다. 그거 아시나요? 코딩하는 사람들은 쪼개기를 밥 먹듯이 한답니다. 코딩 할때 쪼개기의 대상도 목적도 다양합니다만 결국 핵심이 되는 공통효과는 인지부하 줄이기라고 생각해요. 어떤 일을 수행한다고 할 때 그 일 안에서 수행되는 절차를 작게 작게 쪼개고 묶어두면 코드를 사용하는 사람 입장에서나 읽는 사람 입장에서나 머릿속이 단순해지거든요.
코딩에 입문하던 시절부터 작업을, 개념을, 논리를 단순화하여 생각을 가볍게 하고 명확하게 하는 과정에 큰 인상을 받았습니다만 새삼 그런 일을 삶에 적용해볼 수 있을 거라곤 상상하지 못했던 것 같습니다. 그런데 마침 독서모임의 책으로 기회가 닿아 이런 주제의 책을 접하게 되니 정말 반가운 마음입니다.
인지 부하를 줄이고 인지 오류 줄이기
코딩 용어로 여러가지 논리가 마구 얽혀있는 코드를 스파게티 코드라고 부릅니다. 코딩에서 스파게티 코드를 지양하는 이유중 하나는 인지오류를 줄이기 위해서입니다. 코드는 논리이고 논리는 곧 생각입니다. 때때로 잘못짜여진 코드는 코드를 읽는 사람으로 하여금 잘못된 판단을 내리게 하기도 합니다. 심지어 작성자 본인도 말이에요.
코딩에서 인지오류에 의해 겪는 문제는 단순히 엔지니어로서의 그릇된 판단입니다. 하지만 우리 삶에 있어서의 인지오류는 보다 심각한 문제를 야기하는 듯 합니다. 책에서는, 삶에 있어서 마음과 관련된 개념을 뭉뚱그렸을때 발생하는 인지오류의 사례와 부작용을 보여줍니다. 회복이라는 개념을 완치-불치 이분법적으로 여기는 사람들의 무기력함. 감정을 "별로" 라는 단어로 하나로 개념지어버리는 사람들의 답답함. 사실판단과 자기해석을 구분하지 못하는 사람들의 감정적 고통 등등 말이에요.
그러니 "쪼개기"로 개념을 바로잡는 일이, 단순히 개념의 세분화와 분석이 아니라, 마음의 주도권을 되찾는 좋은 치료 방법이 될 것이라는 저자의 아이디어에 적극 공감하게 됩니다.
섞지 않고 갈라놓기
소프트웨어를 만들 때 꽤 중요하게 여겨지는 원칙이 있습니다. 성격이 다른 것들을 한 덩어리에 욱여넣지 말라는 원칙이에요. 소프트웨어 바닥에서는 이걸 '관심사의 분리'라고 부릅니다. 예를 들면, 화면에 무언가를 그리는 일과 뒤에서 데이터를 계산하는 일을 굳이 한 자리에 섞어두지 않는다는 뜻이에요. 섞어두면 만들 땐 당장은 편할지 몰라도, 나중에 한쪽을 고치려다 멀쩡한 다른 쪽까지 건드려 무너뜨리기 십상이니까요.
마음도 비슷한 것 같습니다. "그가 답장을 하지 않았다"는 사실입니다. "그가 나를 무시한다"는 해석이고요. 이 둘을 한 줄에 붙여 "답장을 안 한 걸 보니 나를 무시하는 게 분명해"라고 적어버리면, 사실과 해석이 한 덩어리로 굳어버립니다. 그러면 답장이 없다는 작은 사실 하나에 마음 전체가 따라가버려요. 그런데 둘을 떼어놓고 보면, 사실은 사실대로 그냥 두고 해석만 따로 꺼내어 "정말 그럴까?" 하고 들여다볼 여유가 생깁니다. 무너뜨리지 않고도 고칠 수 있게 되는 거죠.
정확히 이름 붙이기
프로그래머들 사이에는 반쯤 농담처럼 도는 말이 있습니다. 소프트웨어 개발할 때 가장 어려운 일은 이름 짓기라고요. 무언가를 담아두는 상자에 temp나 data 같은 불명확한 이름을 붙이면, 나중에 열어보기 전까지 그 안에 뭐가 들었는지 아무도 모릅니다. 이름이 아무것도 알려주지 않으니 실수를 부르죠. 반대로 밀린_청구서라고 적어두면, 그 순간 그것이 무엇인지 분명해집니다.
"별로"라는 예시가 딱 이 temp 같은 이름이 아닐까 싶었어요. "그냥 좀 별로야"라는 말은 상자에 아무 이름표나 붙여둔 것과 같습니다. 안에 뭐가 들었는지 모르니 손을 댈 수가 없죠. 그런데 그 별로가 사실은 "어제 그 말에 서운했던 것"이라고 정확히 이름 붙이는 순간, 그것은 비로소 다뤄볼 수 있는 무언가가 됩니다.
실행 범위 좁히기
이름을 붙이고 나면 그다음이 있습니다. 이제 손을 댈 수 있다는 것.
아무리 뛰어난 엔지니어라도 인생을_성공시킨다() 같은 것은 만들지 못합니다. 어디서부터 손대야 할지 알 수 없으니까요. 하지만 아침_물_한_잔_마시기()는 그냥 하면 됩니다. 거대한 목표 앞에서는 얼어붙지만, 작은 조각 하나는 해치울 수 있고, 그 하나가 다음 하나로 이어지는 관성을 만듭니다.
코드가 멈췄을 때도 마찬가지입니다. 프로그램이 고장 났다고 처음부터 다 다시 쓰는 사람은 없습니다. "어디서부터 틀어졌지?" 하고 범위를 좁혀 들어가다 보면, 대개 문제는 한두 줄로 줄어들어요. "요즘 다 엉망이야"라는 문장은 그래서 손을 댈 수가 없습니다. 범위가 없으니까요. 그런데 "정확히 뭐가?"라고 좁혀 들어가면, 그 '전부'는 사실 뭉쳐져 있어 커 보였을 뿐, 들여다보면 두세 개의 구체적인 문제인 경우가 많습니다. 전부와 싸우는 대신 그 두세 개를 하나씩 마주하면 되는 거죠.
'잘게' 말고 '잘' 쪼개기
좋은 코드는 무조건 잘게 나뉜 코드가 아니라, 의미 있는 경계에서 나뉜 코드입니다. 어디를 따라 쪼갤지, 그 결을 찾는 일이 진짜 어렵고 또 중요한 일이죠. 책에서는 쪼개기의 다양한 좋은 사례를 보여주었지만, 결국 이 내용을 진정 양분으로 삼고 실천하기 위해서는 내 결을 찾고 그에 맞게 내 마음을 바라볼 줄 알아야겠다는 생각이 듭니다. 삶을 쪼개는 결은 남이 정해줄 수 없다는 것, 쪼갠 뒤에는 다시 한 발 물러서서 전체를 바라볼 줄도 알아야 한다는 것도 다시 한 번 되새겨봅니다.
밥 먹듯 코드를 쪼개던 사람이 정작 자기 삶은 한 번도 그렇게 다뤄본 적 없었습니다. 이제 조금씩 나다운 결을 따라 쪼개보려 합니다.
