'프로그래밍의 모든 것' 이라는 책에서 제시하는 프로그래밍 시에 명심해야할 지침들을 정리했다.
스타일(Style)
- 전역 변수에 대해서는 설명적인 이름을 사용하고, 지역 변수에 대해서는 짧은 이름을 사용하라.
- 코드의 일관성을 유지하라.
- 함수에 대해서는 활동적인(active) 이름을 사용하라.
- 정확성을 유지하라.
- 프로그램의 구조를 보이기 위하여 들여 쓰기를 하라.
- 표현식에 대하여 자연스러운 형태를 사용하라.
- 모호성을 제거하기 위하여 괄호를 사용하라.
- 복합적인 표현식을 간단한 표현식으로 나누어라.
- 부효과(side effect)에 주의하라.
- 일관성있게 들여 쓰기와 중괄호를 사용하라.
- 일관성을 위하여 관용적 표현을 사용하라.
- 다중 선택에 대해서는 else-if 문을 사용하라.
- 함수 매크로를 사용하지 마라.
- 매크로의 바디와 인자에 대해서 괄호를 사용하라.
- 매직 수(magic number)에 대하여 이름을 붙여라.
- 정수 값을 사용하지 말고 문자 상수를 사용하여라.
- 객체의 크기를 계산하기 위하여 언어를 사용하라.
- 분명한 것은 오래 논하지 말아라.
- 함수와 전역 데이터에 대하여 주석을 붙여라.
- 나쁜 코드에 대하여 주석을 달지말고 다시 작성하라.
- 코드를 부정하지 말아라.
- 혼란스럽게 하지 말고 분명하게 하라.
인터페이스(Interface)
- 구현의 세부사항을 숨겨라.
- 최소한의 기능을 제공하고 기능의 중복을 피하라.
- 구현의 상세함을 들여다보지 말라.
- 언제나 같은 곳에서 같은 방법으로 같은 일을 수행하라.
- 자원을 할당하였던 같은 수준에서 자원을 해제하여라.
- 낮은 레벨에서가 아니라 높은 레벨에서 에러를 처리하여라.
- 단지 예외적인 상황에서만 예외를 사용하여라.
디버깅
- 익숙한 패턴을 찾아라.
- 가장 최근에 수정한 부분을 조사하여라.
- 같은 실수를 반복하지 말아라.
- 디버깅을 다음으로 미루지 말고 지금하라.
- 스택 추적을 이용하여라.
- 타이핑 전에 코드를 읽어라.
- 타인에게 자신의 코드를 설명하여라.
- 재생 가능하도록 버그를 만들어라.
- 분할 정복(divide and conquer)의 방법을 사용하라.
- 실패하는 횟수의 수비학(numerology) 에 대하여 살펴보라.
- 검색 범위를 줄일 수 있는 출력 값을 표시하라.
- 스스로 검사하는 코드를 작성하라.
- 로그 파일을 작성하라.
- 그림을 그려라.
- 툴을 사용하여라.
- 기록을 유지하라.
테스팅
- 경계 상에서 코드를 테스트하라.
- 수행 이전과 이후의 조건을 테스트하라.
- 어서션(assertion)들을 사용하라.
- 방어적으로 프로그래밍하라.
- 반환되는 에러값을 검사하라.
- 점층적으로 테스트하라.
- 우선적으로 간단한 부분을 테스트하라.
- 예상되는 결과를 파악하라.
- 보전되는 속성들을 검증하라.
- 독립적인 구현들을 비교하라.
- 테스트 범위를 측정하라.
- 변형 검사를 자동화하라.
- 자체적으로 실행이 가능한 테스트들을 작성하라.
성능
- 시간 측정을 자동화하라.
- 프로파일러를 사용하라.
- 핫스팟(hot spot)에 집중하라.
- 그림을 그려라.
- 더 우수한 자료 구조와 알고리즘을 사용하라.
- 컴파일러의 최적화 기능을 이용하라.
- 코드를 조정하라.
- 문제가 되지 않는 것을 최적화하지 말아라.
- 공통의 부표현식(subexpression)을 모아라.
- 성능면에서 비싼 연산을 같은 기능의 값싼 연산으로 교체하라.
- 루프를 풀거나 제거하라.
- 자주 사용되는 값들을 캐시에 저장하라.
- 특별한 경우는 분리하여 처리하라.
- 결과 값들을 미리 계산하라.
- 근사 값들을 사용하라.
- 저급 언어로 다시 작성하라.
- 가능한 작은 크기의 데이터 타입을 사용함으로써 공간을 줄여라.
- 쉽게 다시 계산 가능한 것은 저장하지 마라.
이식성(Portability)
- 표준을 준수하라.
- 메인스트림 상에서 프로그램하라.
- 프로그래밍 언어의 문제 지점을 주의하라.
- 표준 라이브러리를 사용하라.
- 어디에서나 사용 가능한 특징들만을 사용하라.
- 조건 컴파일을 사용하지 마라.
- 시스템 의존적인 것들을 독립적인 파일에 담도록 하라.
- 시스템 의존적인 것들을 인터페이스의 뒤에 숨기도록 하라.
- 데이터 교환을 위하여 텍스트를 사용하여라.
- 데이터 교환을 위하여 고정된 바이트 순서를 사용하여라.
- 스펙(specification)을 변경하는 경우 명세의 이름을 변경하라.
- 존재하는 프로그램과 데이터와의 호환성을 유지하라.
- ASCII 문자를 당연하게 받아들이지 마라.
- 모두 같은 언어를 사용하는 것이 아님을 잊지 말아라.