현대 소프트웨어 시스템은 수천만 줄에 달하는 방대한 규모로 성장했습니다. 이처럼 거대한 코드베이스를 한 명의 엔지니어는 물론 팀 전체가 완벽하게 이해하는 것은 사실상 불가능합니다. 따라서 엔지니어는 시스템의 특정 부분을 정확하게 파악하고, 그 지식을 바탕으로 효과적으로 작업하는 능력이 더욱 중요해지고 있습니다.
피터 나우어(Peter Naur)의 '이론 구축으로서의 프로그래밍(Programming as Theory Building)' 논문은 프로그래머의 주된 산출물을 코드가 아닌 '프로그램에 대한 이론', 즉 직관적인 이해로 보았습니다. 팀이 이 이론을 잃으면 프로그램을 새로 만드는 것이 낫다고 주장했지만, 수많은 예외와 사용자가 얽힌 대규모 시스템은 처음부터 재구축하기 어렵습니다. 구글(Google) 웹 검색 백엔드나 깃허브(GitHub) 같은 대규모 시스템에서는 각 엔지니어가 맡은 국소 영역을 최대한 파악하는 방식으로 작업하며, 담당자가 모두 떠난 코드베이스도 하나의 처리 흐름을 끝까지 파악한 뒤 점진적으로 변경 범위를 넓혀가며 되살릴 수 있습니다. LLM(대규모 언어모델)은 이러한 상세한 정신 모델 형성을 방해할 수 있지만, 동시에 부분적인 이해를 빠르게 구축하고 활용하도록 돕는 양면성을 가집니다.
이는 소프트웨어 엔지니어링의 패러다임 변화를 의미합니다. 과거 소규모 프로젝트에서는 완전한 이해가 미덕이었지만, 이제는 속도, 법적 준수, 조직적 요구 등 다양한 가치와 코드 이해를 절충해야 하는 시대가 도래했습니다. 완전한 이해를 추구하는 것이 개인적인 만족감을 줄 수 있지만, 실무에서는 불확실한 상황에서도 최선의 판단을 내리고 결과에 대응하는 능력이 더 중요합니다. LLM과 같은 도구는 이러한 부분적 이해 기반의 작업 방식을 더욱 가속화할 것이며, 엔지니어는 변화하는 환경에 맞춰 유연하게 사고하고 적응해야 할 것입니다.