# AI 시대의 프로그래밍 언어

요즘 내가 선호하는 언어는 프론트엔드에서는 React와 TypeScript, 그 외에는 Go, TypeScript, Rust 순이다.

나는 Rust를 정말 좋아하고 많이 써봤다. 그런데 AI와 개발할 때 어떤 언어를 고를지 생각하면, Go를 가장 높게 평가하게 된다. 검증 루프를 빠르게 구성하기에 균형이 가장 잘 맞는 것 같다.

## 이터레이션 루프의 병목

AI는 작업 속도가 엄청나게 빠르다. 그래서 이터레이션 루프의 구성 요소가 조금만 느려도 금방 병목이 된다.

AI로 개발한다고 해서 전체 작업 시간 중 AI가 일하는 시간, 그러니까 GPU가 돌아가는 시간의 비중이 엄청나게 높은 것은 아니다. 빌드를 기다리고, 테스트 실행을 기다려야 한다.

내가 Go를 가장 높게 평가하는 이유가 여기에 있다. Rust보다 빌드가 빠르고, TypeScript보다 테스트 같은 것들의 실행이 빠르다. 빌드 시간이 엄청나게 짧은 것에 비하면 런타임 성능도 괜찮다.

실행 속도가 빠르다는 것은 테스트를 돌리는 시간도 짧다는 뜻이다. Go는 병렬 처리가 잘 되는 언어라 프로젝트가 커질 때 테스트가 느려지는 정도도 TypeScript보다 훨씬 덜하다고 본다.

요즘은 사람이 수행하는 QA가 가장 큰 병목인데, 이것 역시 빌드가 빨라야 한다. PR을 검증할 때 빌드가 느리면 QA까지 느려진다. Rust를 좋아하는 나도 이 부분에서는 빌드 시간이 부담스럽다.

## Rust의 검증은 좋지만, 매번 부담하기에는 무겁다

Rust는 많은 문제를 잡아준다. Go의 `go test -race`와 비교할 수 없을 정도로 검증 범위가 넓다. 글을 쓰려고 생각을 정리하다 보니, Rust가 좋으면서도 지나치다는 느낌이 든다.

내 생각에는 대부분의 프로젝트에서 동시성 관련 테스트는 주기적으로 따로 돌리면 충분하다. 데이터베이스 같은 프로젝트라면 일상적으로 돌리겠지만, 그것도 주기를 짧게 잡는 것이지 매번 돌리는 것은 낭비일 것 같다.

여기서 별도로 돌릴 검사로 생각한 것은 `go test -race` 같은 것들이다. 이것이 Rust의 컴파일 시 검증과 동등하다는 뜻은 아니다. Rust는 훨씬 많은 것을 잡아준다.

다만 그 검증의 가치를 인정하더라도, 매번 빌드할 때마다 비용을 부담하기에는 Rust의 빌드가 너무 느리다. 검증이 필요한 주기와 빌드가 필요한 주기가 꼭 같지는 않다고 본다.

## 좋은 타입 추론에도 비용은 있다

Rust의 타입 추론은 정말 좋은 기능이다. 하지만 사람인 내가 직접 코딩할 때도 타입을 파악하는 데 애먹었다. 올바른 타입을 알기 위해 살펴봐야 하는 파일이 많았다.

rust-analyzer가 잘 작동할 때는 그나마 나았다. 하지만 나는 그것이 없던 시절에도 개발했고, 생긴 뒤에도 항상 제대로 작동하는 것은 아니라 도움 없이 개발하기도 했다.

AI 에이전트는 워낙 빠르니 나보다 타입을 빨리 파악하고, 더 잘할 것이다. 그래도 Go를 두고 굳이 Rust를 고를 이유는 없는 것 같다.

## 언어의 성능을 끌어내는 난이도

Rust가 성능이 엄청나게 좋은 언어인 것은 맞다. 하지만 사람들이 생각하는 것보다 Rust를 제대로 쓰는 것은 훨씬 어렵다.

예를 들어 각 언어에 익숙하지 않은 시니어 개발자가 회사의 요구로 Go, TypeScript, Rust를 사용해 병렬 처리가 아주 많은 프로그램을 만든다고 해보자. 나는 Go로 만든 프로그램이 가장 빠를 것이라고 예상한다.

파일 읽기 같은 시스템 콜을 고성능으로 처리하는 것이 Go에서는 그리 어렵지 않지만, Rust에서는 정말 어렵기 때문이다.

내가 보는 차이는 시스템 콜을 다루는 방식에 있다. Rust는 커널에서도 쓸 수 있게 설계됐고, async Rust도 마찬가지다. 나는 이런 설계가 시스템 콜에 자동으로 훅을 넣는 처리를 어렵게 하는 배경이라고 본다. 반면 Go는 시스템 콜에 대한 처리를 기본으로 제공한다.

엄청난 실력자가 제대로 설계한 것이 아니라면, Go가 제공하는 처리를 직접 설계해서 이기기는 어렵다고 생각한다.

## 불친절한 오류 메시지가 장점이 되다

직접 코딩할 때는 Go가 왜 이런 선택을 했나 싶었던 부분도 AI 시대에는 도움이 된다. 빌드 오류 메시지가 그중 하나다.

Rust나 TypeScript는 터미널에 코드 스니펫까지 보여주면서 어떤 오류가 있는지 친절하게 알려준다. Go는 어느 줄에 어떤 문제가 있는지 알려주고 끝이다. 심지어 오류를 전부 출력하지도 않는다. 직접 코딩할 때는 정말 짜증났다.

그런데 AI 입장에서는 빌드도 빠른데 오류 메시지로 컨텍스트를 많이 쓰지도 않는다. 내가 불친절하다고 느꼈던 출력 방식이 오히려 장점으로 보이기 시작했다.

AI와 개발할 때는 빌드, 테스트, 사람이 수행하는 QA까지 포함한 이터레이션 루프를 얼마나 빠르게 돌릴 수 있는지가 중요하다. 지금 내게는 Go가 그 균형이 가장 잘 맞는 언어다.

* * *

## Update: 선택지는 제한되어 있다

너무 당연한 내용이라서 글 쓸 때 까먹었는데, AI가 잘 작성하는 언어 중에서 골라야 한다. 이 글이 Rust, Golang, TypeScript에 집중되어 있는 이유이다.
