본문 바로가기

etc

book: 프로그래머의 길, 멘토에게 묻다.

반응형
데이브 후버 : 옵티바Optiva의 수석 장인
애디웨일 오시나이 : 구글 엔지니어, 전자상거래 소매업자가 사용하는 POS시스템에서 투자은행 대상의 거래 시스템 게발

 알지 못하며 그 사실도 모르는 자, 바보로다 - 그를 멀리하라!
알지 못하나 그 사실을 아는 자, 못배운 자로다 - 그를 가르치라!
알고 있으나 그 사실을 모르는 자, 잠든 자로다 - 그를 깨우라!
알고 있으며 그 사실을 아는 자, 깨우친 자로다 - 그를 따르라!
 - 이자벨 버턴 부인 (Lady Isabel Burton, 1831-1896) form The Life of captain Sir Richard F.Burton
- 천일야화를 영어로 완역한 영국의 모험가이자 저술가 리처드 버턴 경의 부인


http://Stickyminds.com 에 기고요청으로 시작
http://clabs.org/blogki/index.cgi?page=/TheArts/BeTheWorst
Red squirrel reflections : http://redsquirrel.com/cgi-bin/dave


http://www.livejournal.com
http://hillside.net/plop/2005/group1.html
http://apprenticeshup.oreilly.com
http://bookshelved.org

뜻을 품은 소프트웨어 장인으로서, 우리는 소프트웨어 개발을 수련하고 다른 이들의 학습을 돕는 것으로 전문적인 소프트웨어 개발의 기대치를 높이고 있다. 이와 같은 작업을 통해 우리는 아래와 같은 결론에 이르렀다.

 우리는 동작하는 것을 넘어서 잘 짜인 소프트웨어에,
변화에 대응할 뿐 아니라 지속적으로 가치를 더하는 일에,
개인들 그리고 그 사이의 상호작용에 더해서 전문가들의 공동체에,
고객과의 공동 작업 뿐 아니라 생산적인 파트너십에 가치를 둔다.
즉, 우리는 왼편의 항목을 추구함에 있어서 오른편의 내용이 필수불가결함을 알게 되었다.
- agilemanifesto.org

from software_craftsmanship mailing list

이 책의 사용법
'패턴 언어는 그것을 사용하는 각 사람에게 새롭고 독특한 건물을 무한히 다양하게 창조할 수 있는 힘을 부여한다. 이것은 그가 통상적으로 사용하는 언어가 그에게 무한히 다양한 문장을 창조하는 힘을 주는 것과 마찬가지다. - 크리스토퍼 알렉산더  The timeless ways of building, p, 167'

book
천재들의 창조적 습관, 문예출판사
대중의 지혜: 시장과  사회를 움직이는 힘, 2005 랜덤하우스코리아



소프트웨어 장인정신이란? 
견습과정이란?
견습과정 패턴이란?
패턴들은 어디서 비롯되었는가?
여기서 이제 어디로 가는가?

소프트웨어 장인정신 선언

1장 들어가는 글
소프트웨어 장인정신이란 무엇인가?
견습과정이란 무엇인가?
견습과정 패턴이란 무엇안가?
패턴들은 어디서 비롯되었는가?
여기서 이제 어디로 가는가?

2장 잔을 비우다
첫 번째 언어
흰 띠를 매라
열정을 드러내라
 장인들은 소프트웨어 개발이라는 기예를 기꺼이 배우고자 하는 열성적인 견습생만 채용한다.
 견습생들은 소프트웨어 장인정신 개념에서 필수적인 부분이다. 그들은 일에 대한 의욕과 배움에 대한 추진력을 가지고 와서는 다른 모든 이들에게 퍼뜨리기 때문이다 - 피트 맥브린
 상황 : 당신은 스프트웨어 개발이라는 기예에 대해 만족할 줄 모르는 열정과 호기심을 지녔다.
 문제 : 당신이 동료들에 비해서 얼마나 더 큰 열정을 지녔는지 의식하면서, 스스로 열정을 숨기고 지내게 되었다.
 해결책: 미숙함에도 불구하고(그리고 미숙하기 때문에) 당신은 '전염되는 의욕'같은 독특한 속성을 팀으로 가지고 온다. 기예를 향한 당신의 열정을 어느 누구도 꺾지 못하게 하라. 그것은 소중한 것이며 당신의 학습을 촉진시킬 것이다. 
 소프트웨어 개발자로서, 당신은 불가피하게 팀의 일부로 일해야 한다. 조직이란 그 구성이 어떠하든 간에 평균 수준으로귀하려는 경향이 있는데, 특히 새내기들이 그러기 쉽다. 대부분의 팀은 테크놀로지에 대해 엄청나게 열정적이거나 의욕적이지는 않다. 예상할 수 있듯이 그런 보통의 팀은 진행중인 프로젝트를 완료해서 납품하거나 개발 주기에서 그들을 괴롭히는 면을 개선하는 일 같은 것에 관심이 집중되어 있다. 그러므로 열성적인 견습생들은 종종 레이더 망 아래로 날고자는 충동(다른 팀원들에 비해 튀어 보이지 않으려는 태도)에 굴복하게 된다. 그들은 자기 의욕을 아예 억누르거나 일상적인 업무를 벗어났을 때만 내보인다.
 물론 이미 구성된 팀 내에서 열의를 내보이는 것은 어느 정도 위험성이 있다. 팀의 사기가 낮거나 신참들을 별로 반기지 않는 분위기라면, 등 뒤에서 곱지 않은 시선을 느껴야 할 것이다. 또한 학습 능력보다 실무적인 역량을 더 중요시하는 사람들이라면 당신은 별로 좋은 인상을 주지 못할 텐데, 특히 당신이 무지함을 드러낼 때 더욱 그럴 것이다. 다른 패턴과 마찬가지로 이 패턴 역시 무턱대고 적용해서는 안 된다. 팀 내 역학이라는 요소는 항상 고려되어야 한다. 만약 팀이 당신의 열정을 받아주지 못한다고 생각되면, 당신의 열정을 키워 나갈 방법을 달리 찾을 필요가 있다.
 하지만 견습생들의 열의와 기여에 대해 열린 팀에서라면, 자유로운 상상력이나 열정 같은, 경험이 더 많은 개발자들이 기대하는 독특한 기질을 팀에 가져올 수 있을 것이다. 당신의 경력 중에서 이 시기가 위험을 감수하고 속내를 털어놓기에 가장 적당한 때다. 당신은 잃을 것이 별로 없다. 자신이 가진 아이디어와 열정은 팀에 지성과 다양함을 더할 것이다. 제임스 서로위키는 The Wisdom of Crowds에서 집단 지성의 핵심 요소로 생각의 다양성을 거듭 지목하고 있다. (대중의 지혜: 시장과 사회를 움직이는 힘, 2005, 랜덤하우스) 
항공모함 승무원들의 집단 정신을 주제로 한 흥미로운 연구에서 신참자의 역할에 대해 밝혀낸 사실이 있다. 전투기들이 계속해서 오가는 거대한 함선을 안전하게 움직이려면 복잡하고 잘 조화된 그룹 활동이 필수적인데, 여기서 신참들이 중요한 역할을 한다는 것이다. 연구자들은 경험 수준이 다양한 사람들로 구성된 팀이 실제로 더 건강하다는 사실을 발견했다.
  
전반적인 이해력은 서로 다른 여러 수준의 경험이 상호 연과될 때 더욱 높아질 수 있다. 그 무엇도 당얀하게 여기지 않는 신참들과, 알 것은 다 안다고 생각하는 고참들이 더 자주 밀접하게 소통할 때가 거기에 해당된다. 
 - 칼 와익, 칼린 로버츠,   Collective Mind in Organizations, p, 366
궁극적으로는, 열정을 드러내는 것이야말로 견습생이 맡아야 하는 몇 안되는 책무 중 하나다. 심도 있는 지식이나 엄청난 생산성으로 기여하지는 못하더라도, 팀에 열정을 불어 넣고 모든 것에 대해서 질문하는 것이야 말로 당신의 본문이라 할 수 있다. 당신은 지금 팀의 발전을 위해 유용한 제안을 할 수 있는 신선한 관점을 지닌 독특한(그리고 일시적인) 위치에 있는 것이다.
 
견습생은 장인들로부터 배움을 얻지만, 장인도 견습생에서 배운다. 열정이 있는 초보자는 장인을 스스로 일신하게 할 뿐 아니라 외부에서 들여온 새로운 아이디어로 장인의 의욕을 불러일으킨다. 잘 선택된 견습생은 마스터마저도 더욱 생산적이 되게 할 수 있다.
- 피트 맥브린 Software Craftsmanship
 실천방안
  어떤 아이디어가 있었지만 실제로 제안하지는 않았던 가장 최근의 기억을 떠올려 보라. 제안할 대상으로 생각한 사람을 찾아가서 그 아이디어를 설명하라. 그 사람이 미흡한 점을 지적한다면, 그런 점을 개선할 수 잇게 도와달라고 설득해 보라.
관련 항목 
 무지를 드러내라,  열정을 키워라

구체적인 기술
 지식을 가진 것, 그리고 그 지식을 써서 소프트웨어를 만들어 내는 역량과 실무 능력을 갖춘 것은 다르다. 여기에 장인 정신의 역할이 있ㅅ다. 
 - 피트 맥브린 - 소프트웨어장인정신

>상황
 당신은 현재보다 더 나은 학습 기회를 얻고자 재능 있는 장인들이 모인 팀에 들어가서 할 수 있는 역할을 찾고 있다.
>문제
 유감스럽게도 그 팀은 업무에 직접적인 도움이 되지 않을 사람을 고용하는 위험은 감수하고 싶어 하지 않는다. 더구나 그 팀에서 단순 작업을 자동화 했다든지 해서, 당신이 간접적으로 기여하는 것마저도 여의치 않을 수 있다.
>해결책
구체적인 기술을 습득해서 유지하라. 견습생은 그 열정만으로도 팀 내에 빨리 배우는 능력을 가져다주겠지만, 만약 당신이 특정한 도구와 기술 분야에 대해 뚜렷하고 입증할 만한 역량을 지녔다면, 일정 수준으로 성장할 때까지 팀에 간접적으로나마 기여할 수 있으리라는 신뢰를 얻기가 더 쉬울 것이다.
 당신이 습득해야 하는 구체적인 기술 중 어떤 것은, 엉성한 인사 기준을 통과하거나 아무 생각 없이 팀을 꾸리는 관리자들에게 보여주기 위한 요령의 수준은 넘어야 할 것이다. 또 어떤 기술은 장래 팀 동료가 될 사람들이 당신에 대해서 쓸모 있겠다, 뒤치다꺼리 같은 것은 필요 없겠다는 확신을 줄 것이다.(Organizationl Patterns of Agile Software Development,p.88), 구체적인 기술의 예를 들자면 여러 가지 대중적인 언어로 빌드 파일 작성하기, 하이버네이트나 스트럿츠 같이 잘 알려진 오픈소스 프레임워크에 대한 지식, 기초적인 웹 디자인, 자바스크립트, 그리고 당신이 선택한 언어의 표준 라이브러리 등이 있을 것이다.
 요점은 채용 담당자들이 당신을 선택하면서 이 정도라면 더 볼 것도 없겠다는 생각이 들게 해야 한다는 것이다. 구체적인 기술이 있다면 절반은 된것이나 마찬가지다.(여기에 면접 때 직접 장성한 토이 프로그램을 들고 갈 정도라면 더할 나위 없겠다)"우리가 당신을 채용한다면 출근 첫 날 회사에 어떤 기여를 할 수 있나요?" 라는 질문에, 당신이 가진 구체적인 기술은 좋은 대답이 될 수 있을 것이다. 첫 번째 언어에 대해 깊이 있는 지식을 갖추었다면 당신이 회사로부터 신뢰를 얻고 팀에 매우 유용함을 입증하는 데 많은 도움이 될 것이다.
 당신이 숙련공의 역할로 옮겨가면서 이런 기술들에 점차 덜 의존하게 될터인데, 그 시기에는 당신의 평판, 이전에 작업한 포트폴리오, 팀에 가져다 줄 수 있는 한층 심도 있는 자질을 바탕으로 채용이 이루어지기 시작할 것이다. 그때가지는 당신의 장점들을 조금 더 명백하게 드러낼 필요가 있다.
- 소프트스킬 : 조직 내에서 대인관계, 리더십, 협상력 등을 활성화시킬 수 있는 능력, 그와 대비해서 프로그래밍 기술과 같은 전문적인 지식은 하드 스킬로 부른다.
>실천 방안
 당신이 우러러보는 역량을 가진 사람들의 이력서를 모아 보라. 한 부 달라고 부탁하거나 개인 웹사이트가 있다면 거기서 다운로드해도 좋겠다. 각 사람들의 이력서에서 다섯 가지 정도 대표적인 역량을 뽑아 보고, 그중에서 어떤 역량이 지금 들어가고 싶어 하는 팀과 유사한 환경에서 바로 쓸모가 있을지 판단해 보라. 그런 기술들을 습득했음을 보일 수 있는 토이 프로젝트에 대한 계획을 세우라. 그리고 그 계획을 실행하라.

자기 이력서를 정기적으로 손보는 습관을 들여라. 그렇게 해가면서 구체적인 기술을 나열한 별도의 목록을 만들어라 .많은 채용 담당자들이 나열된 그 모든 경력사항보다 이런 목록에 있는 항목만 볼 거 라는 사실을 알게 되면 당신은 마음 편할 수 있겠는가?

관련항목
 첫 번째 언어

무지를 드러내라
 내일 나는 더 어리석게 보일 필요가 있으며, 거기에 대한 느낌도 더 나아질 것이다. 가만히 있으면서 일이 어떻게 돌아가나 살피는 것은 별로 효과가 없는 것 같다. 제이크 스크릭스,  http://www.jikity.com/Blah/apprentice.htm
>상황
 당신을 소프트웨어 개발자로 채용한 사람들은, 자신이 하는 일이 무엇인지 잘 알고 있을 거라고 믿고 있다.
>문제
관리자나 팀의 사람들은 당신이 잘 해 낼 거라는 확신을 갖기 원하지만, 실제로 당신은 몇몇 필수적인 기술에 대해 그다지 익숙하지 않다. 이런 일은 컨설턴트뿐 아니라 누구에게나 일어날 수 있다. 당신이 팀에 합류하게 된 이유는 아마도 해당 비지니스 영역이나 팀이 사용하는 기술 분야를 깊이 이해하고 있었기 때문일 것이다. 아니면 그 일을 할 사람이 당신밖에 없었을지도 모른다..
>해결책
 당신을 믿고 있는 사람들에게 학습 과정도 스프트웨어 납품의 일부분임을 보여주어라. 그들에게 당신이 성장하는 모습을 보여 주어라.
 사회심리학자 캐롤 드웩의 연구에 따르면, 대부분의 산업화된 사회에서는 유능하게 보이려는 요국가 사람들의 마음 깊은 곳에 뿌리내리고 있다고 한다. 이런 사회에서는 소프트웨어가 일상 생활에 더 깊이 파고 들어감에 따라 개발자라면 유능할거라는 기대도 점점 커져 간다. 그렇지만 당신은 아직 미숙하기 때문에 모르는 여역이 상당히 많다. 말하자면 오도 가도 못하게 된 셈이다. 당신을 둘러싼 많은 사람들- 관리자, 고객, 동료, 그리고 물론 당신 자신-은 모두 소프트웨어를 납품해야 한다는 업청난 압박에 시달리고 있다. 어떤 기능을 끝내려면 얼마나 걸리냐고 물어보는 사람들의 눈에서, 확신을 얻고자 하는 간절함을 읽을 수 있다. 그런 사람들을 진정시키고, 뭘 원하는지 잘 알겠으니 이렇게 저렇게 해서 언제까지 해 볼게요, 라며 안심시키는 일은 엄청난 부담으로 다가온다.
 소프트웨어 장인은 고객이나 동료와 맺은 튼튼한 관계를 통해서 자기 평판을 쌓아 간다. 무언의 압력에 굴복해서 사람들이 듣고 싶어 하는 얘기를 해주는 것은 튼튼한 관계를 쌓는 데 좋은 방법이 아니다. 사람들에게 진실을 말하라. 그들이 무엇을 원하는지 이제 당신이 이해하기 시작했고, 그것을 해낼 방법을 배워 가는 중이라고 알려주어라. 그 사람들을 안심시켜야 할 때는, 아는 척 하기보다는 당신이 얼마나 잘 배울 수 있는지르 가지고 안심시켜라. 이렇게 해서 당신의 평판은 어떤 지식을 알고 있느냐가 아니라 학습하는 능력이 얼마나 좋은지를 기반으로 쌓여갈 것이다.
 무지를 드러내는 가장 확실한 방법은 질문하는 것이다. 이것은 말처럼 쉽지 않은데, 특히 지문 받는 쪽에서 당신이라면 당연히 알 거라고 생각하는 경우에는 더욱 그렇다. 거기에 굴하지 마라! 물론 당신은 자존심에 상처 입지않고 어느 정도 우회해서 필요한 지식을 얻을 수도 있다. 하지만 가장 가깝게 질러가는 길을 택함으로써 숙련공으로 가는 여정이 단축될 수 있다. 시간을 들이고 연습하다 보면, 팀 내에서 제일 잘 알것 같은 이에게 물어보는 일이 당신에게 또 다른 천성처럼 되었음을 깨달을 것이다. 무지함을 드러내면서, 당신은 팀 사람들에게 자신의 학습 능력도 보여주게 되는 것이다. 그리고 그 사람들도 가끔은 질문에 대답하는 과정에서 자기가 가진 지식을 새로이 명확하게 할 수도 있다.
 '알지 못함'의 태도
 가족 심리 치료사로서 나는 다른 이들의 삶에 대한 전문적인 지식을 가졌다는 표를 내지 않고 '알지 못함'의 태도로 사람들에게 다가가도록 배웠습니다. 이처럼 알지 못하는 듯 행동하는 것은 당신이 초보 치료사이건 초보 프로그래머이건 받아들이기 힘든 일입니다. 당신의 본능은 당신에게 무지를 숨기고 아는 척하라고 시키지만, 그렇게 하면 당신의 성장은 방해 받으며 성취해야 할 일도 가로막히게 될 뿐입니다. 직업을 바꾸면서 이 가르침은 내게 많은 도움이 되었습니다. 나는 사실 매일매일 스스로 무지하다는 느낌을 몸에 붙이도록 교육받았고, 그렇게 함으로써 내가 바른 길로 가고 있음을 알수 있었습니다. 나는 성장하고 있었지요 -데이브 후버

이러한 학습 과정에 익숙해져라. 이것이 장인정신이다. 이런 과정을 불편하게 느끼는 사람들도 있다. 이런 사람들은 장인이 되기보다는 한 가지 플랫폼이나 한 분야에서 전문적인 기술을 익힌 다음에 거기서 천착하는 전문가가 된다. 관심 분야가 좁기 때문에 이런 사람들은 특정한 상황에서는 누구보다도 뛰어난 역량을 보여 준다. 전문가들은 우리 업계에서 중요하고 필수불가결한 존재이지만, 이들이 견습생의 목표라고 할 수는 없다.
 전문성은 우리 모두가 걸어가는 긴 여정에서 생기는 부수적인 결과이지 우리의 목적지는 아니기 대문이다. 긴 여정 동안 장인들은 수많은 기술이나 전문 분야와 마주칠 것이다. 필요하거나 흥미가 생길 때 그들은 이런 기술 분야를 더 깊이 파고들어서 전문적인 지식을 얻을 것이고, 깊이가 깊을 수록 좋을 것이다. 이것은 당연한 일인데, 마라톤에 대비해서 훈련하는 선수의 다른 근육이 튼튼한 것과 같은 이치다. 그 선수는 다리를 튼튼히 하려는 것이 아니라 달리기 훈련을 하는 것이다. 파이썬 프로젝트를 오랫동안 수행하면서 파있너에 대해 깊은 지식을 얻게 된 의욕 있는 개발자처럼, 마라톤 선수의 튼튼한 다리는 수단일 뿐 종착지는 아니다.
  어떤 전문가들은 특정한 분야에 계속 머물 수 있다면 무엇이든 하려고 하며 자신의 학습, 실무, 프로젝트의 범위를 점점 좁혀만 간다. 하지만 장인이라면, 익숙하지 않은 기술 분야나 새로운 업무 영역을 배울 때 자신의 전문 기술을 옆으로 밀어 두고 흰 띠를 매는 용기와 겸손을 가질 필요가 있다. 장인에게 가장 중요한 특성 중 하나는 학습하는 능력, 즉 무지의 영역을 파악해서 이 영역을 줄이려 애쓰는 것이다. 정원 한쪽에 드러나 있는 맨땅처럼 무지의 영역은 지식이라는 씨를 뿌리고 키움으로써 줄여갈 수 있다. 실험하고 연습하고 읽어서 이 씨앗에 물을 주어라. 당신은 그 맨땅의 크기에 당혹감을 느낀 나머지, 보이지 않게 숨겨두는 편을 택하고 자존심을 지킬 수도 있을 것이다. 아니면 자신과 자신을 믿는 사람들에게 정직하게 그것을 드러내 놓고 도움을 요청하는 편을 택할 수도 있다. 
견습과정이 끝날 때쯤 당신은 몇몇 기술 분야에서는 상당히 깊이 있는 지식을 얻게 될 것이다 .그것을 실마리 삼아 소수의 플랫폼과 업무 영역 내에서라면 튼실한 소프트웨어를 엮어낼 수 있을 것이다. 마스터 장인은 무수한 실가닥을 가지고 태피스트리를 엮어낸다. 의심할 여지없이 그에게도 가장 선호하는 실의 종류나 배합 같은 것이 있을 테지만, 그간 얻은 많은 실가닥은 마스터로 하야금 광범위한 기술적 환경에 적응하도록 해준다. 여기가 긴 여정이 당신을 이끌어 갈 곳이다. 무지를 드러내고 그에 맛섬으로써, 아는 척 속일 때보다도 훨씬 신속하게 누락된 실 가닥들을 자아낼 수 있을 것이다.

>실천방안
 업무에 관해서 정말로 이해되지 않는 다섯 가지를 적어 보라. 그 목록을 다른 사람들이 볼 수 있는 곳에다 붙여 두어라. 그리고 당신의 업무가 바뀔 때마다 그 목록을 갱신하는 습관을 들여라
>관련 항목
 무지에 맞서라. 더 깊이 파고들어라, 긴 여정

무지에 맞서라
깊은 쪽
한발 물러서라
장을 마치며

3장 긴 여정을 걷다
긴 여정
예술보다 기예
지속적인 동기 부여
열정을 키워라
자신만의 지도를 그려라
직위를 이용하라
전장에 머물러라
또 다른 길
장을 마치며

4장 정확한 자기 평가
가장 뒤떨어진 이가 돼라
멘토를 찾아라
마음 맞는 사람들
팔꿈치를 맞대고
바닥을 쓸어라
장을 마치며

5장 끊임없는 학습
능력의 폭을 넓혀라
연습, 연습, 또 연습
부숴도 괜찮은 장난감
소스를 활용하라
일하면서 성찰하라
배운 것을 기록하라
배운 것을 공유하라
피드백 루프를 만들어라
실패하는 법을 배워라
장을 마치며

6장 학습 과정의 구성
독서 목록
꾸준히 읽어라
고전을 공부하라
더 깊이 파고들어라
익숙한 도구들
장을 마치며

7장 결론

부록 A 패턴 목록
부록 B 견습과정의 개설을 요청함
부록 C 옵티바 견습과정 프로그램의 첫 일 년을 회고하다
부록 D 온라인 자료

참고 문헌
찾아보기
반응형

'etc' 카테고리의 다른 글

이전 전의 textcube blog  (0) 2011.01.24
그루비 - 다종 언어 프로그래밍  (0) 2011.01.19
getBytes  (0) 2011.01.17
ATOM처럼 강하게!  (0) 2011.01.16
performance test  (0) 2011.01.06