소프트웨어 엔지니어로서 우리는 압도적으로 코드를 작성하는 능력에 초점을 맞춘다. 이는 새 프로그래머를 가르치는 방식, 채용을 위한 면접 방식, 엔지니어가 역량을 연마하도록 독려하는 방식, 그리고 컨퍼런스에서 흔히 볼 수 있는 발표 주제만 봐도 분명하다. 하지만 코드를 읽는 능력을 하나의 기술로 개발하는 데 대한 강조가 부족한 것은 사람들에게 도움이 되지 않는다. 코드 읽기는 별개의 기술이며, 현업 소프트웨어 엔지니어라면 이 기술을 향상시키기 위해 노력해야 한다.
코드 읽기는 소프트웨어 엔지니어의 다양한 업무에서 등장한다:
- 코드 리뷰: 업무의 일부로 코드를 읽어야 한다는 점이 가장 명시적으로 드러나는 형태일 것이다.
- 디버깅: 디버깅은 시스템이 어떻게 동작할 것이라는 기대와, 실제로 어떻게 동작하는지 사이의 차이(델타)를 식별하는 과정이다. 코드를 더 잘 읽을수록 시스템이 무엇을 하는지 이해하는 데 걸리는 시간을 극적으로 줄일 수 있다.
- 보안 리뷰: 모든 엔지니어의 책임은 아닐 수 있지만, 코드가 작성 당시의 의도와 일치하는지 그리고 취약점이 없는지 확인하는 일은 코드를 잘 읽는 능력에 달려 있다.
- 코드 작성: 코드를 쓰는 일 자체도 코드를 잘 읽으면 더 쉬워진다. 의존하고 있는 서드파티 라이브러리의 문서화되지 않은 동작을 찾아내는 일이든, 내부 API들을 어떻게 조합해야 할지 이해하려는 일이든, 코드를 더 잘 읽을수록 코드를 쓰는 일이 더 쉬워진다.
코드를 잘 읽는 능력이 중요함에도 불구하고, 우리 업계는 이를 가치 있게 여기기 위해 충분히 노력하지 않는다. 다행히도, 자신의 코드 읽기 능력을 향상시키기 위해 할 수 있는 일은 많다:
- 문서를 그만 읽어라. 평소라면 서드파티 라이브러리의 문서를 보러 갔을 상황에서, 대신 소스 코드를 읽어라. 이를 잘 해내면 낯선 코드베이스를 빠르게 읽는 연습을 작업 흐름 속에서 꾸준히 하게 된다.
- 도구를 완전히 익혀라. 나는 rg나 livegrep 같은 도구에 익숙해지기를 강력히 권한다. 이런 도구들은 코드를 더 빠르게 읽는 데 대단히 유용할 수 있다.
- 쓰기 전에 읽어라. 새로운 프로그래밍 언어를 배울 때(사실 어떤 주요 도구/프레임워크도 마찬가지지만, 특히 언어는) 첫 프로그램을 작성하기 전에 그 언어로 된 의미 있는 양의 코드를 먼저 읽어라. 컴파일러/인터프리터에 의존해 시행착오로 이해하는 대신, 동작을 분석적으로 이해하도록 스스로를 강제하면 코드 읽기 능력이 극적으로 향상될 것이다.
코드를 읽는 일은 소프트웨어 엔지니어 업무의 중요한 부분이지만, 너무나도 많은 사람들이 코드를 쓰는 실력을 늘리는 것만큼은 이를 개선하려고 노력하지 않는다. 이 글이 코드 읽기 연습이 시간을 투자할 만한 가치가 있다는 점을 설득했기를 바라며, 그렇게 하는 데 도움이 될 만한 몇 가지 도구를 제공했기를 바란다.