9. Before you can change the code to add a new feature, to fix a bug,
or for whatever reason caused you to fire up your editor,
you have to understand what the existing code is doing.
We tend to gloss over this step, but it’s often the most time-
consuming part of programming.
기능추가,버그수정 그 외 무슨 이유든 코드를 고치려면 먼저 기존 코드를 이해해야 한다.
대부분 이 과정을 별것 아닌 것으로 여기지만 사실
프로그래밍에서 가장 오래 걸리는 부분이다.
22. 작명은 중요하다. 정말로 중요하다.
( 변수 , 함수 , 클래스의 작명 )
// 알아보기 겁나 힘들다..
NameGet()
GetNameRes()
UserIDGet()
...
// CS 가 뭐지???, 정의를 찾아 가봐야 한다...
if( CS() ) {
...
}
// 공통적인 내용이 앞에 있어 알아보기 쉽다.
GetName
GetNameRes
GetUserID
...
// 한눈에 무슨 일을 하는지 알 수 있다.
if( CheckState() ) {
...
}
작업자들간의 공유할 수 있는 네이밍 규칙이 필요합니다.
23. 사용하지 않게 된"#if~endif"은 빠르게 Delete
대부분의 서비스중인 온라인 게임에서
#define 의 개수는 적게는 "몇백개"에서
많게는"몇천 몇만개"에 달한다.
#ifdef~#endif 는
“가독성”과 “유지보수” 에 있어
굉장히 중요하고 민감한 부분임을
항상 명심하자.
USE_FUNC_A,B,C,D 모두 더 이상 사용하지 않지만
여전히 코드상에 남아있다
24. Class1
CompareString // Class1 의 스트링 비교 함수
미사용 코드는 꼭 제거하자
완전히 같은 기능을 하는
중복 함수들..
Class2
StringCompare // Class2 의 스트링 비교 함수
Class3
CompareStr // Class3 의 스트링 비교 함수
#ifdef CASE_NEW
int nCase = 0 ;
#else
int nCase = random(0,2);
#endif // CASE_NEW
if( nCase == 0 ){
...
}
// 여기부터는 필요가 없어 졌다.
else if( nCase == 1 ) {
...
}
else if( nCase == 2 ){
...
}
무쓸모 코드 발생
int nCase = random(0,2);
if( nCase == 0 ){
...
}
else if( nCase == 1 ) {
...
}
else if( nCase == 2 ){
...
}
25. 적재적소의 주석! , 미사용 주석은 빠르게 제거~!!
실제로 동작하는 코드는
한줄!!??
직관적으로 이해 가능!!
OnExcuteSpecial()이 무엇을
하는지는 오로지 작성자만...
38. 퇴사 예정자에게 새로운 업무부여는 XXX
이번 개발은 진짜 중요한 건데
퇴사 전에 , 마지막으로
멋지게 마무리 하고 가자.
잘 할 수 있지??
너만 믿는다~
“근데 너는 이 개발이
성공하더라도
그것에 대한 보상은
단 하나도 받을 수 없어
하지만 일은 정말 멋지고 완벽하게
해내야 해
알았지?”
그럼 수고해~
40. 직간접적인 "코드리뷰"!! must have!!
나는 10줄의 코드로 구현 가능하다고 생각한 기능을
다른 프로그래머는 단 2줄의 코드로 구현 가능한 방법을
알고 있을 수도 있다.
41. 직간접적인 "코드리뷰"!! must have!!
직접적인 코드 리뷰
( 결과물에 대해 모두가 토론 )
간접적인 코드 리뷰
( 리드 프로그래머의 검수 )
30 %
70 %
42. 직간접적인 "코드리뷰"!! must have!!
팀원들의 리드 프로그래머에 대한 "신뢰도" UP
Code talks bullshit walks
프로젝트의 코드 퀄리티가 뛰어나다 응답
작업자와 1:1 대화를 통한 코드 리뷰 or
관련 컨텐츠의 샘플 코드 제시
방향을 제시
(리더가 직접 코드를 작성하며 게임 코드의 변화를 자세히 파악하고 있어야 한다.)