프겔의 영원한 명저 - "유지보수가 어렵게 코딩하는 방법" 에 따르면 


지나치게 친절한 주석과 높은 가독성을 지닌 프로그래머는 쉽게 짤린다는 말이다 ㅋ


몇가지 팁을 소개하고자 한다.


태아 작명법의 새로운 용도

태아 작명법 서적을 구입하자. 그러면 변수명을 뭐로 지어야 할지에 대한 고민을 덜 수 있을 것이다. Fred는 멋진 이름이며 

입력하기도 쉽다. 입력이 쉬운 변수명을 원한다면 asdf를 사용해 보기 바란다.


단일 문자 변수명

변수명을 a, b, c 등으로 정한다면 간단한 텍스트 편집기로 해당 인스턴스를 검색하는데 애를 먹게 된다. 뿐만 아니라 그 변

수가 무엇에 쓰이는 것인지 추측할 수 없게 방지하는 역할도 한다. 포트란(FØRTRAN)에서는 오랫동안 I, j, k를 인덱스 변

수로 사용해왔다. 혹시라도 이러한 훌륭한 전통을 조금이라도 깨뜨리려는(예를 들어, ii, jj, kk 등으로 이름을 변경하려는) 

사람이 있는가? 스페인 종교재판에서 이교도에게 어떠한 형벌을 가했는지를 그에게 경고하자.


창의적 오타

어쩔 수 없이 뭔가를 설명하는 변수명이나 함수명을 사용해야 하는 상황이라면 오타라는 무기를 선택하자. 몇몇 함수명과 

변수명에 오타를 내고 다른 곳에서는 오타를 사용하지 않는다면(예를 들어, SetPintleOpening과 SetPintalClosing처럼) 

grep이나 IDE 검색 기술을 효과적으로 무력화할 수 있다. 이 방법은 생각보다 놀라운 효과를 발휘한다. 각기 다른 theatres/

theaters(둘 다 극장을 의미)에 tory나 tori같이 국제적인 취향도 추가해본다.


밑줄(underscore)은 진정한 친구다

_와 __를 식별자로 사용하자.


확장 아스키(Extended ASCII)

ß, Ð, n 등과 같은 확장 아스키 문자도 변수명에 사용할 수 있다는 사실을 잊지말자. 간단한 편집기에서는 복사/붙여넣기 

말고는 확장 아스키 문자를 입력할 수 있는 방법이 없다.


정말 멋진 이름

의미상으로 전혀 관계없는 이름을 변수명으로 사용해보라.

marypoppins = (superman + starship) / god; 

이 글을 읽는 사람은 자신도 모르게 단어의 뜻에 더 집중하게 되고, 실제 로직은 이해하기가 어려워진다.


쉽게 찾지 못하게 숨겨라

16진수 값 $0204FB를 할당할 상수 변수명으로 blue 대신 LancelotsFavouriteColour와 같은 이름을 사용하라. 화면에는 

완전한 파랑색이 나타나겠지만, 유지보수 프로그래머는 0204FB값을 판독(아마 그래픽 도구를 이용해서)해야 의미를 파악

할 수 있을 것이다. 몬티 파이썬의 성배(Monty Python and the Holy Grail)라는 1975년 영국 영화를 좋아하는 광팬이라

면 랜슬롯(Lancelot)이 좋아하는 색이 파랑색이라는 사실쯤은 금방 알아차릴 수도 있을 것이다. 몬티 파이썬의 성배 영화 

전체 내용을 기억하지 못하는 유지보수 프로그래머가 있다면 프로그래머로써 자질이 없는 분이라고 생각할 수 밖에 없다.



주석으로 위장한 코드와 코드로 위장한 주석

실제로는 주석처리 되었지만 얼핏 보면 주석처리 되지 않은 것처럼 보이게 할 수 있다.

for(j=0; j<array_len; j+ =8) 

    { 

    total += array[j+0 ]; 

    total += array[j+1 ]; 

    total += array[j+2 ]; /* 속도 향상을 위해 

    total += array[j+3]; * 루프의 코드를 길게

    total += array[j+4]; * 펼쳐 놓았다. 

    total += array[j+5]; */ 

    total += array[j+6 ]; 

    total += array[j+7 ]; 

    } 


네임스페이스

C는 Struct/union와 typedef struct/union의 네임스페이스를 구별한다(그러나 C++에서는 구별하지 않는다). 구조체든 유

니언 네임스페이스든 같은 이름을 사용하자. 가능하다면 둘이 서로 호환되게 하자.

typedef struct { 

char* pTr; 

size_t lEn; 

} snafu; 

struct snafu { 

unsigned cNt 

char* pTr; 

size_t lEn; 

} A; 


매크로 정의를 숨겨라

자질구레한 주석을 이용해 매크로 정의를 숨길 수 있다. 보통 프로그래머라면 지루한 주석을 끝까지 읽지 않으므로 절대 매

크로를 찾을 수 없다. 매크로를 만들 때는 다음과 같이 특이한 동작을 써서 평범한 할당문처럼 보이게 만들어야 한다.

#define a=b a=0-b




너무 긴거 같아 이정도만 알려주겠다