깜짝 놀랄만한 이야기를 들려주마
매년 가보고 싶지만 항상 돈이 없어서 손까락만 빨고 마는 railsconf가 얼마전에 끝났다.
테크에드에서 빌 게이츠가 하는 키노트 따위를 보아온 탓인지 키노트는 원래 지루해 라고 생각하고 있던 내게 몇년 전에 봤던 마틴 파울러의 railsconf 키노트는 무척 신선하고 충격적이었다. 게다가 그 발표가 사전에 준비한 것이 아닌 즉석 발표라는 것도 놀라웠다. 게다가 레일즈를 한번도 안써본 사람을 데려다가 컨퍼런스에서 키노트를 시키다니. 그런데 키노트에 대한 반응은 대단했다고 한다. 그런게 레일즈의 팝 컬처인가. 그런데 이 동영상은 다시 찾을 수가 없네.
올해의 키노트에는 로버트 "엉클 밥" 마틴이 나왔다. SOLID를 비롯한 각종 원칙을 강조해오던 그의 스타일 대로 원칙적인 얘기를 하겠지라고 생각했다. 내용에서는 적어도 그랬다. TDD의 원리주의자이자 근본주의자이며 애자일과 XP의 극렬주의자인 평소의 그 다운 이야기였다. 하지만 발표하는 스타일에서 뿜어져나오는 열정은 대단했다. 하워드 "워드" 커닝햄에 대한 이야기를 할 때의 천진한 모습도 그랬고, 이제는 지겹지도 않나라고 생각하는 사람도 있을 법한데 다시금 TDD의 원칙에 대해서 강조할 때의 모습도 그랬다. 마지막 즈음에 원칙을 어떤 경우에도 포기하지 않는 프로정신에 대해서 이야기 할 때도 마찬가지였다. 스몰토크의 몰락에 대한 그의 분석에 분개하는 일부 스몰토크 팬들이 있긴 했지만, 대부분은 그의 키노트에 열광했다. 워드 커닝햄도 "그의 발표는 멋지다. 심지어 나에 대한 이야기가 끝나고 나서도 그랬다"라고 호응하기도 했다.
아무튼 레일즈와 관련이 없는 사람이라도 한번 쯤은 시간을 내어 볼만하다.
작년에 한 켄트 벡의 키노트도 빼놀 수 없다.
켁트 벡은 마틴 파울러와 마찬가지로 내용이 담긴 어떤 슬라이드도 없이 거의 즉흥적으로 발표를 했다. 자신이 관계하고 관심을 가졌던 패턴, 테스트(TDD), XP에 대한 자신의 경험을 편안하게 이야기 해주는 것이었다. 자신의 주장이나 판단을 직접적으로 나열하는 그런 명제적인 발표가 아니라, 자신의 경험을 숨김없이 솔직하고 편안하게 이야기 해주는 내러티브적인 발표가 맘에 들었다. 내가 평소에 알고 싶고 듣고 싶었던 그런 이야기 들이다. "TDD는 이렇게 해야 한다"라는 직설적인 주장이 아니라, "일단 테스트 만들기가 쉬우니까, 먼저 만들어 봤는데.. 어 이거 사기치는 거(cheating) 아닌가 하는 느낌이 들었다"라는 그의 TDD의 가치를 발견해 나가는 과정에 대한 이야라던가, 테스팅 프레임워크를 만들어본 자신과 자바를 잘 아는 에릭 감마가 같이 비행기 안에서 JUnit으로 JUnit을 처음 만들면서(TDDBE책을 본 사람은 이게 무슨 뜻인지 알 것이다) 테스트가 하나 통과될 때마다 신이 나서 하이파이브를 하고 소리를 질러대다가 주변 사람들의 눈총을 산 이야기 같은 것들이다.
그의 이야기는 그저 나이든 간부들이 술먹고 "나도 왕년에는 잘 나가는 사람이었는데… 이런 것도 했고 말이야"하는 식의 무용담이 아니다. 새로운 것을 시도하고, 그 안에서 무엇인가를 깨닫고 배우고, 때론 실패도 하고, 그것이 많은 사람들에게 알려지는 것을 보고 놀라기도 하는 때론 열정이 느껴지고 때론 겸손이 느껴지기도 하는 이야기이다.
나는 원래 유명한 사람에 대한 알레르기가 있다. 그저 이름이 좀 있다고 해서 무턱대로 사람들이 호감을 가지는 인기인에 대해서는 일단 눈을 반쯤 감고 삐딱하게 본다. 남들 다 가는 길로는 가기 싫은 반사회적인 기질 때문이거나, 아직 인격이 션찮아서 그럴 것이다.
그런 나도 무작정 좋아하는 몇 사람이 있다. 스프링의 창시자인 로든 존슨과 바로 이 켄트 벡 같은 사람이다. 켄트 벡이 패턴, 테스팅, XP 같은 대단한 이론을 만들어 낸 사람이라서 좋아하는 것이 아니다. 그의 주장에 100% 다 동의해서 그런 것도 아니다. 그보다는 그의 솔직함이 좋아서 그렇다. 그의 "스마트한 방법은 쓸모 없는 것이다. 그건 누구나 다 그렇게 한다. 오히려 우스꽝스럽고 말도 안되 보이는 방법이 더 유용한 경우가 많다"는 그의 말처럼 기존 권위에 대해 도전하고, 유행이나 사람들의 말에 휩쓸리지 않고 자기의 주관을 가지고 실험적인 도전을 하고, 때론 실패를 하기도 하지만, 그 것이 자신에게 통한다고 생각하면 과감히 그것을 다른 사람에게도 권해주고, 자신의 경험을 솔직하게 나눠주는 그의 자세 때문이다.
내가 생각하는 TDD의 정신은 이것이다. "실패에 대한 용기와 성공했을 때의 분명한 확신", 자신이 만든 코드에 대해서도 확신을 가지지 못하며, 그만큼 책임을 지려고 하지도 않고, 실패를 과감히 맞닥드릴 만한 자신이 없어서 더 나은 방법을 찾아 나갈만큼의 용기도 없는 그런 자세가 아니라는 것이다. 오히려 머리 속에서 한방에 모드 것을 착착 정리해내서 한방에 정답을 툭 던질 수 있는 그런 천재가 아니니까 일단 만들기 쉬운 테스트를 만들고, 그것이 통과할 때까지의 작은 스텝만 밟고 그리고 그것을 반복해서 나가다가 더 이상 테스트 만들게 없네? 그러면 확신을 가지고 다했다고 선언할 수 있는 그런 것이다.
그가 크리스토퍼 알렉산더의 패턴에 관한 책을 처음 읽고 거기서 감동한 것은 패턴언어라는 방법적인 수단이라기 보다는 고객에게 "내가 전문가니 알아서 다 해줄테니 너는 주는 거 받아먹고 만족해라"는 식의 오만한 태도가 아닌 "기술적인 복잡함을 손쉽게 이해할 수 있는 패턴언어로 만들어주어서 이해하기 쉽게 커뮤니케이션 하자"는 정치적인 겸손함이 었다고 한다.
그의 기술을 발전시켜나간 지난 삶에서 느껴지는 것은 솔직함과 겸손함이다. 그것이 꺼꾸로 용기를 만들고 확신을 만들어주었던 것이고.
나는 요즘 그의 트위터 메시지를 보는 즐거움으로 산다. 생계를 위해서 상용 프로그램인 JUnitMax를 개발하면서 그는 하루에도 여러번 지금 처한 상황이나 방금 겪은 일을 트위터에 메시지로 공개한다. TDD의 거장인 그가 "이거 재현하기 힘든 에러인데 지금 발견한 참에 소스 고치면 5분이면 되는데, 테스트를 만들려면 한 두시간은 걸릴 것 같고.. 어찌해야 하나 고민이다"라는 TDD순수주의자들이 보면 깜짝 놀랄만한 글을 올리기도 하고 (바로 론 제프리가 바로 받아서 "어떻게 해도 좋으니, 결정을 솔직하게 고백하고 거기서 배운 점을 나눠라"라고 압박을 하기도.. ) "하루 종일 작업을 했는데 문제 해결은 안되고 더 코드가 엉망이 되버렸다. 다시 이전 상태로 복귀"라는 실패담을 나누기도 한다.
진정한 고수들에게서 항상 느끼는 공통점은 항상 정답을 말하려고 하지 않는다는 것이다. 확신을 가지고 자신의 경험에서 나오는 조언은 해주기도 하지만, 자신의 실수에 대해서 언제나 편안하게 고백하고, 그것을 통해서 무엇을 배웠고, 어떻게 개선했으며 그래서 어떤 점이 좋아다고 밝히는 점이다. 솔직하고 겸손하다.
초보자들은 실수하는 것 자체가 무서워서 아예 시도를 안하려고 하고, 좀 경력이 쌓이면 실수한게 알려지면 무시 당할하는 것이 두려워서 안전한 길을 찾으려고만 하는 모습을 본다. 뭐 남의 얘기가 아니라, 내가 그랬다. 하지만 거기서 조금만 더 용기를 내면, 그리고 그런 도전과 실수를 통해서 무엇인가 배우려고 노력하고 그리고 같은 실수를 반복하지 않으려고 마음을 먹으면 그때는 정말 실력이 쌓이고, 남들이 생각없이 따라가는 뻔한 길이 아니라 남들보다 조금 더 앞서 나갈 수 있는 그런 길을 찾을 수 있는 것 같다.
로드 존슨은 TSSS발표에서 "내가 스프링을 만들기 전에 참여했던 자바 프로젝트는 결국 다 실패로 끝났다라고 고백한 적이 있다. 폼나는 표준기술인 EJB, 특히 엔티티빈을 쓰자고 앞장서서 주장하고 밤을 새가면서 몇달간 작업해서 EJB를 쓰는 프레임워크를 만들었다가 한심한 퍼포먼스와 떨어지는 생산성을 경험하고 실패한 이야기, 그리고 그런 경험들을 통해서 배운 것을 가지고 새로운 시도를 해보고, 그 속에서 IoC/DI, AOP, PSA의 원칙을 발견해나가고 결국 스프링을 만들게 된 이야기를 솔직하게 나누는 그의 모습에서 처음 매력을 느끼게 되었다.
자신있는 자신의 경험과 남들도 다 인정하는 권위와 그에 따른 안전장치에 기대서 오만하게 안주하려는 것이 아니고, 항상 미지의, 실패할 가능성이 있는 것에 도전해보려는 자세를 가지고 있고, 그 과정에서 자신이 발견한 것을 솔직하게 나누어주고, 겸손하게 배우려느 자세를 가진 사람들을 존경하고 따르는 이유이다. 나도 언젠가 그렇게 되고 싶고.
스프링 책을 쓰면서 가장 힘든 건, 실수를 하면 안된다는 완벽함에 대한 압박감이다. 지금까지 나온 대부분의 스프링 책을 보면서 실망하기도 했고, 틀린 내용도 많이 발견했기 때문에 나는 그러면 안된다고 생각해서 그럴지도 모른다. 그래서 어떨 땐 한 페이지도 안되는 내용을 쓰기 위해서 다른 책 몇권을 찾아서 읽고 수많은 코드를 만들어가며 검증해보려는 수고를 하기도 한다. 다 좋은 짓이긴 한데. 그만 압박감을 좀 내려놓고, 편안하게 그냥 내가 아는 수준에서 쓰려고 마음을 바꿔먹어야 할 것 같다. 좀 실수를 하면 어따랴. 그러면 누군가 보고 맘에 안들어서 더 좋은 것을 내놓을지도 모를텐데 말이다.
얘기가 자꾸 새는데.. 호주의 뼈마디가 시린 겨울이 찾아와서 감기가 걸린 탓에 머리가 띵해서 집중도 안되고 블로그 쓰면서 하는 하루의 워밍업이 길어지는 것 같다.
아무튼 그래서 켄트 벡의 키노트는 재밌다. 그것이 재밌는 것은 "이야기"로 들려주기 때문이다. 안본 사람들이라면 한번씩 들어볼 것.
좋은 글 잘 읽었습니다. 많은 것을 느끼게 하는 글이네요. 요즘 저에게 일침을 가하는 듯 합니다. 소프트웨어도 한번에 완벽하게 만들기 힘들 듯이(물론 만들 수 없다는 것은 아닙니다.) 책도 계속해서 발전시켜 나갈 것이라는 마음으로 쓴다면 좀 더 마음 편하지 않을까요? 저도 제가 쓴 책을 지금 보면 많이 부끄럽습니다. 그런 마음이 생겨야 다시 개정판을 쓸 마음이 생기지 않을까요?
지금 가진 실력으로도 충분히 좋은 책 쓰실 거라 믿습니다. 빨리 보고 싶은 마음 뿐이네요. 요즘 Spring에서 좀 뒤에 서 있는지라 토비님 책을 통해서 다시 열정을 불사르기 위해서 준비중입니다.
호주에 뼈마디 시린 겨울..이란게 있었나? 암튼 빨리 쾌차하길 빌어~
역할 모델을 찾지 못하겠다며 투덜거리던 때… 그리고 재능만 믿고 우물 속으로 파고 들었던 때가 있었는데 이분들 덕분에 우물에서 나와 겸손하게 제 직업에 만족하며 살아가고 있습니다.
오늘도 이런 좋은 글을 써주셔서 감사합니다.
겸손하니 솔직하게 돼고,
솔직하니 심플해지고,
심플하니 유머가 섞일수 있는걸까요? (유머는 좀 억지인 듯 하지만…^^:)
좋은 글 잘 읽었습니다.