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

다용도리모콘·2021년 10월 21일
0

개발 책 읽기

목록 보기
16/18

Apprenticeship Patterns by David H. Hoover and Adewale Oshineye(프로그래머의 길, 멘토에게 묻다). Copyright 2010 David H. Hoover and Adewale Oshineye, 978-0-596-51838-7

기술을 습득하고 수련하는 것은 사람에게 천성은 아니며 그것 자체가 수련해야 할 또 하나의 기술이다.
-워드 커닝햄-

'패턴'이란, 특정한 맥락에서 어떤 문제에 되풀이하여 적용할 수 있는 해결 방안에다 이름을 붙이고 설명을 덧댄 것을 일컫는 말입니다.

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

잔을 비우다

흰 띠를 매라

새로운 상황에 들어설 때는, 학습을 통해 얻은 자신감은 그대로 두면서 이전에 얻은 지식은 한편으로 밀어두어라.

실천 방안: 특정 프로그래밍 패러다임(객체 지향적, 함수형 등)으로 작성했던 프로그램을 하나 골라서 다른 패러다임에 속한 언어로 다시 구현해 보라.

열정을 드러내라

열정을 드러내는 것이야말로 견습생이 맡아야 하는 몇 안되는 책무 중 하나다.

실천 방안: 제안하지 않았던 아이디어가 있다면 말하려던 사람을 찾아가서 그 아이디어를 설명하고 피드백을 받아보자.

구체적인 기술

구체적인 기술을 습득해서 유지하라. ...당신이 특정한 도구와 기술 분야에 대해 뚜렷하고 입증할 만한 역량을 지녔다면, 일정 수준으로 성장할 때까지 팀에 간접적으로나마 기여할 수 있으리라는 신뢰를 얻기가 더 쉬울 것이다.

실천 방안: 뛰어난 역량을 가진 사람들의 이력서를 모아 그들의 대표적인 역량을 뽑아보고 그런 기술들을 습득했음을 보일 수 있는 토이 프로젝트에 대한 계획을 세우고 실행하라, 자기 이력서를 정기적으로 손보는 습관을 들여라.

무지를 드러내라

당신을 믿고 있는 사람들에게 학습 과정도 소프트웨어 납품의 일부분임을 보여주어라. 그들에게 당신이 성장하는 모습을 보여주어라. ...아는 척 하기보다는 당신이 얼마나 잘 배울 수 있는지를 가지고 안심시켜라.

실천 방안: 업무에 관해서 정말로 이해되지 않는 것 다섯 가지를 적어 보라. 그 목록을 다른 사람들이 볼 수 있는 곳에다 붙여 두어라.

무지에 맞서라

도구나 기법을 하나 고른 다음에 그것과 관련된 지식의 빈틈을 능동적으로 메워라. 이렇게 할 때는 자신에게 가장 효과적인 방법을 택하라.

실천 방안: 무지를 드러내라에서 적었던 항목들 각각에 대해서 학습하려고 노력하라.

무지를 드러내기만 하고 맞서지 않는 것도, 맞서기만 하고 드러내지 않는 것도 부작용이 있으므로 미묘한 균형을 유지하는 것이 중요하다!

깊은 쪽

깊은 쪽으로 뛰어들어라. 다 준비될 때까지 기다리다가는 아무 일도 못 할 수가 있다. 그러므로 당신에게 두드러지는 역할이나 어려운 문제가 주어진다면, 그 기회를 놓치지 말고 두 손으로 꽉 잡아라.

실천 방안: 당신이 참여했던 프로젝트들을 다양한 기준(코드 라인 수, 개발자의 수 등)으로 평가 해두고, 새 프로젝트가 시작될 때마다 해당 프로젝트의 상대적 위치를 가늠해 경력의 흐름을 판단하라. 더 깊은 곳으로 가자!

한발 물러서라(21.10.26 가장 공감가는 구절)

...만나게 되는 장인이나 전문가들에 비해 자신이 얼마나 보잘것 없는 지식을 가졌는지를 깨닫는, 숨 막히는 두려움의 시간도 경험할 것이다. 이런 경험은 특히 마감 시한이 다가오거나 당신이 제품화 이슈에 관련되어 있을 때 압도적으로 다가오게 된다. 마음을 다잡아라. 이것은 긴 여정에 따르는 정상적이고도 회피할 수 없는 현상이다.

실천 방안: 잘 알고 있는 주제를 선택해서 다시 구현해 보라.(자신감 충전 & 쉬어가기)

긴 여정을 걷다

긴 여정

이 여행이 얼마나 길어질지에 대해서는 준비가 되어 있어야 한다. 당신이 자신만의 지도를 그릴 때는 중년의 나이가 되어서도 여전히 현역 소프트웨어 개발자일 것이라는 점을 마음에 새기고 있어야 한다.

실천 방안: 10, 20, 30, 40년 뒤에 나 자신이 어떤 경험을 쌓아왔을지 상상해 보기.

예술보다 기예

장인정신은 튼튼한 상호관계에 기초한다. 이기심을 좇지 말고 고객에게 가치를 제공하는 데 집중하라. ...예술보다 공예에 가깝다는 말이 내포한 또 다른 면은, 비록 당신 마음에 차지는 않더라도 고객들이 만족할 만한 품질을 지닌 결과물이라면 내놓아야 한다는 것이다.

실천 방안: 아름답기보다는 유용한 일거리를 찾아보라.

지속적인 동기 부여

장인정신에 대한 당신의 의욕이 긴 여정 동안의 시험과 시련 속에서 적응하고 생존하리라는 확신을 가져라.

실천 방안: 자신에게 동기를 부여하는 가장 중요한 다섯 가지를 적어 보라. 그 목록을 힘든 시기에 볼 수 있도록 잘 보관해 두라.

열정을 키워라

소프트웨어 장인정신에 대한 당신의 열정을 보호하고 성장시킬 조치를 취하라.

실천 방안: 지속적으로 주변 환경을 개선할 수 있는 방법을 생각해 보라.

자신만의 지도를 그려라

주어진 경력의 방향이 맞지 않다면 논리적이면서도 의욕적으로 경력의 다음 단계를 준비하라.

실천 방안: 지금의 일자리에서 이어질 것 같은 일자리들을 나열해 보면서 경력의 방향 그려보기(자세한 내용은 책 참조)

직위를 지표로 이용하라

그럴 듯한 직함에 속지 말라. ...그것은 단지 우리 업계에 얼마나 장인이 부족한지 일깨워 주는 역할을 할 뿐이다.

실천 방안: 직책에 대한 설명을 길고 상세하게 적어보고 자신의 실제 하는 일과 역량 수준을 그것에 반영해 보라.

전장에 머물러라

당신이 프로그램을 짜지 않는 하루하루마다 숙련공으로 가는 길은 점점 더 멀어져 간다.

실천 방안: 고용주의 보상 방식이 마음에 들지 않는다면(개발에서 멀어지는 방향), 다른 보상 방법들을 준비해 승진을 거부하는 협상을 할 수 있도록 하라. 이게 가능한지 잘 모르겠다.

정확한 자기 평가

가장 뒤떨어진 이가 되라

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

실천 방안: 회사 안팎의 개발팀들을 기술적인 수준에 따라 정렬해보고 새 맴버에게 열러있는 팀을 찾아보라.
(현실적으로 가능한 방법일까?)

멘토를 찾아라

당신보다 앞서 지나간 사람들을 찾아서 그들로부터 배우도록 애써라.

실천 방안: 활발한 커뮤니티에 가입해 교사 역할을 하는 사람을 찾아내 조언을 청해 보라.

마음 맞는 사람들

추진력을 계속 유지하려면, 특히 전담 멘토가 없는 경우에는, 비슷한 길을 걷고 있는 사람들과 빈번히 교류할 필요가 있다. 그러므로 뛰어난 개발자가 되고자 하는 사람들을 찾아 나서야 한다.

실천 방안: 가입할 만한 커뮤니티들을 조사하고 모임에 참석해 보기. 가까운 곳에 모임이 없다면 모임을 만들어 보자. 회원 자격이나 모임주제를 너무 일찍 제한하지 말 것!

팔꿈치를 맞대고

다른 소프트웨어 개발자와 나란히 앉아서 실제로 같이 작업할 방법을 찾아 보라.

실천 방안: 오픈 소스 프로젝트를 새로 시작하거나 기여하려는 사람을 찾아가 함께 개발해 보자.

바닥을 쓸어라

당신은 프로젝트에 새로 합류한 견습생이다. ...단순하고 매력도 없지만 반드시 해야 하는 종류의 일에 자원하라. 이것은 꼭 그럴 필요 없는 일이라도 당신이 훌륭하게 해낸다는 것을 보임으로써 팀의 성공에 일찍 기여하는 좋은 방법이다.

실천 방안: 팀 내부에서 서로 하지 않으려고 하는 일을 자원해 해결해 보자.

끊임없는 학습

큰 성취를 이루는 사람들이란 지식을 너무나 갈망하여 좋지 않은 여건에서도 그것을 탐구하는 이들이다. 여건이 좋을 때란 결코 오지 않는다.

능력의 폭을 넓혀라

새로운 정보를 얻고자 자기 능력의 폭을 넓히는 단계는 견습생애게 아주 중요하며, 가끔은 압도됨을 느낄 수도 있다. ...이 패턴이 중요한 이유가 그 과정에서 습득할 지식 때문만은 아니다. 바로 이 패턴 자체가 습득해야 하는 기술이기 때문에 그렇다.

실천 방안: 지역에서 모이는 사용자 그룹에 참석하라.

연습, 연습, 또 연습

실수해도 마음 편한 환경에서, 방해 받지 않고 기예를 연마할 시간을 확보하라.

실천 방안: 자신이 쉽게 풀 수 있는 정도보다 약간 더 어려운 문제를 반복적으로 풀어 보라.

부숴도 괜찮은 장난감

만약에 경험이란 것이 성공뿐 아니라 실패로부터도 얻어진다고 하면, 당신에게는 실패해 볼 수 있는 다소 개인적인 공간이 필요하다.

실천 방안: 좋아하는 도구들을 동원해서 높은 품질을 유지하면서도 단순한 위키(혹은 다른 프로그램)을 만들어보라.

소스를 활용하라

다른 사람들의 코드를 찾아서 읽어라.

실천 방안: 알고리즘이 복잡한 오픈소스 프로젝트를 하나 골라 소스코드를 읽어보고 알게된 점들을 기록해 보라.

일하면서 성찰하라

당신이 일하는 습관을 조사하고 적응시키고 개선하는 데 들인 모든 노력에 대한 의미 있는 증거는, 오직 기술 수준의 향상 뿐이다.

실천 방안: 업무 습관에 대한 '나의 습관 도표'를 그려 보라. (바뀌지 않는 습관들 사이의 연관성에 집중해 볼 것)

배운 것을 기록, 공유하라

당신이 걸어가는 여정의 기록을 일지나 개인 위키, 블로그 등으로 남겨라. ... 배운 것을 정기적으로 공유하는 습관을 견습과정 초기에 들여 놓아라.

실천 방안: 인용 자체가 실천 방안.

피드백 루프를 만들어라

당신이 자기 능력에 대해 느끼는 감은, 같이 일하는 팀이란 존재에 의해 쉽사리 왜곡될 수 있다.

유용한 피드백은 그것을 기반으로 삼아 실천할 수 있는 데이터이며, 특정한 행위를 더 하거나 덜 하도록 선택의 여지를 주는 데이터다.

실천 방안: 측정 가능하고 자신이 영향을 미칠 수 있는 척도를 찾아 척도가 말해주는 바를 추측해 보자.

실패하는 법을 배워라

당신이 어떤 식으로 실패하곤 하는지 확인하고, 고칠 부분은 바로 잡아라.

실천 방안: 텍스트 편집기를 써서 알고리즘(like 이진탐색)을 구현해 보라. 이에 대해 테스트 코드를 작성하고 통과되지 못한 부분을 수정하는 과정을 최대한 반복한 뒤 알고리즘을 실행해 보라. 생각하지 못한 예외가 있다면 왜 생각하지 못했는지 생각해 보라.

학습 과정의 구성

독서 목록

읽기로 한 책들을 추적해 갈 독서 목록을 유지하고, 다 읽은 책은 기억해 두라.

실천 방안: 소스 관리 시스템을 사용해서 독서 목록 관리하기.

꾸준히 읽어라

배움을 향한 당신의 갈증을, 문자로 쓰인 정보를 흡수하는 데에 최대한 집중시켜라.

실천 방안: 책을 다 읽은 후에 바로 넘어갈 수 있도록 다음 책 준비하기. 두껍지 않은 책(혹은 e-book) 늘 가지고 다니기.

고전을 공부하라

"그건 쉽습니다. 나는 제일 훌륭한 것들만 읽지요."

실천 방안: 소장한 책 중에서 가장 오래된 책 읽어보기. 다른 개발자가 가지고 있는 가장 오래된 책 살펴보기.

더 깊이 파고들어라

더 나쁜 상황은, 당신의 지식이 너무나 피상적이라서, 어떤 계기나 누군가 때문에 시험에 들기 전까지는 자기가 아는 바가 얼마나 없는지 자각조차 못하는 것이다.

실천 방안: 명세서, RFC, 표준 문서 읽어보고 블로그에 글 쓰기.

익숙한 도구들

당신이 견습생 때 쓰던 도구들은 숙련공이 되고 나서는 더 이상 소용이 없다...당신의 경력이 성공적이려면, 익숙한 도구들을 쉽게 얻고 쉽게 버리는 법을 배워야 한다.

실천 방안: 자신에게 익숙한 도구 다섯가지 이생 가지기. 부족하다면 새로운 도구를 학습하고 많다면 구식인 도구가 없는지 점검하기.

0개의 댓글