Skip to content

Latest commit

 

History

History
112 lines (106 loc) · 4.35 KB

PracticeProgramming.md

File metadata and controls

112 lines (106 loc) · 4.35 KB

스타일

  • 전역변수에는 서술적인 이름을, 지역변수에는 짧은 이름을 붙인다.
  • 일관성을 지킨다.
  • 함수 이름은 능동형으로 쓴다.
  • 정확한 이름은 쓴다.
  • 들여쓰기로 구조를 알아보기 쉽게 한다.
  • 표현식을 자연스럽게 쓴다.
  • 괄호를 써서 애매함을 해결한다.
  • 복잡한 표현은 잘게 쪼갠다.
  • 명료하게 쓴다.
  • 부수적 효과를 피한다.
  • 들여쓰기와 중괄호는 스타일의 일관성을 지킨다.
  • 일관성을 위해 관용 표현을 사용한다.
  • 다중 결정이 필요할 때는 else-if를 쓴다.
  • 매크로는 쓰지 않는다.
  • 매크로 전체 인자는 괄호로 묶는다. (c)
  • 매직 넘버에 이름을 달아라
  • 숫자는 매크로로 쓰지 말고 상수로 정의하라. (c)
  • 아스키 문자는 문자 상수로 쓴다. (c)
  • 언어에서 제공하는 것으로 객체의 크기를 계산한다.
  • 명확한 코드에는 주석을 달지 않는다.
  • 함수와 전역 데이터에 주석을 단다.
  • 나쁜 코드는 주석을 달지 말고 새로 작성한다.
  • 주석과 코드가 불일치 하면 안된다.
  • 명확하게 작성한다.

인터페이스

  • 구현은 숨긴다.
  • 서로 겹치지 않게 기본 항목을 선택한다.
  • 사용자가 모르는 곳에서 일을 하지 않는다.
  • 어디서나 같은 일은 같은 방식으로 한다.
  • 자원은 반드시 해제한다.
  • 에러는 저수준에서 잡는다.
  • 에러는 고수준에서 처리한다.
  • 예외는 예외 상황에서만 처리한다.

디버깅

  • 자주 나오는 패턴을 찾는다
  • 가장 최근에 변경한 부분을 확인한다.
  • 같은 실수를 반복하지 않는다.
  • 오늘 할 디버깅을 내일로 미루지 않는다.
  • 스택 추적값을 확인한다.
  • 작성하기 전에 읽는다.
  • 코드를 다른 사람에게 설명한다.
  • 버그를 재현할 수 있게 한다.
  • 각개격파한다.
  • 수가 의미하는 바를 연구한다.
  • 결과를 출력해서 범위를 좁힌다.
  • 자가 검증 코드를 작성한다.
  • 로그 파일을 작성한다.
  • 그림을 그린다.
  • 디버거를 사용한다.
  • 기록한다.

테스트

  • 경계에서 테스트한다.
  • 사전 조건을 테스트한다.
  • 사후 조건을 테스트한다.
  • 단정문을 사용한다.
  • 방어적 프로그래밍을 한다.
  • 리턴 값을 검사한다.
  • 점층적으로 테스트한다.
  • 단순한 부분을 먼저 테스트한다.
  • 어떤 결과가 나와야 하는지 확인한다.
  • 보존 속성을 검증한다.
  • 독립적인 구현 버전을 비교한다.
  • 코드 커버리지를 측정한다.
  • 회귀 테스트를 자동화한다.
  • 자급자족형 테스트를 창조한다.

성능

  • 시간 측정을 자동화한다.
  • 프로파일러를 사용한다.
  • 병목에 집중한다.
  • 그림을 그려본다.
  • 더 나은 알고리즘을 사용한다.
  • 더 나은 데이터 구조를 사용한다.
  • 컴파일러 최적화 기능을 사용한다.
  • 코드를 튜닝한다.
  • 중요하지 않은 것은 최적화 하지 않는다.
  • 공통된 부분 표현식을 하나로 모은다.
  • 비싼 연산을 싼 연산으로 바꾼다.
  • 루프를 펼치거나 제거한다.
  • 빈번히 사용되는 값을 캐싱한다.
  • 특수한 메모리 할당 함수를 작성한다.
  • 입력과 출력은 버퍼링한다.
  • 특수한 경우를 따로 처리한다.
  • 결과를 사전 계산한다.
  • 근사값을 사용한다.
  • 저수준 언어로 재작성한다.
  • 최소 데이터 타입을 사용해서 공간을 절약한다.
  • 쉽게 재계산할 수 있는 값을 저장하지 말라.

호환성

  • 표준을 유지한다.
  • 주류를 따라 프로그래밍 한다.
  • 언어의 골치거리 부분을 인식한다.
  • 여러 컴파일러로 시도한다.
  • 표준 라이브러리를 사용한다.
  • 어디서나 쓸 수 있는 기능만 사용한다.
  • 조건 컴파일을 지양한다.
  • 시스템 의존성은 별도 파일에 담는다.
  • 시스템 의존성은 인터페이스 뒤에 숨긴다.
  • 데이터 교환은 텍스트를 사용한다.
  • 데이터를 교환할 때 고정된 바이트 순서를 사용한다.
  • 명세를 바꾸면 이름을 바꿔라.
  • 기존 프로그램 및 데이터와 호환성을 유지한다.
  • ASCII라고 가정하지 마라.
  • 영어라고 가정하지 마라.

참조