티스토리 뷰

5장. 끊임없는 학습

원제: Apprenticeship Pattern, 2010년 초판, 인사이트

저자: 데이브 후버 / 애디웨일 오시나이 (Dave H. Hoover / Adewaile Oshiney)


1. 프로그래머의 길, 멘토에게 묻다: 1장 요약 <들어가는 글>

2. 프로그래머의 길, 멘토에게 묻다: 2장 요약 <잔을 비우다>

3. 프로그래머의 길, 멘토에게 묻다: 3장 요약 <긴 여정을 걷다>

4. 프로그래머의 길, 멘토에게 묻다: 4장 요약 <정확한 자기 평가>

5. 프로그래머의 길, 멘토에게 묻다: 5장 요약 <끊임없는 학습>

6. 프로그래머의 길, 멘토에게 묻다: 6장 요약 <학습 과정의 구성>

7. 프로그래머의 길, 멘토에게 묻다: 7장 요약 <맺는 글>

 

" 성취를 이루는 사람들이란 지식을 너무나 갈망하여 좋지 않은 여건에서도 그것을 탐구하는 이들이다. 여건이 좋을 때란 결코 오지 않는다." - C.S 루이스 <영광의 무게>
  • 성공적인 견습과정의 주요한 특징은 배우는 능력이다.
  • 견습생은 구체적인 기술을 배운다는 기본적인 행위를 넘어서 '배우는 방법' 배워야 하는데, 숙련공으로 성장해도 배움의 필요성이 없어지지는 않기 때문이다.
  • 마스터에게서 있는 특성 하나는, 특정 분야에서 힘들게 얻은 전문성을 옆으로 제쳐두고서 기꺼이 새로운 것을 배우고자 하는 태도다.
  • 숙련공으로, 궁극적으로는 마스터로 발전해 가기 위해서, 당신은 피드백 루프를 만드는 숙달될 필요가 있으며 자신의 약점에도 충분히 익숙해질 필요가 있다.

 

능력의 폭을 넓혀라

  • 당신은 새로운 지식을 이해하고 간직하며 적용하는 방법뿐 아니라 효과적으로 흡수할 있는 테크닉도 발전시켜야 한다.
  • 패턴은 익숙하지 않은 주제를 다룬 소프트웨어 개발 서적 읽는 정도를 의미하지 않는다.
  • 새로운 지식과 경험을 찾는 방법은 수없이 많다.

 

연습 연습

"우리가 마스터라고 알고 있는 사람들은 어떤 특정한 기술에 능숙해질 목적으로 거기 전념하지 않는다. 사실 사람들은 연습하는 자체를 좋아하며, 때문에 그들이 점점 능숙해지는 것이다. 그리고 능숙해질수록 기본적인 동작을 즐기게 되는 선순환이 완성된다." - 조지 레너드 <Mastery>
  • 실수해도 마음 편한 환경에서, 방해받지 않고 기예를 연마할 시간을 확보하라.
  • 안데르스 에릭슨의 연구 <의도적 수련: Deliberate practic> 기법: 탁월한 역량을 보여주는 사람들에 대한 연구조서 결과, 선천적 재능보다 어릴 때부터 최소 10 이상 해왔던 의도적 수련이 월함의 핵심 요인이었다고
  • 작업적인 일과 연습을 구분할 방법을 모색해야 한다. 우리에게는 연습이 필요하다. - 데이브 토머스
  • 초심자는 강의가 아니라 실제로 해보면서 배운다. - 로버트 마틴
  • 패턴의 핵심 요소는 스트레스 없고 쾌활한 분위기에서 소프트웨어를 개발할 있는 시간을 스스로 개척해 가는 것이다. 출시 일자도 없고, 제품화 이슈도 없고, 방해도 없다. - 데이브 토머스
  • 스스로 무엇을 연습하는지 주의를 기울이고, 진부함으로 빠지지 않도록 끊임없이 연습에 대한 평가를 나가야 한다.
  • 연습을 위한 난이도는 당신이 쉽게 있는 정도보다 약간 어렵게 하라.
  • 다음 4 동안은 일주일에 번씩 문제를 완전히 처음부터 다시 풀고, 자신의 해법이 어떻게 발전해 가는지 관찰하라.

 

부숴도 괜찮은 장난감

  • 만약 경험이란 것이 성공뿐 아니라 실패로부터도 얻어진다고 하면, 당신에게는 실패해 있는 다소 개인적인 공간이 필요하다.
  • 수준의 저글러가 공연 중에 다섯 개짜리를 시도하지 않듯이, 소프트웨어 개발자도 마음 놓고 실수를 있는 안전한 장소가 필요하다.
  • 배우기 위해서는 공을 떨어뜨릴 자유가 필요하다.
  • 리누스 토발즈도 리눅스를 처음부터 거대한 프로젝트로 생각하고 만들지 않았다.
  • 그는 토이프로젝트로 만든 자신의 os 커뮤니티에 올려 피드백을 받길 원했다.

 

소스를 활용하라

"프로그래머가 되고자 준비하는 가장 좋은 방법은 프로그램을 짜는 것이며, 다른 사람들이 작성한 뛰어난 프로그램을 공부하는 것이다. 나는 컴퓨터 과학 센터의 쓰레기장에 가서 버려진 운영체제 코드 리스팅을 건지곤 했다." - 게이츠 <Programmers at Work> 중에서

 

  • 다른 사람의 코드를 찾아서 읽어라.
  • 오픈 소스 코드의 과겨 이력을 조사하고 차후의 진행을 따라 살펴보라.
  • 개발자들이 코드를 그런식으로 모듈화한 이면에 무슨 이유라도 있는지 찾아보고, 당신이라면 어떻게 했을지 비교해보라.
  • 그러면 프로젝트에 대한 이해가 높아질 아니라 자신이 그것을 구현할 있다는 사실도 확인된다.
  • 만약 당신이 사람마다 독특하게 표현하는 것을 걸러 들을 알고 사람들의 피드백을 수요하는 법을 배울 있다면, 당신은 훌륭한 프로그래머가 것이다.
  • 대부분 학교의 전산학과 같은 환경에서는, 프로그래머들이 실무에서 코드 작성보다 코드 읽는 훨씬 많은 시간을 소비한다는 사실을 간과하는 경향이 있다.
  • 일과 시간 대부분을 차지하게 이런 코드 읽기를 잘할 있도록 자신을 훈련시키는 것은, 장기적으로 보상을 가져오는 가장 효과적인 일이라 있다.
  • 리누스와 같은 프로그래머들은 우리 대부분이 들어본 적도 없는 자료구조와 알고리즘을 아무렇지도 않게 사용하고 있다. 그들은 대부분의 사람들보다 크고 좋은 도구상자를 만드는 데에 시간을 들였을 뿐이다.
"프로그래밍 능력을 테스트하는 가장 좋은 방법 하나는, 그로그래머에게 30페이지 정도의 코드를 건네주고서 사람이 얼마나 빨리 코드를 통독하고 이해하는지 보는 것이다." - 빌게이츠
"패턴, 관용 어법, 우수한 사례들에 대해 배우는 가장 좋은 방법은 오픈소스 코드를 읽는 것입니다." - 크리스 원스트라스의 Ruby Hoedown 2008 키노트 중에서

 

일하면서 성찰하라

"자기 성찰은 쉽지 않은 일이지만, 우리는 자신의 성공보다 실패를 연구함으로써 많이 배울 있다고 나는 믿는다." - 노엄 커스(Noam Kerth) <Project Retrospectives>
  • 사색하는 소프트웨어 개발자가 되어라. 그러려면 일상에서 당신이 어떻게 일하고 있는지 스스로 성찰해야 한다.
  • 관찰-성찰-변화의 과정은 당신의 개인의 활동에만 국한되지 않는다. 가만히 당신 팀의 숙련공들과 마스터급 장인들을 지ㅗ라.
  •   사람들의 훈련, 프로세스, 사용하는 테크닉을 곱씹어보고 혹시 당신의 경험과 연관지을 있는 부분이 있을지 생각해보라.
  • 견습생이라 하더라도, 경험 많은 다른 장인들의 작업 모습을 가까이서 지켜보는 것만으로 새로운 아이디어를 떠올릴 있다.
  • 업무 습관에 대한 '나의 습관 도표' 그려보라. 일정 기간 바뀌지 않은 습관들 사이의 연관성에 집중하라.
  • 만약 습관 하나가 실제로는 비생산적이라는 사실을 알게 된다면, 습관 도표를 어떻게 바꾸는 것이 좋을지 생각해보라.

 

피드백 루프를 만들어라

"우리 소프트웨어 업계 종사자들은 어느 정도는 눈에 보이지 않는 제품을 가지고 일하지만, 눈에 보이지 않는다는 때문에 피드백에 대한 필요성은 오히려 커진다." - 노엄 커스의 <Project Retrospectives> 중에서 제리 와인버그의 언급
  • 숙련되지 않은 사람일수록 대개 무능력한지 어떤지에 대해 신경조차 쓰지 않는다.
  • 게다가 당신이 숙련되었을수록 자신과 다른 사람의 역량을 평가하기에 서툴게 마련이다.
  • 자기평가는 오로지 자신이 지닌 능력에 비례하며, 객관성이 부족할 것이다.
  • 당신의 수행 능력을 평가하는 어느 정도 객관성 있는 외부 데이터를 정기적으로 수집할 방안을 마련하라.
  • 예를 들어 입사 혹은 승진 건으로 인터뷰했던 사람들에게 연락해서 그들이 당신을 어떻게 생각했는지 들어보라. 비록 결과가 안좋았다 하더라도, 무엇 때문에 당신이 거절되었는지 자세하게 들음으로써 많은 것을 얻을 있다.
  • 유용한 피드백은 그것을 기반으로 삼아 실천할 있는 데이터이며, 특정한 행위를 더하거나 덜하도록 선택의 여지를 주는 데이터이다.

 

실패하는 법을 배워라

  • 무언가를 번도 실패해 적이 없는 사람이라면, 그는 자기 능력의 한계치까지 밀어붙이기를 피해 왔거나 자기 실수를 대수롭지 않게 여기도록 배운 사람이다.
  • 당신에게는 못하는 , 잘하려면 너무 많은 시간과 노력을 투자해야 하는 일들도 있다는 사실을 받아들여라.
  • 그러면 자기평가는 엄밀해지며 목표에 현실적인 한계선을 그을 있게 된다.

 

 

장을 마치며

  • 끊임없는 학습은 고통스러울 있으며, 특히 의무적으로 배워야 하거나 지도해줄 이가 없을 더욱 그렇다.
  • 하지만 격렬한 연습 후에 오는 근육통을 참고 견뎌야 하는 운동 선수처럼, 소프트웨어 개발자는 새로운 것을 배울 따라오는 정신적인 부조화를 견뎌내야만 한다.

 

 

 

 

댓글