고수는 축약 문법을 많이 쓰는 사람이 아니라 데이터의 수명, 실패 경계, 의존 방향을 빠르게 찾는 사람이다.

Python 30. 고수가 Python 코드를 읽는 순서의 핵심 흐름도
그림. 고수는 축약 문법보다 데이터 흐름과 실패 경계를 먼저 읽는다.

읽는 순서

  1. 진입점과 외부 입력을 찾아 검증이 어디서 끝나는지 본다.
  2. 변경 가능한 객체가 어디에서 공유되는지, 기본 인자와 클래스 속성에 숨어 있지 않은지 본다.
  3. 파일·연결·락·작업이 with 또는 구조적 동시성 안에서 닫히는지 본다.
  4. 넓은 예외 처리가 오류를 삼키거나 비밀값을 로그에 남기지 않는지 본다.
  5. import 방향이 순환하지 않고 도메인이 프레임워크에 끌려가지 않는지 본다.

실무의 기준

함수는 입력과 출력을 이름과 타입으로 설명한다. 부수 효과가 있으면 동사에 드러낸다. 테스트는 구현 호출 횟수보다 결과와 불변식을 확인한다. 의존성은 가상환경과 잠금 파일로 재현하고 비밀은 저장소 밖에 둔다.

비동기는 기다림이 많을 때, 프로세스는 CPU 계산이 클 때 선택한다. 성능은 프로파일러가 가리킨 곳만 고친다. 메타클래스와 디스크립터는 라이브러리 경계에서 강력하지만, 평범한 업무 코드는 평범하게 남기는 것이 유지보수에 유리하다.

1편의 한 줄 실행에서 30편의 설계 질문까지 이어지는 기준은 같다. 누가 객체를 소유하고, 언제 실패하며, 그 사실이 코드에 보이는가를 묻는 것이다.