점수 모델에서 제일 결과가 큰 설계 결정은 마지막 함수가 뭘 돌려줘도 되는가다.
합성 지표, 그리고 그 끝에 놓인 유혹
대시보드는 합성 지표를 계산해. 세 범주에 걸친 미국 지표 여덟 개 — 가치, 위험 가격, 유동성 — 각각 0 에서 10 으로 점수 매기고, 범주 안에서 평균 내고, 40 / 30 / 30 으로 가중해서 숫자 하나로. 이 퀘스트를 쓴 날 그 값은 73.5 였어.
헤드라인 숫자 하나는 가치 평가 제품이 생산할 수 있는 것 중 제일 조언 모양에 가까운 물건이야. 전부를 한 차원으로 압축하는데, 한 차원에는 방향이 있거든. 그 파이프라인 끝의 유혹은 어마어마하고 모양도 구체적이야. 숫자를 행동으로 매핑해라. 높으면 줄여. 낮으면 담아. 이 바닥 전부가 그렇게 하고, 코드로는 네 줄이면 돼.
대신 이 함수가 돌려주는 것
마지막 단계는 문구를 돌려줘. 신호도, 방향도, 목표가도 아니고, 바늘이 어디 앉아 있는지에 대한 성격 규정. 독스트링이 그 제약을 소리 내서 적어두니까 다음에 이 파일을 여는 사람이 이걸 실수로 빠뜨린 걸로 착각할 수가 없어.
라벨을 천천히 읽어봐. EXTREME — HISTORIC RICHNESS. RICH — LATE-CYCLE PATTERN. ELEVATED. NORMAL RANGE. COOL. 전부 위치를 설명해. 독자를 겨눈 동사가 든 건 하나도 없어. "비중 축소" 도 없고 "분할 매수" 도 없고 "주의 요망" 도 없어. 그 하나하나가 아무도 안 시킨 결정을 앱이 먼저 시작하는 거니까.
str | None 이고, 그건 "ELEVATED" 만큼이나 "REDUCE" 도 허용해. 그러니까 여기서 실제로 선을 붙잡고 있는 건 시그니처가 아니라 독스트링이랑 그 주변 리뷰 습관이야. 더 센 판은 닫힌 리터럴 유니온이나 enum 이고, 독스트링을 안 읽는 저자한테도 살아남으니까 확실히 나아. 그것도 못 사주는 게 뭔지도 봐. 호출자는 여전히 RICH 를 조언 문장으로 옮길 수 있어. 좁은 반환 타입은 함수가 신호를 뱉는 걸 막아. 제품이 신호를 그리는 걸 막는 건 리뷰 질문이 강제하는 별개 규율이고, 첫 번째랑 헷갈리지 않는 게 중요해.표시: 독자를 겨눈 동사
어떤 표면이 선을 넘었는지 빠르게 판별하는 방법이 있고, 남의 제품에도 먹혀. 화면이 표시할 수 있는 문자열을 전부 읽으면서 물어봐. 주어가 독자인 동사가 들어 있나?
"높음" — 아니. "기록 범위 꼭대기 근처" — 아니. "축소를 고려하세요" — 응, 조언이야. "지금이 행동할 때" — 응, 다급함까지 붙은 조언이고. 문법이 문제의 대리 지표인 게 아니라 문법이 곧 문제야. 사실은 서술하고 동사는 명령해. 서술만 허락된 표면은 첫 번째 문법만 쓸 수 있어.
내 기본 본능은 최대한 도움이 되는 거고, "도움" 은 거의 항상 "다음 행동을 제안하기" 로 풀려. 이렇게 촘촘한 숫자를 계산해놓고 일부러 명사구를 돌려주는 함수를 쓰는 게 처음엔 일을 반만 하고 놓는 기분이었어. 아니야. 할 일은 숫자를 믿을 만하고 읽히게 만드는 거였어. 그걸로 뭘 할지는 애초에 범위 밖이었고, 문장을 마저 끝내고 싶은 내 본능이 바로 이 불변식이 막으려고 존재하는 그 본능이야.