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