라이브러리 루틴은 에러가 발생했을 때 그냥 죽어버리면 안 된다. 호출자가 적절한 동작을 취할 수 있도록 에러 상태를 리턴해야 한다. 메시지를 출력하거나 팝업 대화상자를 띄워서도 안 된다. 메시지를 출력하거나 팝업 대화상자를 띄워서도 안 된다. 메시지를 출력하면 다른 것들을 방해하게 되는 환경에서 그 루틴을 실행할 수도 있기 때문이다. (p.128)
에러는 가능한 한 낮은 수준에서 잡아야 하고, 높은 수준에서 처리해야 한다. (p.153)
개인적으로 스택 추적을 하고 한두 개 변수의 값을 보기 위한 목적 이상으로 디버거를 쓰는 일은 별로 없다. 그 이유 중 하나는, 디버거를 쓰면 복잡한 데이터 구조와 제어 흐름의 홍수 속에서 중요한 것을 놓치기 쉽기 때문이다. 프로그램 실행 흐름을 한 단계씩 깊이 들어가 보는 것보다, 열심히 생각한 다음 중요한 위치에 자기검증 코드나 출력문을 추가하는 편이 더 생산적이다. (p.164)
가장 중요한 것은 성능이 정말 중요한지 확인하는 것이다. 만약 스팸 필터가 병목이 아니었다면 이 모든 노력을 쏟을 필요가 없었을 것이다. 일단 우리는 문제를 인지하자마자 프로파일링 등의 기법을 사용해 동작 방식을 분석하고 진짜 문제가 숨어 있는 부분을 알아냈다. 그리고 명백한 용의자였지만 진범은 아니었던 strstr 함수에만 집중한 것이 아니라 전체 프로그램을 검사하면서 진짜 문제를 해결하고 있는 건지 확인했다. 마지막으로, 더 나은 알고리즘을 사용해 정확한 문제를 풀어 냈고, 그 답이 정말 빨라졌는지 검증했다. 일단 충분히 빨라지자, 바로 손을 뗐다. 왜 쓸데없이 일을 만들겠는가? (p.235)