Apprenticeship Patterns 이라는 원제를 그대로 번역했더라면 내가 이책을 읽을 수 있었을까? 하는 생각이 들만큼 제목만으로도 읽고 싶은 욕구를 들게 하는 책이다. 막 프로그래밍을 시작하는 견습 프로그래머를 위한 책이며 그들을 위한 각 패턴들을 소개하는 식으로 책의 내용은 구성되어 있다. 내가 이미 실천하고 있는 패턴들도 있고 생각은 하고 있으나 실천하지 못하는 패턴, 어렴풋이 생각으로만 하면서 구체적인 방안이나 계획이 없는 패턴, 미처 생각지도 못했던 패턴들이 책에 실려 있다. 
 누구나 그렇듯 푸른 꿈을 안고 프로그래밍에 입문하게 되지만 막상 취업을 해서 실무를 접하게 되면 이론과는 너무나도 다른 경험을 하게되고 자신 생각했던 원칙과 위배되는 일들이 실무에서는 벌어지게 됨을 목격하게 될 것이다. 또는 정체되어 있는 문화를 가진 조직에 포함됨으로써 자신이 가진 열정을 잃어버릴 수도 있고 처음의 목표와는 다르게 현실에 안주하게 될 수 도 있다. 이러한 일들에 실망하고 좌절하는 견습프로그래머들에게 용기와 구체적인 실천방안을 이 책은 주고 있다고 생각한다. 물론 책의 내용이 국내 사정과는 맞지 않을수 있지만 대다수의 많은 패턴대로 자신을 잘 단련한다면 뭐 자신이 목표한 바를 이루지 않을까 생각한다.
 속독으로 두번 읽은 후 각 패턴들을 짧게 정리해본다.

  "빠르게 학습하다 보면 종종 좁은 연못 속에서의 커다란 물고기가 되어 버린다. 더 큰 연못과 그 안에 더 큰 물고기가 있음을 깨달아야 한다. 작은 성공에 만족하지 말고 자신이 능력있다는 생각 보다는 긴여정속에서 끊임없이 배워나가라. 목표는 평균적인 프로그래머가 되는 것이 아니다!!! 평가가 아닌 자신의 지식에 의해 동기가 부여되는 사람이 되라."



@ 첫 번째 언어 : 언어를 하나 선택하여 그 언어에 능숙해지기 위해 실제문제에 그 언어를 적용한다. 첫번째 언어에 능숙해질수록 그 다음 언어를 배우는 일이 수월해진다.

@ 흰 띠를 매라 : 학습을 통해 얻은 자신감은 그대로 두면서 이전에 얻은 지식은 한편으로 밀어둔다. "배웠던 것은 잊어버려야 한다.", 잔을 비워라!

@ 열정을 드러내라 : 튀지않고 평균이 되려는 신입의 자세를 버리고 열의를 보여라.  

@ 구체적인 기술 : 채용면접시에 면접관에게 어필할 수 있는 기술을 가지고 있는가?라는 질문에 대답할 수 있어야한다. 지속적인 포트폴리오, 이력서 관리

@ 무지를 드러내라 : 아는 척 하기보다는 얼마나 잘 배울 수 있는지를 보여줘야 한다. 무지함을 드러내는 확실한 방법은 질문! 아는 것은 안다고 모르는 것은 모른다고!! 신입들이 범하기 쉬운 잘못. 이 패턴을 실천할 때면 어김없이 자존심이 발목을 잡는다 ^^;;

@ 무지에 맞서라 : 부숴도 괜찮은 장난감을 만들거나 마음 맞는 사람들과 멘토에게 물어본다.

@ 깊은 쪽 : 현실에 안주하지 말고 다른 깊은 방면으로 도전하라. 실패라는 위험부담을 크게 생각하지말고 도전.

@ 한발 물러서라 : 가끔 장인이나 전문가들에 비해 자신이 얼마나 보잘것없는 지식을 가졌는지를 깨닫는, 숨 막히는 두려움의 시간을 경험한다. 이것은 긴 여정에 따르는 정상적인 현상일 뿐이다. 무지를 드러내고 맞섬으로써 이를 해결하라. 자신이 잘할 수 있는 일로 후퇴하여 돌이켜본다. 이보전진을 위한 일보후퇴.

@ 긴 여정 :  자신만의 지도를 그리면서 길게 보라. 눈을 감고 10년 뒤에 자신이 맡을 일을 상상하라. 20,30,40년뒤도.....
 
@ 예술보다 기예 : 예술성을 추구하다가 실용성을 잃는 수가 있다. 먼저 프로그래밍 본연의 목적을 달성해야 한다. 내가 가끔 이럼.....좋은 코드 짠다고 별거 아닌거에 시간 다 보내는데 균형을 찾자

@ 지속적인 동기 부여 : 황금족쇄(이미 알고 있는 것으로 돈벌이가 좋아서 새로운 것을 못벌게 함)에 묶여 있는지 본인을 점검. 자신이 목표한 긴 여정 속에서 균형을 잡아나가야 함. 자신에게 동기부여가 되는 일을 15가지 적고 잠시 후에 다시 5개를 더 적는다. 그중 자발적인 동기가 아닌 다른사람을 의식한 동기가 몇 개인지, 그 비율이 처음의 15개와 뒤의 5개 안에서 달라지는지, 빼도 괜찮은 것은 무엇인지. 가장 중요한 다섯 개를 추려서 힘들때 리마인드 한다.

@ 열정을 키워라 : 사내 환경이 기예를 향한 열정이 없거나 "그냥" 소프트웨어 개발자로 고용된 경우. 마음 맞는 사람들을 만나서 배운것을 공유하거나 부숴도 괜찮은 장난감을 퇴근 후에 만든다. 

@ 자신만의 지도를 그려라 : 고용주가 제시하는 경력 관리 방향이 자신에게 맞지 않는다면 자신이 그린 지도에 맞는 멘토를 찾고 현재 상황을 파악하여 행동하라.

@ 직위를 지표로 이용하라 : 자신의 현재 상황, 능력과 직위를 비교하여 판단하라.

@ 전장에 머물러라 : "숙련됨은 연습을 중단하는 그 시점부터 퇴보하기 시작한다." 관리자의 길로 나아갈지 프로그래밍을 계속할지 판단해야 함.

@ 또 다른 길 : 긴 여정으로 볼 때 소프트웨어 개발을 하지 못하게 되었을때의 일도 생각해보자. 아이러니하게도 잠깐의 외도(개발을 떠나 다른직업을 갖게됨)가 긴여정상에서 자신에게 더 도움이 될 수도 있다.

@ 가장 뒤떨어진 이가 돼라 : 주변을 자신보다 뛰어난 개발자들로 채워서 자신이 가장 뒤떨어진 멤버가 되라. 안에서 더 성장할 여지가 있는 팀을 찾아라.

@ 멘토를 찾아라 : 자신보다 앞서 지나간 사람들을 찾아서 그들로부터 배우도록 하라. 멘토가 있다고 하더라도 그 또한 모든것을 마스터한 사람일 수는 없다. 

@ 마음 맞는 사람들 : 멘토는 가끔 다르게 느껴지거나 거리감을 느낄 수 있다.(일종의 무서움도 포함) 마음에 맞는 사람을 찾아 긴 여정에서 동반자를 만들어라. 커뮤니티를 적극 활용. 하지만 수준이 비슷한 사람끼리만 모이면 긴장감을 잃게된다.

@ 팔꿈치를 맞대고 : 짝 프로그래밍이나 핑퐁 프로그래밍을 적절히 활용(핑퐁 프로그래밍 : 짝 프로그래밍과 TDD를 결합한 방식, 테스트 코드와 테스트를 통과하기 위한 구현부를 서로 번갈아 가면서 프로그래밍하는 것)

@ 바닥을 쓸어라 : 팀 내에서 가장 실력이 뒤 떨어진다면 단순하고 매력도 없지만 반드시 해야 하는 일들을 자원해서 하라. 이것은 팀원들에게 자신을 신뢰할 수 있게하는 한 방법이다. 하지만 팀내의 잡일꾼으로 인식되어서는 안된다.

@ 능력의 폭을 넓혀라 : 새로운 지식과 경험을 찾아가는 활동을 하라.

@ 연습, 연습, 또 연습 : 연습을 할때마다 조금씩 방법을 달리하라. 기억에 의존해서 기술을 연마하지 않으며, 단순한 것을 할때에도 미묘한 것을 찾아내라.

@ 부숴도 괜찮은 장난감 : 경험은 성공뿐만 아니라 실패로부터도 얻어진다. 프로젝트중에는 이러한 실패를 해볼 수 없으므로 자신만의 장난감을 가지고 학습하라. 자신만의 위키, 캘린더, 주소록 등을 만들어 본다. 내 장난감은 뭘까? http웹과 모바일을 아우르는 일정관리표도 괜찮을 듯.  

@ 소스를 활용하라 : 다른 사람의 코드를 읽어라. 자신의 코드만 가지고 연습하면 자신의 나쁜 습관에서 벗어나지 못할 수도 있다. 오픈 소스 프로젝트를 들여다 보라.

@ 일하면서 성찰하라 : 자신의 업무 습관을 돌이켜보고 수행했던 프로젝트들을 통해 얻은 것을 정리하라.

@ 배운 것을 기록하라 : 과거로부터 배우기 위해 배운 것을 기록하라. 또한 이것을 기록만 하고 그냥 잊어버려서는 안된다. 썻던 글들을 정기적으로 리뷰하라. 내 블로그는 지금 지식의 보육원인가? 묘지인가?

@ 배운 것을 공유하라 : 배운 새 기술을 겸손하게 공유하라. 견습의 설명은 다른사람에게 사전 지식을 필요로 하지 않기 때문에 좋은 설명이 될 수 있다. 또한 누군가를 가르친다는 것은 본인에게 더 강력한 학습 도구가 된다.

@ 피드백 루프를 만들어라 : 자기 자신의 평가는 객관적이지 못하다. 자신의 수행능력에 대한 피드백을 받을 수 있는 조건을 구축하라. 면접에 떨어진 경우 면접관에게 무엇 때문에 떨어졌는지 자세히 들음으로써 많은 것을 얻을 수 있다. 나쁜 피드백은 걸러내야 한다. ("내 나이 때는 그렇게 했으니 그렇게 하게" : 충고를 위장한 거짓)

@ 실패하는 법을 배워라 : "천재성은 기꺼이 실패를 인지하고, 미봉책으로 가리려 하지 않으며, 변화하고자 하는 의지를 필요로 한다." "실패는 불가피하다."  텍스트 편집기로 코드를 짜고 컴파일,실행하기 전에 이를 검증하기 위한 테스트 케이스를 구현하라. 반복해서 코드와 테스트 케이스가 완벽하다는 생각이 들 때까지 반복해 수정하라. 최종적으로 실행해본다. 이를 통해 미처 생각치 못한 예외,에러를 찾을 수 있으며 이런 경험을 통해 자신에게 주는 시사점을 찾을 수 있다.

@ 독서 목록 : 읽기로 한 책들을 추적해 갈 도서 목록을 유지하고, 다 읽은 책은 기억해두라. 읽은 책을 관리하고 과거의 독서 습관을 성찰하라.

@ 꾸준히 읽어라 : 두껍지 않은 책을 한 권 늘 지니고 다녀라.

@ 고전을 공부하라 : 수명이 긴 책에 집중하라.

@ 더 깊이 파고들어라 : 튜토리얼을 읽을  때는 복사해서 갖다 쓸 코드를 찾지 말고 새로 습득한 지식을 마음 속 어디에 두면 좋을지 찾도로 하라. copy & paste로 문제를 해결하는데 급급해 하지말고(이런식의 문제 해결은 결국 피상적인 지식만 본인에게 전달할 뿐이다.)깊숙히 원리까지 이해하고 습득하라는 패턴.

@ 익숙한 도구들 :  익숙한 도구들은 생산성의 증대를 가져오지만 너무 익숙해져버린 나머지 트렌드의 흐름이나 더 좋은 새로운 도구를 익히는데 방해가 된다. 익숙한 도구들을 쉽게 얻고 쉽게 버리는 법을 배워야한다. 나도 eclipse를 버리는 날이 올까?

Posted by Taoist
,