소프트웨어 위기 — 모든 것의 출발점
독일 가르미슈에서 열린 NATO 소프트웨어 공학 회의는 서로 다른 프로젝트들이 장기 지연, 예산 초과, 결함이라는 같은 문제를 반복하고 있음을 드러냈다. 원문은 이 시기를 인간이 유일한 창작자이고, 타공카드·명령행·컴파일러 같은 도구는 인간이 쓴 것을 기계 명령으로 옮기는 데 머물던 시대로 그린다.
타공카드에서 CLAUDE.md까지 이어지는 60년은 더 빠른 도구의 연대기가 아니다. 사람이 직접 실행하던 자리에서 한 걸음씩 물러나, 마침내 실행이 일어나는 환경을 설계하는 자리로 이동해 온 과정이다.
원문은 소프트웨어 공학의 주요 전환점을 인간과 도구의 관계라는 한 축 위에 놓는다. 시대마다 “프로그래머가 사라진다”는 불안이 반복되지만, 실제로 사라진 것은 직업이 아니라 사람이 직접 수행해야 했던 일의 범위였다.
독일 가르미슈에서 열린 NATO 소프트웨어 공학 회의는 서로 다른 프로젝트들이 장기 지연, 예산 초과, 결함이라는 같은 문제를 반복하고 있음을 드러냈다. 원문은 이 시기를 인간이 유일한 창작자이고, 타공카드·명령행·컴파일러 같은 도구는 인간이 쓴 것을 기계 명령으로 옮기는 데 머물던 시대로 그린다.
Winston Royce의 논문은 단일 순차 통과 방식의 위험을 지적하고 반복을 권했지만, 이후 산업은 순서도만 기억했다. 원문은 이를 소프트웨어 공학사에서 오래 지속된 오독으로 본다. 중요한 것은 절차 그 자체보다, 절차가 어떤 전제를 품고 있는지 읽어내는 능력이다.
GoF의 《Design Patterns》는 23개 패턴을 통해 코드의 구조를 공통 언어로 만들었다. 원문이 강조하는 변화는 해결책의 개수보다 시선의 이동이다. 사람은 코드를 쓰는 데서 더 나아가, 코드가 어떤 모양이어야 하는가를 체계적으로 논의하기 시작했다.
애자일 선언은 “개인과 상호작용”을 “프로세스와 도구”보다 앞에 두었다. 같은 시기 TDD와 CI는 자동화 도구를 인간의 두 번째 눈으로 끌어들였다. 사람은 단순히 코드를 쓰는 존재에서 코드와 검증 메커니즘을 함께 설계하는 존재로 이동한다.
DevOps Days, Docker, Kubernetes의 등장보다 더 본질적인 전환으로 Terraform·Ansible·Helm이 가져온 선언적 사고를 제시한다. 사람이 서버의 모든 단계를 직접 수행하는 대신, “인스턴스 3개, 메모리 2GB, 이 이미지를 실행”과 같은 기대 상태를 기술하면 시스템이 실행하게 된다.
GitHub Copilot은 사람이 한 줄을 쓰면 AI가 다음 줄을 제안하는 보조자의 형태로 등장한다. 운전대는 여전히 사람에게 있고 AI는 가속을 돕는다. 이 단계의 핵심은 ‘자율성’이 아니라 보조의 밀도가 높아졌다는 데 있다.
Devin 사례를 통해 계획, 작성, 테스트, PR 제출까지의 연속 작업을 AI가 스스로 수행하려는 시도가 본격화된다. 같은 해 Cursor의 급성장은 AI가 IDE의 부가기능이 아니라 개발 환경 자체의 중심으로 이동했음을 보여주는 사례로 배치된다.
Claude Code는 저장소 안으로 들어가 파일을 읽고, 코드를 고치고, 테스트하고, 외부 도구와 상호작용하는 터미널 기반 에이전트로 서술된다. 같은 달 Karpathy가 붙인 ‘vibe coding’은 사람이 세부 코드보다 결과의 감각과 방향을 판단하는 방식의 상징으로 등장한다.
원문은 OpenAI Codex 팀의 실험을 전환점으로 둔다. 3명에서 7명으로 확장된 팀이 5개월 동안 약 100만 줄의 코드와 약 1,500개의 PR을 만들었고, 사람의 직접 수기 코딩은 0줄이었다고 서술한다. 핵심은 숫자 자체가 아니라 엔지니어의 주업무가 코드 작성에서 환경 설계·의도 명확화·피드백 루프 구축으로 이동했다는 점이다.
2장은 기술 이름을 나열하는 데서 멈추지 않는다. 서로 다른 시대를 관통하는 하나의 방향을 끌어낸다. 사람은 실행에서 물러났고, 그 빈자리를 자동화가 채웠다. 그러나 물러남은 퇴각이 아니라 더 높은 층위로의 이동이다.
판단의 위치가 바뀐다. 한 줄의 정답을 고르는 판단에서, 어떤 목표를 세우고 어떤 조건으로 검증할지 정하는 판단으로 이동한다.
TDD와 Terraform의 사례는 사람이 능력이 부족해서 손을 놓은 것이 아니라, 더 높은 층위의 설계가 전체 시스템을 더 안정적으로 만들기 때문에 실행을 시스템에 넘겼다는 원문의 관점을 보여준다.
원문의 12쪽 비교표를 한국어 웹 구조로 다시 배열했다. 이 표의 핵심은 도구의 목록이 아니라 핵심 역량의 이동에 있다.
| 시대 | 사람이 하는 일 | 도구가 하는 일 | 핵심 역량 |
|---|---|---|---|
| 1960s–1990s 수기 코딩 |
모든 코드 행 작성 | 컴파일, 실행 | 프로그래밍 언어 숙련 |
| 2001–2010 애자일 |
코드 작성 + 프로세스 설계 | 자동화 테스트, CI | 프로그래밍 + 협업 + 테스트 설계 |
| 2010–2020 DevOps |
기대 상태 기술 | 자동 배포, 모니터링 | 시스템 사고 + 인프라 설계 |
| 2021–2023 AI 보조 |
코드 작성 + AI 완성물 검수 | 코드 완성, 제안 | 프로그래밍 + Prompt 역량 |
| 2024–2025 AI Agent |
의도 기술 + 결과 리뷰 | 자율 작성 + 테스트 + 반복 | Context 설계 + 리뷰 역량 |
| 2026– Harness 시대 |
환경 설계 + 제약 정의 | 환경 안에서 자율적으로 작업 | 시스템 아키텍처 + Harness 설계 |
한 걸음 물러난다는 것은 일을 버린다는 뜻이 아니다.
더 넓은 관계를 보기 위해 자리를 옮긴다는 뜻이다.
60년 동안 사람은 실행자에서 설계자로 이동해 왔다.
Harness Engineering은 그 오래된 이동의 최신 이름이다.