"10억 달러짜리 실수"를 만든 사람
프로그래밍을 하다 보면 한 번쯤은 NullPointerException이나 null reference 에러를 만나본 적 있을 거예요. 변수에 값이 없는데 그걸 쓰려고 해서 프로그램이 터지는 그 오류 말이에요. 이 null 참조라는 개념을 만든 사람이 바로 토니 호어(Tony Hoare) 인데요, 본인이 직접 이걸 "10억 달러짜리 실수(billion-dollar mistake)"라고 불렀어요. null 때문에 전 세계에서 발생한 버그, 시스템 장애, 보안 취약점으로 인한 비용이 그 정도는 된다는 뜻이었죠.
ACM(미국 컴퓨팅학회)에서 최근 토니 호어의 컴퓨터 과학에 대한 공헌을 조명하는 글을 발표했어요. 그의 업적을 살펴보면, 우리가 매일 쓰는 프로그래밍 개념들의 뿌리가 한 사람에게서 얼마나 많이 나왔는지 놀라게 돼요.
퀵소트, 세상에서 가장 많이 쓰이는 정렬 알고리즘
호어의 가장 유명한 업적 중 하나가 퀵소트(Quicksort)예요. 1960년에 발표한 이 정렬 알고리즘은 60년이 넘은 지금도 대부분의 프로그래밍 언어 표준 라이브러리에서 기본 정렬 알고리즘으로 쓰이고 있어요. C의 qsort(), Java의 Arrays.sort() 등이 모두 퀵소트 또는 그 변형이에요.
퀵소트가 뭐냐면, 데이터 중에서 기준값(피벗)을 하나 잡고, 그보다 작은 건 왼쪽에, 큰 건 오른쪽에 놓는 걸 반복하는 방식이에요. 마치 도서관에서 책을 정리할 때 "이 책보다 앞에 올 것들은 왼쪽, 뒤에 올 것들은 오른쪽" 하고 나누는 것과 비슷해요. 평균적으로 O(n log n)의 시간 복잡도를 가져서, 대부분의 실제 데이터에서 아주 빠르게 동작하거든요.
호어 논리, "프로그램이 맞다는 걸 수학으로 증명하기"
호어의 또 다른 큰 업적은 호어 논리(Hoare Logic)예요. 이건 프로그램이 의도한 대로 동작한다는 걸 수학적으로 증명하는 방법론이에요. 1969년에 발표한 논문에서 소개된 이 개념은, 프로그램의 각 부분에 대해 "이 코드가 실행되기 전에 이런 조건이 성립하면, 실행된 후에는 이런 조건이 성립한다"는 식으로 논리를 전개해요.
쉽게 설명하면 이런 거예요. "잔고가 1000원 이상이면(사전 조건), 500원을 출금하는 코드를 실행한 뒤에는 잔고가 500원 이상이다(사후 조건)"라는 식으로요. 이걸 {P} C {Q} 라는 형식으로 표현하는데, 이 표기법을 호어 트리플(Hoare Triple)이라고 불러요.
이 아이디어는 오늘날 형식 검증(formal verification) 분야의 토대가 됐어요. 항공기 소프트웨어, 의료 기기, 블록체인 스마트 컨트랙트처럼 버그가 곧 재앙인 영역에서 실제로 사용되고 있거든요.
CSP, 동시성 프로그래밍의 이론적 기반
호어는 CSP(Communicating Sequential Processes)라는 동시성 프로그래밍 모델도 만들었어요. 동시성이 뭐냐면, 여러 작업이 동시에 진행되는 걸 말하는데, 이때 작업들 사이에서 데이터를 어떻게 주고받을지가 가장 까다로운 문제거든요.
CSP는 이 문제를 "채널(channel)을 통한 메시지 전달"로 해결해요. 각 프로세스는 독립적으로 실행되지만, 서로 데이터를 주고받을 때는 정해진 채널을 통해서만 소통하는 거예요. 마치 각자 방에서 일하는 사람들이 서류를 직접 건네는 대신, 정해진 우편함을 통해서만 주고받는 것과 비슷해요.
이 개념이 현대 프로그래밍에 어디서 쓰이냐면, 바로 Go 언어의 고루틴(goroutine)과 채널이 CSP를 직접적으로 구현한 거예요. Go를 써보신 분이라면 ch <- value와 value = <-ch 같은 채널 문법이 익숙하실 텐데, 이게 1978년 호어의 논문에서 나온 아이디어예요.
한국 개발자에게 주는 시사점
호어의 업적을 보면 "기초 이론이 실무에서 얼마나 오래 살아남는가"를 실감하게 돼요. 퀵소트는 60년째 현역이고, CSP는 Go라는 현대 언어의 핵심 설계 철학이 됐고, 호어 논리는 블록체인 스마트 컨트랙트 검증에까지 쓰이고 있거든요.
코딩 테스트를 준비하면서 알고리즘을 공부하는 분들에게는 퀵소트의 동작 원리를 깊이 이해하는 게 도움이 되고, Go를 쓰는 백엔드 개발자에게는 CSP의 배경을 아는 것이 채널 기반 동시성 패턴을 더 잘 활용하는 데 도움이 될 거예요. 그리고 형식 검증에 관심 있는 분이라면, 호어 논리가 그 시작점이에요.
마무리
토니 호어는 하나의 혁신이 아니라, 컴퓨터 과학의 여러 근본적인 기둥을 세운 사람이에요. null 참조라는 실수조차도 "왜 이게 문제인지"를 업계가 깊이 고민하게 만든 계기가 됐죠.
여러분이 가장 자주 마주치는 호어의 유산은 뭔가요? NullPointerException인가요, 아니면 퀵소트인가요?
🔗 출처: Hacker News
TTJ 코딩클래스 정규반
월급 외 수입,
코딩으로 만들 수 있습니다
17가지 수익 모델을 직접 실습하고, 1,300만원 상당의 자동화 도구와 소스코드를 받아가세요.
"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"
실제 수강생 후기- 비전공자도 6개월이면 첫 수익
- 20년 경력 개발자 직강
- 자동화 프로그램 + 소스코드 제공