https://cekrem.github.io/posts/programming-as-theory-building-naur/
1985년, 컴퓨터 과학자 피터 나우르(Peter Naur)는 “프로그래밍은 이론 구축이다”라는 선견지명이 담긴 에세이를 썼다. 이 글은 오늘날 더욱 빛을 발하고 있다. 주니어 개발자들이 이해하지도 못하는 LLM 생성 코드를 무비판적으로 받아들이고, 이론적으로 고립된 구현체로 코드베이스가 부풀어 오르는 모습을 보면 나우르의 핵심 주장이 명확히 다가온다: 프로그램은 소스 코드 그 자체가 아니다.
나우르는 프로그래밍의 핵심이 공유된 멘탈 모델을 구축하는 데 있다고 주장한다. 이 모델은 시스템이 어떻게 작동하는지, 왜 그런 방식으로 작동하는지, 그리고 어떻게 진화해야 하는지에 대한 이해를 바탕으로 한다. 소스 코드는 단지 이 이론을 기록한 표현일 뿐이며, 모든 기록이 그러하듯 정보의 손실이 발생하기 마련이다. 의도, 설계 결정, 트레이드오프, 아키텍처 선택 배경과 같은 핵심 지식은 시스템을 구축한 사람들의 머릿속에만 존재한다.
그들이 떠나면 이 이론도 함께 사라진다. 코드는 남아 있지만, *프로그램*—그 안의 맥락과 논리를 지닌 살아 숨쉬는 시스템—은 사라져 버린다.
현재 개발 환경은 제가 “이론 없는 코드”라고 부르는 현상이 발생하기에 완벽한 조건을 갖추고 있다:
반사적인 AI 사용이 일상화되었다. 개발자들은 이해를 쌓는 데 필요한 고민 과정 없이, 무의식적으로 LLM이 생성한 해결책에 의존한다. 이전에 글에서 언급했듯, 이런 “반사적 AI 사용”은 우리에게서 성장 기회를 빼앗는다. 문제에 막혀서 잠시 물러났다가 고민하고, 결국 깨달음을 얻으며 더 나은 엔지니어로 성장하는 그 순간들을 말이다.
도메인 무지 코드 생성은 더 극단적인 사례다. LLM이 생성한 코드는 단순히 이론이 없는 수준을 넘어 누구의 이론도 아닌 상태다. 이 코드는 비즈니스 도메인, 시스템의 개념적 모델, 도메인 전문가들이 아키텍처에 담아낸 미묘한 균형 같은 것들을 이해하지 못한 채 통계적 패턴에서 생성된다. 테스트는 통과할지 모르지만, 이론적·도메인적 진공 상태에 존재하는 셈이다. 근처 책상에 앉은 동료를 가리키는 git blame
기록도 없으니, 코드의 작동 방식과 더 중요한 왜 그렇게 작성되었는지를 파악하기가 훨씬 어려워진다.
통합 문제: 개발자들이 깊이 이해하지 않은 채 AI 생성 코드를 받아들이면, 단순히 문법을 복사-붙여넣기하는 수준을 넘어 시스템에 외부의 아키텍처 결정사항까지 들여오게 된다(이건 코드가 1) 작동하고 2) 위험하지 않은 최선의 시나리오일 때 이야기다!). 이런 결정사항들은 도메인 모델과 모순되거나, 기존 패턴을 위반하거나, 시스템이 과부하 상태가 될 때까지 표면화되지 않는 미묘한 불일치를 초래할 수 있다.
결과는? 처음에는 작동하지만 점점 더 비일관적으로 변하는 코드베이스다. 도메인 언어를 더 이상 반영하지 않는 시스템. 시스템의 무결성을 유지하던 이론적 기반을 아무도 이해하지 못해 점점 더 늘어나는 기술 부채.
이 위기가 새롭지는 않다. 예전 회사에서 심볼릭 링크 문제를 해결하겠다며 스택오버플로우의 조언을 따라 프로덕션 서버에 rm -rf /
를 실행한 그 불쌍한 신입 개발자를 기억한다.
하지만 규모가 완전히 달라졌다! 개발자 인구는 약 5년마다 두 배로 늘어나, 언제든 전체 개발자의 절반이 5년 미만의 경력을 가진다(요즘 유행하는 ‘일단 해보자’ 식 코더까지 포함하면 숫자는 더 무섭다!). 이제 이런 경험 부족 개발자들에게 순식간에 전체 함수를 생성해주는 AI 도구까지 주어졌으니 완벽한 폭풍이 된 셈이다: 역대 최다의 초보 개발자들이 역대 최강의 복사-붙여넣기 도구를 사용하며 역대 최저의 이해도로 작업하고 있다.
스택오버플로우에서 길을 잃었던 그 신입 개발자라도 최소한 검색하고, 읽고, 손으로 치는 과정은 거쳤다. 오늘날 개발자는 키 하나 누르는 것으로 AI 생성 함수를 받아들이며, 검토조차 하지 않은 아키텍처 결정사항(위험한 코드는 말할 것도 없다)을 그대로 도입한다.
이제 왜 경험 많은 개발자가 더욱 중요해졌는지 살펴보자:
도메인 이론 구축자: 시니어 개발자는 단순히 코드를 작성하는 것을 넘어, 비즈니스 도메인과 소프트웨어 아키텍처를 연결하는 이론적 틀을 구축하고 유지한다. 코드가 *무엇*을 하는지뿐만 아니라 왜 존재하는지, 어떻게 비즈니스 도메인을 모델링하는지, 이해가 깊어질수록 어떻게 진화해야 하는지도 안다. 코드가 도메인 전문가의 언어를 구사하도록 만드는 이들이 바로 그들이다.
아키텍처 이론 수호자: 주니어 개발자나 LLM이 코드를 생산할 때, 시니어 개발자는 원시적인 구현과 일관성 있는 시스템 설계 사이의 결정적 가교 역할을 한다. 새로운 코드가 시스템의 이론적 기반과 기술적으로뿐만 아니라 개념적으로도 일치하는지 평가할 수 있다. 단순히 동작하는 코드와 시스템에 어울리는 코드의 차이를 이해한다.
의도적인 AI 협력자: 시니어 개발자는 AI와 ‘반사적인 사용’이 아닌 ‘의도적인 협력’을 실천한다. 통합하는 모든 것을 이해하고 AI의 가정에 도전하며, 생성된 코드가 시스템의 이론적 일관성을 훼손하지 않고 유지하도록 한다. AI를 사용한다면 지루한 부분에 활용하되, 인간의 판단이 필요한 요소는 직접 처리한다. 예를 들어 서비스나 프로퍼티마다 동일한 공장 클래스를 수작업으로 만들어야 하는 상황에서 Claude Code 같은 도구를 활용하는 건 합리적이다.
이론 교사이자 기술 멘토: 가장 중요한 점은 시니어 개발자가 이론과 기술을 다른 이들에게 전수한다는 것이다. 주니어 개발자에게 구문이나 패턴뿐만 아니라 흩어진 코드를 일관성 있는 프로그램으로 바꾸는 깊은 이해를 가르친다. 문제와 씨름하는 기술, 인지적 고민의 가치, 구현 전에 이해하는 훈련을 전달한다.
나우르의 에세이는 프로그래밍이 근본적으로 인간의 지적 활동임을 상기시켜준다. 프로그래밍의 진정한 결과물은 코드 자체가 아니라 시스템에 일관성을 부여하는 이론과 이해, 멘탈 모델이다. LLM이 문법적으로 정확한 코드를 생성할 수는 있지만, 이론 구축에 참여할 수는 없다. 비즈니스 맥락을 이해하거나 신중한 트레이드오프를 하거나, 단순히 동작하는 코드와 좋은 소프트웨어를 구분하는 개념적 일관성을 유지할 수 없다.
좋은 문서와 아키텍처 결정 기록, 깔끔하고 읽기 쉬운 코드가 도움이 되지만, 코드베이스 내부든 외부든 모든 글로 작성된 내용은 결국 우리 프로그램이 무엇인지, 무엇을 하는지, 어떤 의미를 갖는지 완전히 담아내지 못한다.
가장 성공적인 팀은 바로 이 근본적인 차이를 인식할 것이다. LLM은 진정으로 기계적인 작업(보일러플레이트 생성, 기본적인 테스트 작성, 비슷한 구조의 팩토리 클래스 다수 생성 등)에 유용할 수 있지만, 비즈니스 요구사항을 일관된 소프트웨어 모델로 변환하는 이론 구축이라는 프로그래밍의 핵심 작업은 반드시 인간의 영역으로 남아야 한다.
소프트웨어 품질을 진지하게 고려하는 조직은 반드시 이론 보존에 투자해야 한다:
피터 나우어는 1985년에 우리가 지금 다시 깨닫고 있는 중요한 사실을 이해했다. 프로그램은 인간이 만든 산물이며, 제대로 작동하려면 인간의 이해가 필요하다는 점이다. 코드 생성이 넘쳐나는 이 시대에, 코드에 의미를 부여하는 이론을 구축하고 유지하며 전달할 수 있는 개발자야말로 가장 귀중한 자산이 된다.
이는 AI를 거부하거나 구시대적인 관행을 고수하자는 이야기가 아니다. 핵심은 도메인 이해, 아키텍처의 일관성, 단순히 작동만 하는 게 아니라 논리적으로 체계적인 시스템을 구축하는 기술과 같은 인간의 본질적인 요소를 보존하자는 것이다. 문제를 깊이 고민하고, 구현 전에 충분히 이해하며, 소프트웨어 시스템을 진정으로 유지보수 가능하게 만드는 풍부한 멘탈 모델을 코드에 반영하는 능력을 유지하는 것이 중요하다.
핵심 질문은 LLM이 코드를 작성할 수 있는지 여부가 아니다. 당연히 작성할 수 있다. 진짜 질문은 우리가 흩어진 코드를 일관적이고 도메인을 이해하며 오래 지속되는 프로그램으로 변환하는 인간의 이론적 틀을 유지할 수 있는지다.
무분별한 AI 사용을 조장하는 세상에서, 프로그래밍의 기술을 보존하면서 AI와 의도적인 협업(존재한다면!)을 실천하는 시니어 개발자야말로 소프트웨어 품질의 수호자가 된다. 그들은 우리의 시스템이 인간이 이해할 수 있고, 해당 도메인에 충실하며, 견고한 이론적 기반 위에 구축되도록 보장하는 사람들이다.
이 ‘널 스택 바이브’ 열풍이 가라앉은 후, 사람들은 다시 한번 진정한 시니어 개발자를 찾게 될 것이다.