책 프로그래머의 길, 멘토에게 묻다를 읽고 조금씩 정리한 게시글입니다.
우리는 동작하는 것을 넘어서 잘 짜인 소프트웨어에,
(Not only working software, but also well-crafted software)
변화에 대응할 뿐 아니라 지속적으로 가치를 더하는 일에,
(Not only responding to change, but also steadily adding value)
개인들 그리고 그 사이의 상호작용에 더해서 전문가들의 공동체에,
(Not only individuals and interactions, but also a community of professionals)
고객과의 공동 작업 뿐 아니라 생산적인 파트너십에 가치를 둔다.
(Not only customer collaboration, but also productive partnerships)
즉, 우리는 왼편의 항목을 추구함에 있어서 오른편의 내용이 필수불가결함을 알게 되었다.
- 소프트웨어 장인정신 선언문
소프트웨어 장인 정신
우리는 이 분야에 탁월한 개발자들이 있음을 알게 되었을 것이고, 그들처럼 되고자 하는 포부를 갖게 되었을 것이다. 이 책은 그러한 이들을 위해 쓰여졌으며, 책의 저자들은 커뮤니티에서 수 많은 개발자들의 피드백을 받으며 '소프트웨어 장인정신'과 장인이 되기 위한 패턴들을 정리해왔다. 나는 개발자로 일하면서 그냥 평범한 개발자가 아닌 프로가 되기 위하여 뛰어난 개발자들의 경험과 생각을 흡수하기 위해 이 책을 읽게 되었다. 이 책은 저자들이 인터뷰했던 고도로 숙련된 개인들에 내재된 가치의 정수이고, 또 일부는 그들이 장차 출현하기를 고대하는 공동체에 대한 표현이다. (이 책에서)최종적으로 이들이 정리한 가치 기준을 간단히 요약하자면 다음과 같다.
- 성장형 사고방식을 갖기
- 피드백을 바탕으로 항상 적응하고 변화해갈 수 있는 마음가짐
- 실용적이려는 욕구
- 자신의 지식을 나누기
- 결과적으로 자신이 틀렸다고 증명될지라도 기꺼이 실험해보기
- 내적 통제위치에 대한 헌신, 스스로 운명을 지배하고 책임지려는 태도
- 그룹보다는 개인에 초점을 맞추기, 우리가 추구하는 변화는 세상이 아니라 우리 안에 있음을 믿고, 개인의 역량을 향상시키는 방법에 초점을 맞추기
- 우리와 다름을 끌어안고 가겠다는 서약
- 프로세스 중심적이기보다는 역량 중심적
- 상황 학습에 대한 선호, 자기 목표를 이루려고 하는 사람들과 같은 방 안에 있는 것이 제일이다.
우리는 소프트웨어 분야의 견습생으로써, 장인이 되기 위해 내가 하고 있는 일에 좀 더 세련되고 멋진 방법이 있을거라는 생각을 항상 가지고 있으며, 이 책의 견습 패턴들을 익혀 적당한 상황에 사용해볼 것이다. 혼자 개발하면서 익혀진 나의 나쁜 개발 습관들을 버리고, 장인과 같은 습관을 가지기 위해 노력해야지.
첫 번째 언어
언어를 하나 선택하고, 그 언어에 능숙해져라. 단순히 언어로 간단한 프로그램을 짤 수 있는 수준을 넘어서, 그 언어만의 특별한 테크닉을 익혀보자. 그 언어를 사용하는 사람들의 커뮤니티에 들어가고, 가능하다면 그 언어의 유명한 책들을 사서 읽어보자. (이펙티브 시리즈 같은것들) 각 언어에는 그 언어만의 기묘한 테크닉이 있다. 펄에는 슈바르츠 변환, C 언어에는 더프 디바이스같은 것들이 그런 것 들이다. 만약 이런 테크닉을 보게 된다면, 보고 배울 수는 있겠지만 왜 그러한 테크닉을 쓰는지 이해하기는 힘들다. 이를 이해하기 위해서는 공동체 내에 축적된 경험이 필요하다.
나의 경우에는 유니티를 사용하고 있어서 C#을 주력 언어로 사용하고 있다. 하지만 약 2년이 넘는 시간동안 C#에 대해 제대로 공부해본 적이 없다. 그냥 기본적인 문법만 가지고 개발을 진행해왔다. 그 주된 이유는 약 2년동안 혼자 개발을 진행해오면서, 고수의 프로젝트를 볼 일이 없었고(맘먹고 찾는다면 찾을 수 있었겠지만 한국에서 게임개발, 특히 유니티 개발자들은 고수의 지식공유가 적은것 같다) 기본적인 문법만으로 회사에서 일 하는데 문제가 없었기 때문일 듯 하다. 운이 좋게도 이런 실력으로 뛰어난 개발자들이 있는 팀에 합류하게 되었고, 그들을 보며 언어 공부를 제대로 해야겠다는 생각이 들었다. 당연히 진정한 프로 레벨로 가기 위해서는 기본기만으로는 부족하다. 앞으로 최소 2년은 유니티로 먹고살 듯 싶으니, C#8.0까지의 지식과 Effective C#책을 읽으며 나의 첫 번째 언어인 C#에 대한 이해도를 늘려나갈 것이다.
흰 띠를 매라
새로운 것을 배울 때에는 기존의 나의 지식들을 한편으로 밀어둘 줄도 알아야 한다. 알지 못하는 영역으로 발을 들여놓고 어리석게 보여야 하는 것이 고통스러운 일일 될 수도 있지만, 가지고 있는 것을 잠시 놓고 흰 띠를 맬 수 있어야 성장속도가 가속화될 수 있다.
열정을 드러내라
미숙한 사람은 팀에 '전염되는 의욕'같은 속성을 팀으로 가지고 온다. 그러한 당신의 열정을 그 누구도 꺾지 못하게 하라. 개발자라면 어떤 팀에 들어가게 될 것이고, 그 팀은 별 다른 의욕이 없이 그냥 해야 될 일만 하고 있는 상태일 수도 있다. 모든 팀이 항상 의욕적이지 않다. 여기에 새로 온 미숙한 사람이 열정을 가지고 개발에 임한다면 팀 자체의 분위기를 바꿀 수 있다. 그것이 견습생이 해야 하는 몇 안되는 책무 중 하나이다.
구체적인 기술
팀은 업무에 직접적인 도움이 되지 않는 사람을 고용하는 위험을 감수하고 싶지는 않다. 특정 팀에 가기 위해서는 구체적인 기술을 습득하고 계속 연마해야 한다. 나는 이미 특정 팀에 속해있는 사람이지만, 이 이야기는 나에게도 적용되는 이야기이다. 팀에서 좋은 평가를 받기 위해 나의 업무와 팀에 필요한 구체적인 기술을 익혀야 하고, 궁극적으로 이러한 기술이 나의 성장에 도움이 되야 한다. 팀에 도움 되는 일이여도 나의 커리어에 도움이 되지 않는다면 익힐 필요가 없다. 이러한 경우 나의 커리어에 도움이 되는 팀으로 옮기는 것이 기존 팀, 나, 새로운 팀 모두를 위해 좋은 일이다. 이러한 점에서 지금 나에게 도움이 되면서 팀에 도움이 되는 구체적인 기술이 무엇이 있을까 생각해보면 바로 객체지향 설계에 대한 이해이다. 현재 신규 프로젝트를 진행하고 있는 팀에 있는 사람으로써, 프로젝트를 기반부터 단단히 잡고 몇년 뒤의 확장에서도 큰 문제가 생기지 않게 해야 할 일이 나의 목표이다. 나의 개발자 커리어에서 이러한 기술을 익혀야 하는 타이밍이 바로 지금이며, 지금이 아니면 이러한 경험을 하기 힘들 수도 있다. 객체지향 설계, 그리고 게임에서의 디자인 패턴들을 익히고 회사 프로젝트와 사이드 프로젝트에 적용해나가며 객체지향 자체에 대한 이해와 C#에서의 설계 기법들을 단단히 익혀나갈것이다.
최근 회사생활을 3개월 동안 하고 느낀점을 이 책을 읽으며 더 명확하게 할 수 있었다. 나의 C#에 대한 낮은 이해도, 그리고 부족한 객체지향에 대한 이해도와 큰 프로젝트를 설계하기엔 부족한 경험. 이러한 것들을 채우기 위해 흰 띠를 매고 C#자체에 대해 깊은 공부를 해야 겠다는 필요성을 느끼게 되었고, 객체지향 설계라는 기술을 익혀 나가야 함을 더 확실히 하게 되었다. 나의 제 1원칙을 소프트웨어 장인이 되는 것을 목표로 무의식 깊숙히 새겨놓을 것이다.
'공부 > 개발 독서' 카테고리의 다른 글
이상한 나라의 객체 - 객체지향의 사실과 오해 (0) | 2022.09.24 |
---|---|
끊임없는 학습 - 프로그래머의 길, 멘토에게 묻다 (0) | 2022.09.11 |
정확한 자기 평가 - 프로그래머의 길, 멘토에게 묻다 (0) | 2022.08.28 |
가장 뒤떨어진 이가 되라 - 프로그래머의 길, 멘토에게 묻다 (0) | 2022.08.21 |
깊은 쪽으로 - 프로그래머의 길, 멘토에게 묻다 (0) | 2022.08.14 |