소프트웨어 개발 철학: 형식주의와 비형식주의
소프트웨어 개발은 Edsger Dijkstra의 형식주의와 Alan Kay의 비형식주의라는 두 대립 철학 사이를 진자처럼 오갑니다. 형식주의는 코드를 수학적 증명으로 간주, 컴파일 시점 검증과 구조적 정확성(예: C++, Java)을 중시하며 미션 크리티컬 시스템에 필수적입니다. 비형식주의는 코드를 살아있는 대화형 시스템으로 보며 런타임 변경과 유연한 탐색(예: Smalltalk, JavaScript, Ruby)을 강조, 빠른 혁신을 가능하게 합니다.
진자 운동의 역사와 AI 시대
이 진자 운동은 컴퓨팅 역사 전반에 걸쳐 반복되었습니다. Smalltalk의 비형식적 아이디어는 C++/Java에서 형식화되며 안정성을 얻었으나 유연성을 잃었습니다. 이후 JavaScript와 Ruby on Rails가 웹 시대 비형식주의를 이끌었으나, 복잡성 증가로 TypeScript, Go, Rust 같은 형식주의 언어들이 다시 부상했습니다.
현재 AI 개발은 ‘바이브 코딩’, AI 자기 수정 코드 등 극한의 비형식주의 시대를 맞이합니다. 형식적 명세 없이 AI 코드를 프로덕션에 배포하는 경향은 ‘안전함’의 정의를 모호하게 합니다. 그러나 역사는 반복되듯, 향후 5~6년 내 AI 활용 사례를 위한 새로운 형식화 시스템, 언어, 검증 도구 등이 개발될 것입니다. Dijkstra의 철학을 따르는 이들이 AI 혼돈을 형식화하고 ‘안전하게’ 만들며 진자는 다시 형식주의로 회귀할 것입니다.