blog:why_code_regresses
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| blog:why_code_regresses [2026/01/11 14:01] – created hyjeong | blog:why_code_regresses [2026/01/11 14:07] (current) – [회귀는 실력의 문제가 아니라 규모의 문제다] hyjeong | ||
|---|---|---|---|
| Line 11: | Line 11: | ||
| 그리고 대부분의 개발자는 한 번쯤 이른바 // | 그리고 대부분의 개발자는 한 번쯤 이른바 // | ||
| - | --- | + | ---- |
| ===== 코드는 텍스트가 아니라 ‘상태의 합’이다 ===== | ===== 코드는 텍스트가 아니라 ‘상태의 합’이다 ===== | ||
| Line 18: | Line 18: | ||
| 그것은 수많은 **가정, 전제, 상태**가 얽혀 있는 구조물이다. | 그것은 수많은 **가정, 전제, 상태**가 얽혀 있는 구조물이다. | ||
| - | * 이 함수는 이런 값이 들어온다는 가정 | + | |
| - | * 이 플래그는 여기서만 바뀐다는 믿음 | + | * 이 플래그는 여기서만 바뀐다는 믿음 |
| - | * 이 호출은 항상 이 순서로 이루어진다는 암묵적 전제 | + | * 이 호출은 항상 이 순서로 이루어진다는 암묵적 전제 |
| 우리는 보통 **눈앞에 보이는 문제 하나**를 고친다. | 우리는 보통 **눈앞에 보이는 문제 하나**를 고친다. | ||
| Line 28: | Line 28: | ||
| 다른 곳에서 과거의 버그가 다시 살아난다. | 다른 곳에서 과거의 버그가 다시 살아난다. | ||
| - | --- | + | ---- |
| ===== “이제 안 쓰는 코드”는 생각보다 잘 죽지 않는다 ===== | ===== “이제 안 쓰는 코드”는 생각보다 잘 죽지 않는다 ===== | ||
| Line 41: | Line 41: | ||
| 특히 다음과 같은 코드들은 매우 위험하다. | 특히 다음과 같은 코드들은 매우 위험하다. | ||
| - | * 디버그를 위해 남겨둔 분기 | + | |
| - | * 실험하다가 주석 처리한 로직 | + | * 실험하다가 주석 처리한 로직 |
| - | * “혹시 몰라서” 유지한 예외 처리 | + | * “혹시 몰라서” 유지한 예외 처리 |
| 새 기능이 추가되는 순간, | 새 기능이 추가되는 순간, | ||
| 이 유령 같은 코드들이 다시 호출되며 과거를 재현한다. | 이 유령 같은 코드들이 다시 호출되며 과거를 재현한다. | ||
| - | --- | + | ---- |
| ===== 사람의 기억은 Git 로그보다 짧다 ===== | ===== 사람의 기억은 Git 로그보다 짧다 ===== | ||
| Line 59: | Line 59: | ||
| **사람의 기억은 설계 의도를 오래 보존하지 못하기 때문**이다. | **사람의 기억은 설계 의도를 오래 보존하지 못하기 때문**이다. | ||
| - | * 당시 왜 이런 구조를 선택했는지 | + | |
| - | * 어떤 대안을 포기했는지 | + | * 어떤 대안을 포기했는지 |
| - | * 어떤 버그를 피하기 위한 우회였는지 | + | * 어떤 버그를 피하기 위한 우회였는지 |
| 이런 맥락은 코드에 온전히 남아 있지 않다. | 이런 맥락은 코드에 온전히 남아 있지 않다. | ||
| 그래서 우리는 **같은 실수를, 더 세련된 형태로 반복**한다. | 그래서 우리는 **같은 실수를, 더 세련된 형태로 반복**한다. | ||
| - | --- | + | ---- |
| ===== 회귀는 실력의 문제가 아니라 규모의 문제다 ===== | ===== 회귀는 실력의 문제가 아니라 규모의 문제다 ===== | ||
| Line 78: | Line 78: | ||
| **시스템이 커졌다는 신호**에 가깝다. | **시스템이 커졌다는 신호**에 가깝다. | ||
| - | * 기능은 늘었고 | + | |
| - | * 실행 경로는 많아졌으며 | + | * 실행 경로는 많아졌으며 |
| - | * 상호작용은 예측하기 어려워졌다 | + | * 상호작용은 예측하기 어려워졌다 |
| 이 상태에서 과거의 안정성을 그대로 유지하는 것은 | 이 상태에서 과거의 안정성을 그대로 유지하는 것은 | ||
| 개인의 실력이 아니라 **구조와 도구의 문제**다. | 개인의 실력이 아니라 **구조와 도구의 문제**다. | ||
| - | --- | + | ---- |
| ===== 그래서 우리는 기록하고, | ===== 그래서 우리는 기록하고, | ||
| Line 92: | Line 92: | ||
| 하지만 **되돌아가는 비용**은 줄일 수 있다. | 하지만 **되돌아가는 비용**은 줄일 수 있다. | ||
| - | * 무엇을 고쳤는지가 아니라 *왜* 고쳤는지를 남기는 커밋 메시지 | + | |
| - | * “이건 여기까지만 책임진다”는 명확한 경계 | + | * “이건 여기까지만 책임진다”는 명확한 경계 |
| - | * 언제든 이전 상태로 돌아갈 수 있는 구조 | + | * 언제든 이전 상태로 돌아갈 수 있는 구조 |
| 이것들은 단순한 개발 습관이 아니다. | 이것들은 단순한 개발 습관이 아니다. | ||
| **시간과 싸우는 방법**에 가깝다. | **시간과 싸우는 방법**에 가깝다. | ||
| - | --- | + | ---- |
| ===== 맺으며 ===== | ===== 맺으며 ===== | ||
blog/why_code_regresses.1768107665.txt.gz · Last modified: by hyjeong
