
사람들은 코딩 유튜버나 강사들이 흔히 자기들이 할 말 다해놓고
'No Silver Bullet' 이라는 관용어구를 쓰는 것을 볼 것이다.
자신의 의견을 모두 피력한 뒤, 'No Silver Bullet'이라는 말을 덧붙여, 그 이후의 반론이나 비판을 원천 차단하려는 태도를 보인다.
이는 곧, '어차피 만능 해결책은 없으니 더 이상 논쟁할 필요도 없고, 내 주장에 대한 책임도 지지 않겠다'라는 식의 책임 회피 전략으로
No Silver Bullet이라는 말을 쓰는 경우도 있는데,
이 말은 어디서 나온 것일까
Frederick P. Brooks, Jr. -튜링상 수상자의 논문에서 나온 말이다.
이 논문에서 말하는 말은 간단하다
'소프트웨어 공학에서 만병통치약(Silver Bullet)은 없다'는 것이다.

그럼 왜 하필 은 탄환인가?
논문에서는 민담(folklore)에서 늑대인간만큼 무서운 것이 없는데, 그 이유를 늑대인간은 익숙한 존재에서 낯선 공포로 변하기 때문에 무섭고
그들을 처치하기 위해선 은 탄환(Sliver Bullet)이 필요하다고 이야기한다.
브룩스는 여기서 소프트웨어 프로젝트도 보통은 무해하지만, 일정이 지연되고 예산이 초과되면 결함품으로 변모할 수 있는 무서운 괴물이 될 수 있다고 한다.
그리고 이 논문에서는 소프트웨어 제작을 쉽게 해줄, 은 탄환이 있을 것인가?에 대해서 이야기하나
브룩스는 단호하게 1986년부터 10년간은 소프트웨어에서 생산성을 10배이상 향상 시킬 발전은 나타나지 않을 것이다라고 말한다.
그리고 소프트 웨어 개발은 본질적으로 저렇게 10배이상 빠른 발전이 불가능하다고 말한다.
2025년 우리는 이 논문을 어떻게 받아들여야할까?

이 논문에서는 소프트웨어 개발 생산성이 10배 이상 늘어나기 힘든 2가지 어려움을 이야기한다.
본질적(Essence) 어려움과 우발적(Accidents) 어려움.
본질적 어려움은 소프트웨어 자체의 특성때문에 발생하는 어려움으로
근본적으로 제거할 수 없는 복잡성으로 4가지를 제시한다.
-복잡성(Complexity): 시스템은 그 자체로 엄청난 복잡성을 내포하고 있고, 수십만줄에 이르는 코드로 이루어진 시스템은 인간의 이해 능력을 넘어서는 복잡성을 지니고, 유지보수를 어렵게 한다. 거기에 기능간의 상호작용, 예외처리, 상태 조합을 생각하면 복잡성은 기하급수적으로 증가한다.
-적합성(Conformity): 소프트웨어는 현실세계의 복잡한 요구사항과 제약 조건에 맞춰 개발되는데, 결국 다양한 외부 환경(하드웨어,운영체제,네트워크 등등)에 '적합'해야하며 이러한 외부 요소들은 상호 의존적이며 변화한다.
-가변성(Changeability):소프트웨어는 하드웨어나 다른 공학 제품에 비해서 수정 및 변경이 용이한데, 역설적으로 이러한 가변성이 어려움을 만든다. 사용자의 요구사항은 끝없이 변화하고, 기술발전에 따라 소프트웨어도 지속적인 변화를 계속해야하기때문이다.
-비가시성(Invisibility): 소프트웨어는 눈에 보이지 않는 추상적인 존재이고, 건축이나 도면처럼 물리적 모델을 통한 직관적 이해가 어렵기때문에 발생하는 문제이다.

본질적 문제의 원인을 가장 잘 설명한 논문의 원문을 가져왔다
소프트웨어의 복잡성은 부수적인 것이 아니라, 본질적인 속성이다.
따라서, 소프트웨어 실체를 설명하면서 복잡성을 제외하는 것은 종종 그 본질마저 제외하는 결과를 낳는다.
지난 3세기 동안, 수학과 물리 과학은 복잡한 현상의 단순화된 모델을 구축하고, 그 모델로부터 속성을 도출하여 실험으로 검증하는 방식으로 큰 발전을 이루었다
이러한 패러다임이 성공할 수 있었던 이유는 모델에서 간과된 복잡성이 현상의 본질적인 속성이 아니었기 때문이다.
복잡성이 본질일 때는 이러한 방식이 통하지 않는다.
---

우발적 어려움은 소프트웨어 개발 과정에서 도구,기술,방법론등의 미비로 발생하는 어려움인데
당시 1986년에서는
이러한 우발적 어려움을 제거할 은총알 후보들을 이야기하는데
1) high-level language
2) OOP 설계 - 복잡한 문제를 작은 객체 단위로 나누고, 객체가 독립적으로 동작하도록 설계
3) 점진적 개발
등 을 제안하면서 이러한 부수적 어려움을 줄일 수 있다 했다.

실제 현재 고소준 언어가 주류를 차지하고, OOP는 코드 스타일의 주류가 됐고, 자동화 도구는 반복 작업을 줄였지만 여전히 창의적 문제 해결은 인간이 해야만 하고,
점진적 개발은 애자일이라는 이름으로 발전해서 돌아왔으나, 기술이 발전했어도 우리에겐 여전히 복잡성이 남아있고 소프트웨어 공학은 여전히 어렵다.
우발적 복잡성은 기술발전으로 해결할 수 있지만, 본질적 복잡성은 여전히 남아있는 것이다.
그렇기에 소프트 웨어 개발은 생산성이 극적으로 향상 될 수 없고, 2025년 이 시점에서도 유효하다라고 볼 수 있겠지만,
사람들은 말할 것이다
AI의 시대에서도 그럴까요?

사실 당시에 브룩스도 은탄환 후보로 AI를 언급하기도 했다.
여기서 브룩스의 논문에서는 당시의 AI에 대한 인식을 볼 수있고, 브룩스는 미래의 은탄환 후보에 AI에 대해서 비판적 태도를 취한다
이 논문에서는 Parnas의정의를 인용하여 AI를 2가지 관점으로 나눈다.
AI-1 (인간 지능 대체): "이전에는 인간 지능을 적용해야만 풀 수 있었던 문제를 컴퓨터를 사용하여 해결하는 것" - 인
간의 인지 능력을 컴퓨터로 구현하려는 시도에 초점을 맞춘 정의
예를 들어, 인간만이 할 수 있다고 여겨졌던 문제 해결, 의사 결정, 학습 능력 등을 컴퓨터가 수행하는 것을 AI-1으로 보는 것
AI-2 (휴리스틱 프로그래밍): "휴리스틱 또는 규칙 기반 프로그래밍으로 알려진 특정 프로그래밍 기술 집합을 사용하는 것" -
전문가의 지식과 경험을 규칙이나 휴리스틱 형태로 코딩하여 문제를 해결하는 방식
여기서는 전문가 시스템이 대표적인 예시이며,
특정 분야의 전문가가 사용하는 문제 해결 전략을 모방하는 것을 목표로 한다.
브룩스는 여기서 2가지 모두에 회의적인 입장을 취한다.
AI-1 -> AI-1의 정의는 너무 주관적적이고 유동적이라고 비판한다.
실제로 2025년 우리가 AGI라고 주장하는 물체의 정의가 학자마다 계속 변하는 것도 그 일례일 것이다.
AI-2 -> 이 시스템이 특정 분야의 전문가를 모방한다고해도 결국 본질적인 복잡성을 다 줄일 수 없다는 것이다.
현재 2025년은 사실 A1과 A2 전부를 아우르는 모델이지만, 여전히 브룩스의 추측은 유효하다.

여전히 AI는 소프트웨어 전부를 만들 수 없고, 일정량의 텍스트를 넘어가면 구조적인 문제를 일으킨다.
현재 대부분의 유명 개발자들이 말했듯,
현재 AI는 개발자의 생산성을 높이는 도구로 사용될 수 있지만, 여전히 인간 개발자를 완전히 대체할 수 없다.
소프트웨어 프로젝트의 성공은 여전히 명확한 요구사항 정의, 아키텍쳐 설계등 인간의 역량에 의존하기때문이다.
아직까지는 AI는 인간의 요구사항을 명확히 완전히 이해하여 원하는 것을 출력할 수가 없다.
그리고 AI 프로그래밍 또한 그 내용물이 블랙 박스로, 완전한 원리의 이해가 아닌 파라미터 조정을 하는 블랙박스적인 특성을 가지고 있어
AI 자체의 출력물에 복잡성을 더해주고 있다.
2025년 현재, AI 기술은 놀라운 발전을 거듭하고 있지만, "No Silver Bullet" 논문은 여전히 유효하다.
AI는 소프트웨어 개발 생산성을 높이는 강력한 도구이지만,
소프트웨어의 본질적인 복잡성을 해결하는 "만병통치약"은 될 수 없다.
"No Silver Bullet" 논문은 우리에게 환상을 버리고 현실을 직시하며,
끊임없는 노력과 점진적인 개선을 통해 소프트웨어 공학의 길을 묵묵히 걸어가라고 가르쳐준다.
2025년, "No Silver Bullet" 메시지는 더욱 다가온다.
2025년
No Silver Bullet.
여전히 유효!
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.