2025-07-22 (Tue)
어제 저녁의 멘토링에서, 멘티분이 이런 질문을 했다. "정수님은 어떻게 개발을 하시나요?" 본인이 생각할 때 좋은 질문은 아닌 것 같지만, 당신의 사고과정이나 멘탈모델이 궁금하다고 했다.
여러 사람들에게 여러번 얘기한 답변을 해주었다. 듣고 나서 정말로 이렇게 하는 사람들은 거의 못보았지만.
한 마디로 하면, 생각의 해상도.
비결은 딱히 없다. 한 순간 한 순간에 섬세하게 주의를 기울이고, 사려깊게 선택하고, 그 결과를 보고, 반추하고 성찰하여 멘탈 모델을 미세 조정하고. 이걸 5년 10년 하다 보면 모래알이 쌓여 거대한 성이 된다.
구체적인 예시로, Robert Martin의 Bowling Game Kata를 해보시라고 얘기해드렸다.
그리고, 지금 바로 검색해보시라고 하면서, 링크를 찾으면 내게 보내달라고 했다.
뭔가 이상한 웹페이지를 보내왔다.
이 웹페이지를 어떻게 검색하셨는지 물어봤다. 한글로 "로버트 마틴 볼링 게임 카타"를 검색했다고 했다.
화면 공유를 해달라고 하고, 영어로 검색해보라고 했다. 역시 "Robert Martin Bowling Game Kata"를 검색했다. 검색 결과 몆 개를 클릭해서 들어갔다가 나왔다가 하셨다.
방금까지의 3분여 동안, 당신이 본 것, 생각하고 판단한 것, 그래서 행동한 것들을 상세하게 설명해달라고 했다.
그리고 작년의 기록을 건네주었다. 공교롭게도 2024년 7월이었다. 딱 1년 전. 다른 멘티분에게 같은 과제를 주었었다.
내가 한 행동들을 바둑 기사가 복기하듯이 세밀하게 설명할 수 있는지 물어봤다.
또 하나의 예시로, 실제 Bowling Game Kata를 slide by slide로 해설해주었다.
Bowling Game Kata는 한 슬라이드 한 슬라이드마다, 코드 한줄 한줄이 어떻게 발전해나가는지를 보여준다. 그 과정을 토대로 보면, Robert Martin이 코드를 작성하고 테스트를 돌리고, 다음 스몰 스텝 구현을 구상하는 간격은 대략 20초 정도 걸리는 것으로 보인다.
20초마다의 구상-가설-구현-실행-성찰. 이 수준으로 밀도 있는 사고과정을 꾸준히 3년을 지속하고 5년을 지속하면, 마치 시간과 공간의 방처럼, 다른 사람들에 비해서 수배~수십배는 압축적으로 사고의 밀도를 높일 수 있다.
하지만, 실제로 지금 현재에 그렇게 한 순간 한 순간을 충실히 -- 열심히가 아니라, 온전히 집중하고 깨어있으면서 수련하는 사람은 거의 본 적이 없다.
사실 나조차도 그 정도로 항상 밀도있게 하지는 못했으니까. 하지만 일상의 틈을 내어서 꾸준히 리팩토링-TDD를 통한 밀도 있는 사고 수련을 해나갔고, 어떤 느낌을 체득한 순간이 있었다. 2006년에 개발을 시작했으니 개발 시작한지 이제 거의 19년이 되는데, 틈틈이 하면서 한 8~10년차쯤에 느낌적인 느낌이 왔던 것 같다. 오지큐 때도 딱히 그런 느낌까지 들진 않았고. 딥네츄럴때부터 느낌이 좀 왔던 것 같다.
리팩토링, TDD를 하긴 하지만, 그 피드백 루프의 밀도가 쪼개고 쪼개면서 초 단위로까지 내려오면서부터였던 것 같다.
아, 이 얘기도 했었다.
지난주에 그분이 채용 인터뷰 보시는데, 뭔가 분위기가 쎄..해서 불안하다고 했다.
그래서, 그 불안함을 확인하려면 어떤 방법이 있을까 질문했고, 일주일 가서 같이 일하면 확인할 수 있지 않을까 하셨다. 아니면 하루라도. 그런데 계속 면접 보느라 연차가 안남아있다고 안될 것 같다고 했다.
그러면, 연차를 소진하지 않으면서도 같이 일해보거나, 아니면 같이 지내보는 경험을 할 수는 없을까 물어봤다. 영 못떠올리시더라. 그래서, '온라인으로 1~2시간 정도 그 팀 팀원분과 온라인챗 하는건 할 수 있지 않을까, 그때 코드 리뷰나 페어 프로그래밍을 해볼 수도 있고'라고 권해드렸다.
왜 그 생각을 못떠올렸는지 부끄럽다고 하셨었다.
어제의 멘토링에서, 나에게는 위에서 썼던 '생각의 밀도'를 이 경우에도 적용한거라고 했다. 같은 도구라고.
20초 단위로, 구상하고 확인하고, '이 다음엔 뭘 하지?'를 십수년간 밀도있게 훈련하다보면, '에이, 안되잖아' 하는 순간에도, '정말?' 하는 턴어라운드를 만들어낼 수 있다.
그런데 이게 그냥 '열심히 해야지', '정성껏 해야지' 하는 의지만으로 되는건 아니다. '열심히 하라는거구나'라고 보면 안된다.
생각의 해상도가 높아지기 유리한 방식으로 일을 해야 한다. 그러려면 피드백 싸이클이 굉장히 짧아야 한다. 초 단위로. 이 피드백 싸이클이라는게 대단한게 아니다.
이를테면 초단타 주식 매매를 한다고 해보자. (주식매매를 해본 적은 없지만.) 주가가 초 단위로 변화하고, 손에 땀을 쥐게 긴장된다. 내가 언제 들어갔는지에 따라서 손실과 이익이 바로 갈린다. 이렇게 초 집중 상태로 1시간 매매를 하면, 진이 빠져있지 않을까? '벌써 시간이 이렇게 됐어?'하며 놀라지 않을까?
개발에서의 리팩토링/TDD가 중요한 지점은 여기다. 프로그래밍이라는 행위를, 굉장히 밀도있게 진행되도록 피드백 루프를 굉장히 짧게 만들어놓고 개발하는거다.
서비스를 만드는 환경에서는? 실 사용자를 옆에 두고 개발하면 밀도있을거다.
이런 환경을 구축해놓고 일하는 것이 생각의 밀도를 높이는 비결.