티스토리 뷰
훌륭한 프로그래머 되는 법 프로젝트와 팀을 성공으로 이끄는 선배 개발자의 노하우
피트 구들리프 지음 | 최원재, 강전희, 안재덕, 남윤화 옮김 | 한빛미디어 | 2015년 12월 10일 출간
좋은 코드를 쓰기 위한 행동
l 어떤 코딩 환경에서든 단지 작동하는 것처럼 보이는 코딩은 거부해야 한다.
l 올바르게 작동하는 훌륭한 코드를 짜도록 노력해야 한다. (그리고 올바른 작동을 증명하는 적절한 테스트도 갖추어야 한다)
l 의도가 드러나는 코드를 작성해야 한다.(다른 프로그래머들이 쉽게 파악하고 이해할 수 있어야 한다)
l 유지 보수가 가능해야 한다.(자신이나 다른 프로그래머들이 이후에 쉽게 수정할 수 있어야 한다)
l 정확해야 한다.(문제를 풀었음을 증명하는 모든 단계를 통과할 수 있어야 한다)
l 기능이 작동하는 것처럼 보이기만 해서는 안 된다.
버전 관리
l 코드 정리와 기능 변화는 별도의 커밋으로 이루어져야 한다.
코드 분석
l 코드의 어느 부분부터 보아야 하는지 파악하기.
l 코드의 부분별 기능을 알아내고, 그 기능을 어떻게 수행하는지 살펴보기.
l 코드의 품질을 가늠하기.
l 시스템 내부를 어떻게 탐색할 것인지 계획하기.
l 코딩 관례를 이해하고, 본인의 수정 사항이 그것과 어울리도록 만들기.
l 특정 기능이 있을 법한 위치를 파악하고, 그 기능에 의해 발생하는 버그 찾아보기.
l 코드와 함께 그것의 중요한 부속 부분들인 테스트 코드 및 문서 등의 관계를 이해하기.
금기 사항
l 지루한 부분은 다른 프로그래머가 하도록 하고, 자신은 항상 즐거운 작업만 하는 것은 이기적이다.
l 실제 사업적 가치를 불러일으키지 않는데도, 단순한 변덕으로 작업 체계를 ‘땜질’하는 것은 위험하다. 불필요한 변화와 위험을 추가하는 것이다. 영리적 관점에서 볼 때 더 큰 이득인 다른 부분에 투자할 수 있는 시간을 낭비하는 것이다.
l 좋아하는 사업이나 하찮은 과학적 실험으로 탈선한다면, ‘진짜’ 작업은 절대 끝낼 수 없을 것이다.
l 명심하라. 모든 프로그래밍 업무가 매력적이거나 흥미롭지는 않다. 대부분의 일상적인 업무가 평범한 업무다. 그것은 현실 세계에서 프로그래밍의 본성이다.
l 이미 존재하는 무언가를 재작성하는 것은 총체적인 노력낭비다. 우리 직업에 대한 지식의 집대성에 공헌하는 것이 아니다. 이미 존재하는 무언가를 다시 만들기란 쉽지만, 어쩌면 기존에 만들어진 구현물보다 더 좋지 않거나 끔찍하고 새로운 버그로 가득할 수도 있다.
자극 받기
l 코딩 연습을 하라. 가치 있는 의식적인 습관을 만들어줄 것이다.
l 재미 삼아 해결하고 싶은 코딩 문제를 찾아보라.
l 개인적인 프로젝트를 시작하라. 여기에 모든 여가시간을 쏟아 붓지는 말라. 다만 노력을 쏟아 부을 수 있는 새로운 무언가를 찾아내라.
l 폭넓은 분야에 대한 개인적인 흥미를 유지하면, 연구하고 배울 수 있는 다른 것들에 대한 좋은 아이디어를 얻을 수 있다.
l 다른 플랫폼이나 패러다임을 무시하지 말라. 자신이 알고 있는 것을 다시 작성하도록 노력하고 다른 플랫폼이나 다른 종류의 프로그래밍 언어를 사랑하라. 결과를 비교하고 차이를 확인해보라. 어떤 개발 환경이 특정 문제에 더 적합한가?
l 현재 일하는 곳이 기대에 미치지 못하거나 자극을 주지 않는다면, 새로운 직업을 찾는 것을 고려해보라. 맹목적으로 현 상황을 받아들이지 말라! 가끔 배는 흔들릴 필요가 있다.
l 다른 의욕적인 프로그래머들을 만나거나 함께 일하라. 개발 콘퍼런스에 참석하거나 지역 사용자 그룹에 참여하라. 그곳에는 새로운 아이디어가 흘러 넘칠 것이고, 다른 참석자의 열정으로 인한 활력으로 가득 차 있을 것이다.
l 작업 중인 진행 상황을 볼 수 있도록 하라. 무엇을 성취했는지 확인할 수 있도록 소스 로그를 리뷰 하라. 일일 로그 혹은 해야 할 리스트를 작성하라. 전진하면서 방해물을 제거하는 것을 즐겨라.
l 활기를 잃지 않도록 하라. 코드 파편으로 인해 지루해지거나 억눌리거나 압도당하지 않도록 휴식을 취하라.
l 시간 낭비를 두려워하지 말라. 이전에 이미 완료된 무언가를 작성하라. 자신의 연결 리스트나 표준 GUI 구성 요소를 작성하는 데 손해란 없다. 이미 존재하는 것과 자신의 것이 어떻게 다른지 비교하기 위한 훌륭한 훈련일 수 있다(다만 실제로 적용할 때는 조심하라).
부진 피하기
l 동일한 도구만 사용하는 습관을 멈추라. 단지 배우는 것만으로도 삶이 더 편안해질 수 있는 더 좋은 도구들이 있을 것이다.
l 모든 문제에 대해 동일한 프로그래밍 언어를 적용하는 것을 그만두라. 단지 호두를 깨기 위해 쇠망치를 쓰고 있는 상황일 수도 있다.
l 다른 OS를 사용해보라. 적절하게 사용하는 방법을 익히라. 좋아하지 않는 OS일지라도 짬을 내어 장단점을 파악해보라.
l 다른 텍스트 편집기를 사용해보라.
l 키보드 단축키에 대해 알아보고, 작업 흐름에 어떤 영향을 주는지 확인해보라. 마우스를 사용하지 않도록 의식적으로 노력해보라.
l 새로운 주제에 대해 알아보라. 현재로서는 알아야 할 필요가 없는 주제에 대해 알아보라. 예를 들어 수학적 지식이나 정렬 알고리즘에 대해 깊게 알아보라.
l 개인적인 프로젝트를 시작하라. 그렇다. 소중한 여가 시간의 일부를 괴짜스럽게 할애하라. 오픈 소스로 게시하라.
l 프로젝트의 새로운 부분을 담당하라. 많이 알지 못하는 부분을 담당하라. 당장은 생산성이 떨어질 수 있으나, 코드에 대한 더 폭넓은 지식을 얻을 수 있고 새로운 것들을 배울 수 있다.
자신을 보살피라
l 주기적으로 쉬라.
l 일하는 동안 물을 충분히 마시라.
l 적절한 눈 운동으로 눈의 긴장을 풀라.
l 적절한 시간 동안 일하고 밤에는 충분히 쉬라.
다른 프로그래머를 관찰
l 문제에 대해 어떻게 생각하고 해결하는가
l 문제의 원인을 찾아가는 경로를 어떻게 계획하는가
l 어려운 상황에서 어떤 태도를 취하는가
l 특정 문제에 집중할지 여부를 어떻게 파악하는가, 언제 쉬는가, 다른 접근법을 시도할 때는 언제인가
l 자신만 모르는 그들만의 특별한 코딩 기법이나 기술은 무엇인가
팀에서 인정받는 좋은 방법 ※ 주니어
l 팀의 코드베이스를 파악하고, 특히 직급 높은 엔지니어가 작성한 코드를 수정하는 것.
l 이 과정에서 코드 작성자에게 질문을 해야 하는 경우가 많이 생김.
l 코드를 읽다 생긴 의문을 풀고자 질문을 하다 보면, 의문에 적절한 이유가 있는 경우도 있는 반면 이유가 없는 경우도 적지 않음을 알게 됨.
l 시니어로서는 누군가 자신이 작성했던 코드를 수정하려 질문을 하면 회피하기가 쉽지 않음.
문장
코딩은 기계적으로 해서는 안 된다. 머리를 쓰자!
복사하기 - 붙여 넣기 코딩은 자제하라. 복제된 코드(그리고 복제된 버그)로부터 고통 받지 말고, 로직을 공통 함수와 공통 라이브러리에 넣으라.
한 곳이 아닌 여러 곳에서 사용되어야 한다는 것을 깨닫는 순간, 바로 리팩토링하라.
나중에 버릴지언정 지금 배우고 있는 걸을 기록하라.
목적을 가지고 자신만의 지식 포트폴리오를 관리하라.
스스로 생각하고, 다른 사람들도 스스로 생각할 권한을 누릴 수 있도록 하라. - 볼테르(Voltaire), 프랑스 계몽주의 작가
온종일 지루한 업무를 수행하느라 바쁜 와중에 오히려 그 안에 흥미로운 도전을 끼워 넣어 균형을 맞추는 것이야말로 더 나은 프로그래머가 되기 위한 길이다.
정체를 주의하라. 더 나은 프로그래머를 추구하는 과정은 가장 안락한 삶을 의미하지 않는다.
대접 받고 싶은 대로 대접하라. – 마태복음 7장12절
문제를 해결할 때 하나의 도구나 한 가지 방법에 지나치게 몰입하는 건 언제나 위험하다.
완료 상태가 무엇인지 정의하는 것에서부터 첫 번째 작업을 시작하라.
필요한 것(완료 상태)보다 더 많은 일을 하지 말라.
[후기]
개발자를 기준으로 업무에 관련되어 포괄적으로 다룬 책이어서 좋았음.
소프트웨어 공학, 개발자로서의 가치관, 태도, 습관, 업무 자세까지 두고두고 다시 볼 가치가 있음.
1년뒤에 다시 봤을 때는 생각이 얼마나 달라졌는지 같은 내용을 어떻게 해석되는지 기대가 됨.
'책 메모' 카테고리의 다른 글
[자기계발] 왜 성공하는 사람만 성공할까 (0) | 2017.01.21 |
---|
- Total
- Today
- Yesterday
- Reference
- Delphi
- 응용
- 스택
- ADODB
- java
- 계산기
- VCL
- 설명
- 일기
- 작문
- 여행영어 100일의 기적
- System
- RA
- 영어
- 자료구조
- wfd
- 정렬
- 대상
- 왕초보 영어회화 100일의 기적
- tdataset
- 말하기
- 독해
- Pte
- SysUtils
- 교육센터
- SWT
- 문법
- 알고리즘
- 상황
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |