2024-07-29
멘티분에게 보냈던 메세지들.
개발 공부를 하신다면, 저는 Robert Martin(Uncle Bob)의 Bowling Game Kata를 혹시 안해보셨다면 꼭 한번 해보시길 권해드려요.
리팩토링을 기반으로 TDD 스타일로 한 걸음 한 걸음 덧붙여나가는 느낌인데, 이 느낌을 가지는게 정말정말 중요하다고 생각해요. 크게는 NatureOfOrder의 느낌을 여기서부터 감 잡을 수 있는 정말 중요한 핵심. 그 카타를 한다고 그 느낌을 모두가 다 느끼지는 못할테지만, NOO적인 TDD의 느낌을 아는 사람이 볼링 카타를 하면, 그 느낌을 기반으로 짜여진 연습이라는게 느껴질거예요.
멘티분이, slideshare에 올려진 Bowling Game Kata 슬라이드를 찾으셨다. 일단 slideshare는 Scribd에 인수된 이후에 광고가 굉장히 자주 나와서 불편하고, 슬라이드만 딱 있는 것보다는 엉클밥의 홈페이지에 보면 약간의 설명이 있는데, 어떻게 검색을 하셨을까 하는 점이 궁금했음. 아마 검색어가 나랑 다르지 않았을까, 검색 결과를 선택하는 판단도 나랑 다르지 않았을까. 반대로, 나라면 어떻게 검색했을까. 그래서 한번 정리를 해봤음.
저 slideshare를 어떻게 찾으신건지 그 과정도 궁금한데, 정보를 어떻게 찾아가는지 그 과정에서의 전략도 매우 중요합니다.
- 일단은, 혹시라도, naver가 아닌 google을 사용하여 검색합니다.
- 검색 키워드를 무엇으로 했느냐. 너무 좁지도 않으면서 너무 넓지도 않게, 적당한 수준으로 추상화하여 문제의 핵심을 검색하는 것이 중요합니다. 저는 Robert Martin Bowling Game Kata로 검색했어요.
- 검색 결과로 나온 것 중에서, 어떤 것이 양질의 정보를 담고 있는지를 판단하는 능력도 굉장히 중요합니다. 여기서는 많은 것들이 동원되는데,
정보의 질이 좋은 소스(사이트)들이 어디가 있는지 알고 있는 것이 도움이 됩니다. 사이트들마다의 정보의 질, 특색 등을 알아둡니다. 이를테면 Q&A 성의 정보는 StackOverflow,
2차 저작보다는, 그 개념의 원천, 1차 저작을 따라가는게 도움이 될 때가 많습니다. 저는 Robert Martin의 별명이 Uncle Bob이라는 것을 알고 있기 때문에, 사이트 이름이 ButUncleBob.com인 첫 번째 검색 결과를 선택했습니다.
- 검색어를 적절하게 선정했다면, Google이 보여주는 검색 순서는, 연관성도 높고, 사람들이 그 검색어로 검색했을 때 선택된 경우가 많은 결과를 더 우선으로 보여주기 때문에, 상위의 결과들을 유심히 봐야합니다. 만약 마음에 드는 결과가 나오지 않았다면 계속 다음 페이지 검색결과를 따라가기보다는 검색어를 바꿔서 시도해보는 것도 좋은데, 그 때도, 무작정 검색어를 바꾸기보다는, 지금 검색결과를 대략 보고, 좀 더 검색어를 구체화하거나, 추상화하거나, 좀 더 내가 궁금한 그 분야를 적확하게 지칭하는 전문용어를 알아내는 등, 현재에서 조금 더 단서를 얻어내고 그걸 활용하는게 좋습니다.
검색결과에서 ButUncleBob의 사이트를 선택하여 페이지에 들어갔다면, 그 페이지를 딱 스캔하고, 유용한 정보를 담고 있는지 판단하는 것이 중요합니다. 어떻게 판단하느냐. 여러 가지 전략들이 있는데,
- 어떤 분들은, 글자가 빼곡히 써있으면 겁내는 분들이 있습니다. 특히 그게 영어일 때는 더욱요. 당황하거나 겁내지 않고 찬찬히 보는게 중요합니다.
- 개인 웹사이트들 중에는 후져보이는 것들이 많습니다. 그리고 대가들의 개인 웹사이트는 더 후지기도 합니다. 그런데, 도구에 연연하지 않고 후진 도구를 오랫동안 사용하면서 켜켜히 값진 정보들을 쌓아가기도 하고요. 그래서, 웹사이트의 후짐으로 그 정보의 가치를 판단하지 않습니다. 하지만, 웹사이트에 정렬이 안맞아있다던지, 정돈되어있지 않다던지, 정갈함과 질서가 보이지 않는, 정말 후진 웹사이트도 있습니다. 그런건 걸러야죠.
- 도구들의 특징을 아는 것도 중요합니다. 저 사이트의 왼쪽 메뉴를 자세히 보면, Edit, Recent Changes 같은 것들을 볼 수 있는게, 이것으로 미루어볼 때 이 사이트는 위키를 사용해서 만들어진 것을 알 수 있습니다. 아마 Swiki일거라고 짐작합니다. 위키에는 엄청나게 값진 정보들이 담겨있기도 하죠.
그래서 구체적으로 이 페이지를 보면, UncleBob이 직접 Bowling Game Kata에 대해서 설명해주고 있습니다. 제일 처음에, "Here is a kata"라고 하면서 링크를 담고 있는데, 거기에 PPT 파일이 첨부되어 있습니다. 그리고 코딩에서 kata가 무슨 뜻인지, 그게 어떤 배경에서 나왔고 어떤 점에서 좋은건지도 간략하게 설명하고 있습니다.
- 볼링 카타에 대해서 충분히 알게 되었다면, 여기에서 멈추지 않고, 페이지를 탐색해가며 지식을 확장할 수 있는 여지가 있을지 시도해봅니다.
페이지 상단에, ArticleS > UncleBob이라는 링크가 있네요? 이건 뭘까, 이 웹사이트에는 다른 글들도 있지 않을까, UncleBob이 쓴 다른 글들도 보여주는게 아닐까 생각(가정)해봅니다. 링크를 클릭해봅니다.
그 링크를 갔다가 와서, 그럼 ArticleS를 클릭하면 무슨 일이 있어나나. UncleBob을 클릭했을 때 uncle bob이 쓴 다른 글들을 보여줬다면, 이걸 클릭하면 다른 필진이 쓴 글들도 보여주는게 아닐까 생각(가정)해봅니다. 클릭해보고, 다른 주옥같은 글들이 있다는 것도 알게 됩니다. 사람들의 이름들이 쭉 나오는데, 저에게는 주옥같은 정보들입니다. 2006년이라는 애자일 초기에 UncleBob과 같이 활동했던 사람들이 누군지 알 수 있으니까요. 이름을 꾹꾹 눌러담아서 읽어봅니다. David Chelimsky, James Grenning, Michael Feathers, Tim Ottinger는 Clean Code에 한두 쳅터씩 썼던 사람들입니다. Michael Feathers는 레거시 코드 활용 전략 (Working Effectively with Legacy Code)이라는 책을 썼던 분이고. 이분들이 쓴 글 제목도 한번 쓱 보고, 어떤 주제에 관심있어하는지도 살펴봅니다. 그 중에서 나랑 취향이 맞는다 하면, 혹시 그분들의 트위터 계정이나 개인 홈페이지가 있는지 잠깐 찾아봅니다.
- 이렇듯, '사람'을 중심으로 찾아보는 것이 개념 같은걸 알아볼 때는 중요한 접근전략 중 하나입니다. 전에 누가 저에게 '정수님은 사람 이름을 참 잘 외우신다. 켄트백이 말한건데요. 엉클밥은 이렇게 했다더라고요 등등.' 한 적이 있는데, 그것도 그 전략 때문에 그럽니다. 결국 개념과 생각, 아이디어, 실천법, 도구나 소프트웨어, 책, 철학사상 등등은, 모두 어떤 사람, 사람들의 집단이 만든 것이고 발달시킨 것이고, 그 아이디어나 사상이 그 사람의 화두가 되어서, 그 사상이나 개념을 계속 발전시켜나가기도 하고, 나중에는 '그게 아니었다'고 부정하기도 합니다. 그래서, 그 사람의 시간선을 따라가면서 개념의 발달과정을 보는 것도 굉장한 도움이 됩니다.
'개념의 시간선을 따라가면서 보기'의 예시 중 하나가, 제가 애자일을 연구하던 것이었는데,
- 애자일의 가장 원류가 뭘까. 애자일 선언이다. 그걸 다시 보자.
- 이 애자일 선언에 서명한 17명이 있는데, 그 사람들은 누굴까? 어떤 배경의 사람들인지 알아보자. 아, XP, Crystal, ASD, SCRUM, DSDM, Pragmatic movement, etc 등 여러 배경의 사람들이 모인거구나.
- 각 분야, 혹은 각 개인의 이름으로 검색하고 리서치. 각 사람들이 썼던 글, 했던 발표의 자료나 영상, 쓴 책 등의 목록을 조사함.
- Alistair Cockburn이라는 사람은 Agile Software Development: The Cooperative Game이라는 책을 썼는데, 번역된게 있다. 근데 부록을 보니, 애자일 선언이 있던 그 이틀간에 대한 기록을 해놓았다. 읽어보니, 애자일 선언이 그렇게 정교하고 구체적으로 짜여진게 아니구나. 특히, 12가지 이면의 원칙보다 더 구체적인 수준으로는 합의를 못이뤄냈구나. 그래서, '동의하지 않기로 동의', '동의하지 않을 자유를 동의'했구나.
뭐 이런 식으로 연구를 해나갔죠.
멘티분의 대답.
- 사실 구글에서 저자는 빼고 bowling game kata만 검색했었다.
- 검색 결과의 1~3번째 것도 클릭해서 들어가서 봤지만, 다 영어고 뭔가 이해가 잘 안되었다.
- 그나마 나에게 좀 친숙해보이는 4번째 링크를 선택했다.
이후에 추가로 더 이어진 대화에서, 이번에는 내가 이야기한, '위키 사이트에는 좋은 정보가 많은 경향이 있다 (위키를 쓸 정도로 관심 많은 사람이라면...)' 등, 구체적인 개별 전략에 시선이 가있는 느낌이 들어서, 추가로 이야기함.
아래는 나의 대답.
저는 제가 사용한 전략들을 말씀드렸는데, 중요한건 손가락이 아니라 달입니다.
ㅇㅇ님은 ㅇㅇ님이 검색해서 저 자료를 찾고 사용해보고 하는 그 과정들을 거치는 동안, ㅇㅇ님 스스로의 머릿속 - 인지(cognition)와 마음(mind) 안에 일어난 일들을 이 정도의 해상도로 설명할 수 있나요?
설명을 할 수 있다는건, 들여다볼 수 있다는거고, 들여다볼 때, 상세한 해상도로 감지(sense)할 수 있다는걸 내포하는 것 같아요.
다른 사람들의 전략들이나, 지식들 등을 참고할 수는 있겠지만, 그런 것들을 활용하더라도 결국은, 나를 들여다보고, 나만의, 나에게 어울리는 내 버전을 만들어야하죠.
혹시 마틴 파울러(Martin Fowler)의 리팩토링 이라는 책을 읽어보셨나요?
그 책을 제가 20대 중반때 읽었던 것 같은데요, 그때 눈에 띄던 것과 지금 눈에 띄는게 달라요. 예전에는, 초반에 설명하는, 리팩토링이란 뭐다, 나쁜 냄새가 뭐다, 실제 step-by-step 사례 같은것에 눈이 주로 갔고, 후반에 있는 리팩토링 카탈로그를 봤어요. 그리고, 카탈로그를 볼 때도, before/after 코드를 보고, 이걸 어떨때 쓰는건지 등을 주로 봤던 것 같아요.
그런데 2년 전인가 회사분들과 스터디 하면서 다시 읽어봤는데, 이제는 '이 사람은 어떻게 이런 내용을 쓸 수 있었지? 이젠 나도 짬이 좀 돼서, 여기서 말하는 내용들 중 많은 것들을 이미 체득하고 있는데, 이렇게 설명할 수는 없을 것 같아. 대체 이 사람은 어떻게 이런 내용을 쓸 수 있는거지? 스스로를 어떻게 설명할 수 있지?'라는게 신기하더라고요.
특히, 리팩토링 카탈로그 중 하나, 이를테면 extract method다 하면, 그거 설명하는게 한 3~4쪽 정도 될텐데, 거기에 있는 내용 중에, '리팩토링 순서'라는 섹션이 있어요. 그게, 가만히 살펴보면 굉장히 상세하게 써있어요. 이를테면, ㅇㅇ님은 ㅇㅇ님이 너무나 익숙하게 쓱쓱 하는, 그런데 거기에 전문성이 스며들어 있는, 그런걸, 아주 상세하게 설명할 수 있나요? 그런걸 알고 보니까 대단한거예요. '이 사람은 자기가 이런 순서로 한다는걸 어떻게 알았지?' 평소에 본인의 인지 과정을, 굉장한 현미경을 대고 들여다본거죠.
이 대화를 하고 나니, 이런 훈련 설계가 가능하겠다는 생각이 든다.
- bowling game kata에 대해서 언급만 하고, 자료를 스스로 찾아보게 하기
- 그 자료 검색 과정을 스스로 인지하고 반추하게 하기. 본인의 인지 과정을 해상도 높게 관찰할 수 있는가.
- 그 느낌을 가지고, 실제로 bowling game kata 해보기
인지를 해상도 높게 한다는 것은, CognitiveTaskAnalysis랑도 연관이 있을 것 같고, ReflectivePractice와도 연관이 되겠다.
Python 버전으로 bowling game kata 자료를 만들어봐야겠다는 생각이 든다. 그리고, 15년쯤 전에 한국의 어느 개발자분이, 각 장면에서 필요한 이클립스 단축키까지 부연해서 만든 자료가 있는데, vscode로, 단축키까지 표시된 버전으로 하나 만들어야겠다. 가끔 bowling game kata를 권해주면 좋겠다는 장면들이 많았는데, 왜 그 때는 '내가 만들면 되지'라는 생각을 못했을까.
어떻게 보면, 뭐랄까, 내가 스스로 'bowling game kata라는게 있다던데?' 해서 찾은게 아니라, '찾아보라'라고 하면, 딱 그것을 찾고 끝나는게 아닐까 하는 생각이 들기도 한다. 거기서 더 뻗어나가는 능동적인 탐색을 하지 않을 수도.
bowling game kata가 끝이 아니라, 그걸 만든 uncle bob이라는 사람은 어떤 사람인지, 뭘 했는지, 프로그래머 세계에서 어떤 평판이나 존경을 받는 수준의 사람인지, 그 사람은 어떤 생각들을 했고 어떤 글들을 썼는지, 어떤 책을 썼는지, 그 사람과 같이 했던 사람들은 누구인지 등을 뻗어나가면서 능동적으로 학습하는 것이 중요한데, 그러한 일상의 탐색들이 몇 년간 쌓이면 엄청난 양이 되는데.
이런 생각을 하다 보니, 책/Antifragile에서 '산책가'에 대한 이야기를 하던게 생각난다. 여러 구절들이 있는데, 어떤 느낌인지 한 구절만...
왜 그럴까? 혁신은 표류하는 성격이 있으며, 정해 놓은 절차에 갇히지 않고 눈앞에 나타나는 기회를 놓치지 않는 산책가의 기질을 요구하기 때문이다. 샤핀은 벤처 투자에서 중요한 결정은 비즈니스 플랜이 없이 이루어진다고 했다. 따라서 분석이라는 것이 있다면, 그것은 무엇인가를 대체하거나 확인하는 것에 불과했다. 나도 실리콘 밸리에서 투자를 목적으로 벤처 투자자들과 함께 시간을 보낸 적이 있었는데, 확실히 샤핀의 생각에 공감할 수 있었다.