발표자는 코드 읽기의 두 가지 모드를 구체적인 사례를 들어 설명합니다. ‘미리 읽기’는 특정 목적 없이 관심사를 따라 젬이나 저장소를 탐색하며 새로운 지식을 습득하고 미래의 코드 작성 및 ‘즉시 읽기’ 상황에 대비하는 데 활용됩니다. 발표자는 2013년 Google Summer of Code에서 Rails 전체 코드를 읽으려 했던 경험을 통해, 모든 것을 100% 이해하려 하기보다 읽을 수 있는 부분부터 시작하고 필요에 따라 다시 돌아오는 유연한 접근 방식의 중요성을 역설합니다. 이러한 경험을 바탕으로, 그는 세 가지 핵심 읽기 원칙을 제시합니다. 첫째, ‘그냥 클릭하기(Just click things)’는 호기심을 가지고 파일과 메서드를 자유롭게 탐색하며 새로운 것을 발견하는 데 중점을 둡니다. 둘째, ‘중립 유지(Remain neutral)’는 복잡하거나 이해하기 어려운 코드를 만났을 때 자신을 비난하거나 위축되지 않고, 새로운 음악을 듣는 것처럼 열린 마음으로 접근하는 태도를 의미합니다. 코드 이해는 단순히 지능의 문제가 아니라 맥락과 경험의 축적임을 강조합니다. 셋째, ‘계속 돌아오기(Keep coming back)’는 코드 읽기를 일회성 작업이 아닌 꾸준한 연습으로 간주하며, 앞선 두 원칙이 읽는 과정을 즐겁고 부담 없이 만들어 지속적인 참여를 유도합니다. 이러한 꾸준한 연습을 통해 개발자는 새로운 코드를 더 빠르게 파싱하고, 패턴을 파악하며, 자신만의 효율적인 읽기 방식을 체득할 수 있습니다.
‘미리 읽기’의 성공적인 사례로 Ruby의 기본 테스트 프레임워크인 MiniTest 소스 코드 분석 경험을 공유합니다. MiniTest의 리포터(Reporter) 클래스가 테스트 결과를 출력하는 방식(점, F, S 등)을 분석하던 중, SummaryReporter
와 StatisticsReporter
가 동일한 record
메서드에 반응하는 것을 발견합니다. 이는 CompositeReporter
가 내부적으로 배열을 순회하며 각 리포터의 record
메서드를 호출하는 방식으로 구현되어 있음을 통해, 컴퓨터 과학의 핵심 개념인 ‘다형성(Polymorphism)’을 실제 코드에서 재발견한 경험으로 이어집니다. 이는 대학 교육 없이도 오픈 소스 코드 읽기를 통해 중요한 개념을 체득할 수 있음을 보여주는 강력한 증거입니다.
‘즉시 읽기’의 사례로는 최근 audited
젬과 Action Text를 사용하는 애플리케이션의 디버깅 경험을 소개합니다. audited
젬이 클래스 변경 사항을 추적하고, Action Text가 내용을 별도의 ActionText::RichText
레코드에 저장하는 구조를 설명하며, audited
가 Action Text 내용을 YAML로 직렬화하려 할 때 발생하는 disallowed class
오류를 해결하는 과정을 상세히 보여줍니다. 발표자는 bundle open
명령어를 사용하여 젬 소스 코드를 열고, 핵심 키워드를 검색하며 관련 코드를 찾아나가는 ‘즉시 읽기’ 방식을 시연합니다. 이 과정에서 이전에 ‘미리 읽기’를 통해 YAML
모듈이 Psych
의 별칭이며 load
및 dump
메서드를 사용한다는 것을 파악해둔 지식이 디버깅에 결정적인 도움이 되었음을 강조합니다. ActionText::Content
가 HTML 형식으로 직렬화된다는 것을 발견함으로써, audited
가 이를 YAML로 저장하려 할 때 문제가 발생함을 정확히 파악하게 됩니다. 이처럼 ‘미리 읽기’와 ‘즉시 읽기’를 결합하는 방식은 복잡한 문제를 빠르고 효율적으로 해결하는 데 매우 효과적임을 입증합니다.