검색결과 리스트
글
프로그래머의 길 멘토에게 묻다.
북로그
2010. 12. 10. 23:56
1장 들어가는 글
- 소프트웨어 장인정신이란 무엇인가?
- 견습과정이란 무엇인가?
- 견습과정 패턴이란 무엇인가?
- 패턴들은 어디시 비롯 되었는가?
- 여기서 이제 어디로 가는가?
2장 잔을 비우다
- 첫 번째 언어
- 흰 띠를 매라
- 열정을 드러내라
- 구체적인 기술
- 무지를 드러내라
- 무지에 맞서라
- 깊은 쪽
- 한발 물러서라
3장 긴 여정을 걷다
- 긴 여정
- 예술보다 기예
- 지속적인 동기부여
- 열정을 키워라
- 자신만의 지도를 그려라
- 직위를 지표로 이용하라
- 전장에 머물러라
- 또 다른 길
4장 정확한 자기 평가
- 가장 뒤떨어진 이가 되라
- 멘토를 찾아라
- 마음 맞는 사람들
- 팔꿈치를 맞대고
- 바닥을 쓸어라
5장 끊임없는 학습
- 능력의 폭을 넓혀라
- 새로운 정보를 얻고자 자기 능력의 폭을 넓히는 단계는 견습생에게 아주 중요하며, 다양한 차원에 걸쳐서 새로운 지식과 경험을 찾아가는 활동을 수반한다. 몇가지 사례로
- 구글리더 같은 구독기로 소프트웨어 개발 블로그를 구독하라. 팀 오라일리가 ' 알파 긱'이라 불렀던 블로거들을 구독해보라
- 트위터에서 소프트웨어 분야쪽으로 유명한 사람들을 팔로우하고, 관심있는 분야에 주의를 기울여라
- 최근에 만들어진 신기술 로컬 유저그룹에 참여하고, 주최자에게 자신을 소개하고 도움을 주어라
- 기술적인 컨퍼런스에 참석하고, 웹사이트의 슬라이드, 오디오, 동영상 등을 참고하라
- 온라인 대학강좌, 아이튠즈, 유투브 , Google Talk 등 무료로 접할 수 있는 동영상을 보아라
연습, 연습, 또 연습
- 코드카타는 연습하고 연습하고 또 연습하는 방법 중 하나일 뿐이며, 핵심은 스트레스 없고 쾌활한 분위기에서
- 소프트웨어를 개발할 수 있는 시간을 스스로 개척해 가는 것이다. 그리고 연습시간에 짧은 피드백 루프를 같이 짜 넣는 것이 좋다. 수련시간에 사용할 흥미로운 과제들은 Programming Pearls, More Programming Pearls, Etudes for Programmers 같은 오래된 책을 통하여 확보하는 것도 좋은 방법 중 하나이다.
부숴도 좋은 장난감
- 실패는 종종 무언가를 배울 수 있는 가장 좋은 방법이 된다. 오직 과감한 일을 하고, 실패하고, 그 실패로부터 학습하고, 또 다시 시도하는 것, 우리는 그렇게 해야만 어려운 문제에 맞닥뜨렸을 때 성공해 내는 사람으로 성장 할 수 있다.
- 공 세개로 저글링할 줄 아는 사람이 다섯 개짜리 저글링을 전혀 시도하지 않으면, 그는 결코 한단계 더 올라서지 못할것이다.
- 이 패턴을 사용하는 고전전인 예로 자신만의 위키을 만들었던 사람들을 들 수 있다. 위키는 놀라우리만치 간단한 모양이 될 수 있으며, 추후에 HTTP, REST, 파싱, 웹설계, 캐싱, 전문(full-text검색), 데이터베이스, 동시성을 배울 수 있다.
- 또 다른 예로, 테트리스, 틱택토, 블로깅 소프트웨어, IRC 프로그램 등이 있다. 이것들은 본시 장난감이기 때문에 재미있어야 한다는 것을 잊지말고, 재구현하면서 그 도구가 지금의 설계에 이를 수밖에 없었던 이유를 깊이 생각해보자
소스를 활용하라
다른 사람들의 코드를 찾아서 읽어라. 당신이 매일 사용하는 도구나 애플리케이션부터 시작해보라
그 사람들의 코드를 읽고서, 그들처럼 프로그래밍 하는 법을 배우고, 개발자들이 코드를 그런식으로 모듈화한 이면에 무슨 이유라도 있는지 찾아보고, 당신이라면 어떻게 했을지 비교해 보라. 어떤 까닭에 그런 선택을 했는지 이해하기 위해서, 코드의 리팩터링을 시도해보고, 그 기능을 당신이 장난감으로 구현해서 통합해 봤을 때 교육적
가치가 있을지 생각해보라. 시간이 지나면서 사람들이 작성한 코드로부터 그 의도를 꿰뚫어 보는 능력을 키울 수 있을 것이다.- 패턴, 관용어법, 우수한 사례들에 대해 배우는 가장 좋은 방법은 오픈소스 코드를 읽는 것이다.
- 이 방법은 소프트웨어 개발 분야에 훌륭한 교사가 부족하다는 점을 보완해주면서, 프로젝트에 속한 개발자들이 학습하고 새로운 요구사항에 대응해 가는 과정을 추적해 나갈 수 있다. 알고리즘이 복잡한 오픈소스 프로젝트를 골라, 그 소스를 둘러보면서 생소한 알고리즘이나 자료구조, 설계사상을 기록한 후, 그 프로젝트 구조를 기술하고 새로 알게된 아이디어를 블로그에 포스트해보자
일하면서 성찰하라
- 사색하는 소프트웨어 개발자가 되어라. 그러려면 일상에서 당신이 어떻게 일하고 있는지 스스로 성찰해야 한다.
- 우리의 목표는, 매일 쌓은 경험을 낱낱이 분해한 다음 새롭고 흥미로운 방법으로 재조립하여 그런 일상의 경험으로부터 최대한의 교육적 가치를 얻어 내는 것이다. 당신이 일하는 습관을 조사하고 적응시키고, 개선하는데 들인 모든 노력에 대한 의미있는 증거는, 오직 기술 수준의 향상뿐이다.
배운 것을 기록하라
- 당신이 걸아가는 여정의 기록을 일지나, 개인위키, 블로그 등으로 남겨라. 배운 교훈을 시간 순으로 기록하게 되면 걸어온 여정을 뚜렷이 볼수 있으므로, 멘토링하는 사람들에게 영감을 줄 수 있다. 당신이 썼던 글을 정기적으로 다시읽고, 리뷰함으로써, 당신은 미래를 만들어 내기위해 과거와 현재를 재배치 할 수 있다.
배운 것을 공유하라
- 배운 것을 정기적으로 공유하는 습관을 견습과정 초기에 들여놓아라. 이것은 블로그를 운영하는 형태든, 컨스런스에서 발표하거나 학습중인 기술에 대한 튜토리얼을 쓰는 형태도 될 수 있다.
- 혼자 힘으로 배우는 것과 그렇게 익힌 새 지식을 공유하는 것 둘다를 가치 있게 여기는 개인들이 모인 커뮤니티의 일원이 된다는 것은 견습과정이 가진 가장 강력한 측면이다.
- 게다가 누군가를 가르친다는 것은 가르침 받는 사람보다도 가르치는 사람에게 더 강력한 학습 도구가 된다.
피드백 루프를 만들어라
- 당신의 수행능력을 평가하는데 어느정도 객관성 있는 외부 데이터를 정기적으로 수집할 방안을 마련하라. 피드백을 얻는 얻는 방식에는 여러가지가 있는데, 테스트 주도개발이나, 대화식 인터프리터가 있는 동적타입 검사형 언어를 써서 당신이 짠 프로그램이 일찍 실패하도록 하는 기법이 있다.
- 성공적인 견습생들이라면, 어떤 행동을 더 할지 덜 할지 결정하기 위한 데이터를 신속하고도 자주 얻는 상황을 조성하는 법을 배운다. 전투의 절반은 될 수 있는 한 빨리 나에게 애기해 줄 누군가를 찾는 일이다.
실패하는 법을 배워라
- 사실 무언가를 한번도 실패해 본적이 없는 사람이라면, 그는 자기 능력의 한계치까지 밀어붙이기를 피해 왔거나 자기 실수를 대수롭지 않게 여기도록 배운 사람이다. 당신이 어떤 식으로 실패하곤 하는지 확인하고, 고칠 부분을 바로 잡아라.
- 이 패턴의 목표는 당신을 실패로 이끌어 가는 방식, 조건, 습관, 행동 양식이 무엇인지 스스로 인식하는데 있다. - 당신에게는 잘 못하는 일, 좀 더 잘하려면 너무 많은 시간과 노력을 투자해야 하는 일들도 있다는 사실을 받아들여라.
6장 학습 과정의 구성
독서목록
- 읽기로 한 책들을 추적해 갈 독서목록을 유지하고, 다 읽은 책은 언제 읽었는지와 함께 기억해 두라
- 과거의 독서습관을 성찰하고, 지식의 홍수 속에서 우선순위를 매기며 걸러내는 방법이 된다.
- 다음으로 읽어야 할 책은 곧 당신을 이 여정에서 더 멀리 내딛도록 해주는 책이다. 다음에 무엇을 학습해야할지 결정하는 사람은 바로 당신이어야 하며, 적절한 책을 적절한 시점에 읽는 것 역시 중요하다
꾸준히 읽어라
- 긴 여정 중에는 상당한 양의 책을 읽을 기회가 있다. 몰두할 때, 학계라는 광대한 지식의 창구를 탐구하는 것이 필요하다
- 정기적으로 발간되는 연구 논문집을 읽으며 당신의 정신세계가 확장되고, 전산학의 최첨단 이슈에 계속 접할 수 있으며, 도전적인 새 아이디어 원천이 되기도 한다. 다음에 무슨 책을 읽을지, 지금 결정하라
고전을 공부하라
- 당신의 직업이나 관심분야에서 위대한 저작들, 즉 지금까지 있었던 가장 훌륭한 책과 기사, 연설문 등을 찾아서 그것을 진지하게 공부하기 시작하라- 조슈아 케리에브스키 -
- 제일 훌륭한 것들만 읽어라. 하지만 너무 거기에만 몰두한 나머지 일상에서 장인정신을 발전시킬 실용적인 지식과 정보를 등한시 하는 우둔을 범하지 마라
더 깊이 파고들어라
- 도구나 기술분야, 각종 기법 같은 것을 깊이 파고드는 법을 배워라. 여기서 깊이라 함은 세부적인 설계보다는 그런 설계에 이르게 한 요인을 이해하는 것을 의미한다.
- 당신이 사용하는 기술분야에 대한 명세서, RFC, 표준문서 같은 것을 읽어라. 어떤 개념을 정말로 이해하려면 그 개념이 최초로 언급된 당신의 전후 맥락을 재구성해 볼 필요가 있다. 그 아이디어를 누가 처음 생각해 냈는지 조사해 보고, 그들이 풀려고 했던 문제가 무엇이었는지 이해하라
- 당신이 학습중인 주제의 이면에 혹시 어떤 전산학적 개념이 깔려 있을지, 그리고 그 개념과 당신이 사용중인 구현본 사이에는 어떤 절충이 이루어졌는지 알아보라
익숙한 도구들
- 익숙한 도구들을 선별해서 거기에 집중하라.
- 때로는 일을 하기에 가장 알맞은 도구와 당신에게 가장 익숙한 도구가 다를 수도 있다.
- 당신의 경력이 성공적이려면, 익숙한 도구들을 쉽게 얻고 쉽게 버리는 법을 배워야 한다.
- 당신에게 익숙한 도구들의 목록을 적고, 그 도구를 학습할 계획을 세우고 오늘부터 실천하라.
- 정보를 조직하고 수집하는 강력한 도구를 휘두를 수 있는 개발자로 성장해 가기 위해서, 당신은 계속되는 자기 교육의 과정에 능동적으로 참여할 필요가 있다.
'북로그' 카테고리의 다른 글
| 북로그 (0) | 2011.02.14 |
|---|---|
| 프로그래머의 길 멘토에게 묻다. (0) | 2010.12.10 |
| 사랑하지 않으면 떠나라! (0) | 2010.12.10 |