AI 시대에는 모두가 개발자인 이유

직접 코드를 쓰는 시대는 끝났다

과거 어셈블리 개발자가 컴파일러 등장 이후 느꼈던 변화가 지금 재현되고 있다. 숙련된 개발자는 깔끔하고 구조화된 어셈블리 코드를 직접 작성할 수 있었다. 초기 컴파일러는 다소 비효율적이었지만, 이후 컴파일러는 빠르게 발전하며 사람이 작성한 코드보다 더 최적화된 결과물을 지속적으로 만들어냈다. 결국 대부분은 어셈블리를 작성하지 않게 됐다. (물론 지금도 일부는 작성한다.)

얼마 전 AI를 통해 글을 쓰다가(코딩이 아니고) 문득 이런 생각을 했습니다.

(아, 물론 업무 중 이야기입니다. 이 블로그에 올라오는 글은 AI를 쓰지 않고 있습니다.)

“나는 “개요”라는 이름의 소스 코드를 작성하고 있고, 이걸 AI가 컴파일하기 좋게 다듬는 개발자가 아닐까?”

생각해보면 정말 사실인게, 저는 AI에게 단초를 제공하고, 그걸 여러가지 버전으로 작성합니다. 하나의 단초를 만들어두면 이메일에 적합하게 변환하거나 보고에 적합하게 변환해서 사용합니다. 제가 가진 글의 “소스”는 그대로인데 이 글의 “빌드”는 용도와 목적에 맞게 각각 최적화가 되는거죠.

SF 작가 테드 창은 “AI가 스스로 똑똑해질 수 없는 이유”라는 컬럼에서 현대의 LLM을 컴파일러에 비유했습니다. 인간이 생성해낸 코드를 기반으로 기계에게 맞게 기계어를 작성하고 자동으로 최적화까지 해주는 컴파일러처럼 LLM도 비슷한 역할을 한다는 겁니다.

아, 참고로 “컴파일러”가 무엇인지 모르는 분들을 위해 간단히 설명하자면, 컴파일러는 인간이 컴퓨터와 대화하기 위한 언어 체계를 자동으로 번역해주는 프로그램이라고 보시면 됩니다. 컴퓨터란 놈은 예나 지금이나 0과 1 밖에 모르니까요. 초기엔 컴퓨터에 직접 기계어를 입력해야했지만 컴파일러가 등장한 이후 개발자들은 그나마 자연어에 가까운 프로그래밍 언어를 사용해 컴퓨터에게 원하는 일을 시킬 수 있게 되었습니다.

당신은 그 최적화된 컴파일러를 C로 짰고, 따라서 그 소스코드를 컴파일러제로를 통해 실행 가능한 프로그램으로 바꾸었습니다. 이 프로그램을 컴파일러원이라고 합시다. 당신이 짠 이 컴파일러원으로 다른 소스코드를 컴파일하면, 그 결과 더 빠르게 작동하는 프로그램이 만들어집니다. 문제는 컴파일러원 자체는 컴파일러제로에서 컴파일된 프로그램이기 때문에 작동에 긴 시간이 걸린다는 것입니다. 그럼 어떻게 해야 할까요?

바로 컴파일러원으로 컴파일러원을 만들어낸 소스코드를 컴파일하는 것입니다. 이렇게 만들어진 컴파일러를 컴파일러투라고 합시다. 컴파일러투는 자신의 작동 시간도 짧아졌고, 자신이 컴파일한 프로그램 또한 빠르게 동작하는 특징을 가지고 있습니다. 와우! 당신은 자가발전하는 컴퓨터 프로그램을 만들었습니다!

하지만 발전은 여기까지입니다. 이제 원래의 컴파일러 소스코드를 컴파일러투로 컴파일해도 컴파일러투가 하나 더 만들어질 뿐입니다. 이 방법으로 더 빠른 컴파일러쓰리를 만드는 것은 불가능합니다. 지금보다 더 빠른 프로그램을 컴파일하는 컴파일러를 만들려면 또 다른 방법을 찾아야 합니다

무려 4년 전 컬럼인데도 AI를 컴파일러에 비유한건 상당히 통찰력 있는 비유였다는 생각이 듭니다. AI가 AI로 만든 데이터로는 더이상의 학습과 발전이 불가능하다는 측면도 비슷하죠.

컴파일러가 처음 등장했을 때, 어셈블리어 같은 기계어 기반의 개발자들은 더이상 개발자는 필요 없다고 생각했을 겁니다. 정말 컴파일러의 등장 이후 기계어로 코딩을 하는 개발자는 거의 사라졌지만 이후 기계어나 어셈블리어보다 좀 더 쉬운 언어로 코딩을 하는 개발자들이 등장했습니다.

컴파일러는 웬만한건 알아서 해주지만, 개발자는 컴파일러에 명확한 의도를 소스 코드로서 전달해야합니다. 그렇지 않으면 아무리 컴파일러가 좋아도 이상한 프로그램이 나옵니다. 내 의사를 얼마나 정확하고 효율적으로 기계에게 전달하느냐가 좋은 개발자와 아닌 개발자를 가르는 기준이라고 볼 수 있습니다.

저는 지금의 LLM도 마찬가지라고 생각합니다. 다만 LLM은 인간이 쓰는 자연어를 이해하는 컴파일러인거죠. 현대의 바이브 코딩을 하는 개발자들에게는 LLM에게 얼마나 정확하고 효율적으로 내 의사를 전달하느냐가 점점 중요한 능력이 되고 있습니다.

개발 영역만 그런게 아닙니다. AI로 글을 쓰거나, 기획을 하거나, 그림을 그리거나 하는 활동 모두에 해당하는 이야기죠. AI를 내가 원하는대로 움직이려면 반드시 필요한 능력입니다. AI가 인간이 말하는 자연어를 이해할 수 있게 되면서 적어도 컴퓨터로 일하는 모든 직군은 개발자가 된 셈입니다.

과거의 개발자에게 컴파일러에게 정확한 의사를 효율적으로 전달하는게 중요했듯, AI 시대에 개발자(여기에서는 컴퓨터로 일하는 우리 모두를 의미합니다)에게 중요한 능력은 LLM에게 정확한 의사를 효율적으로 전달하는 언어적 능력일겁니다. 물론 그리고 AI가 만들어낸 결과물을 감수할 수 있는 능력도 필수겠죠.

이런 능력은 결국 인간이 갖고 있는 언어 능력과 지식을 갈고 닦아야만 생깁니다. 그래서저는 AI 시대일 수록 인간은 더 많이 공부하고, 더 많이 알아야만 살아남을 수 있을거라고 생각합니다. 다만 공부해야하는 영역이 좀 달라졌을 뿐이죠. 마치 컴파일러 시대 이후에 기계어 대신 다른 프로그래밍 언어를 더 많이 공부해야했던 개발자들처럼요.

덧. 그렇게 비유하면 이 블로그에서 하고 있는 유기농(Organic) 글 쓰기는 기계어나 어셈블리어를 직접 코딩하고 있는 미련한 짓 같은게 될까요?

덧2. AGI가 나오면 인간이 제공하는 단초 없이도 AI가 스스로 잘 일할 수도 있지 않을까요? 저는 이 부분에 대해서는 회의적입니다. 재귀적 발전이 불가능한 컴파일러처럼 현재의 LLM은 스스로 생각하는 인공지능이 될 수는 없다고 생각합니다.(이에 대해서 예전에 관련글을 쓴 적이 있었죠)