LLM 시대에 프로그래밍 학습과 역량, 기초 지식, 그리고 인공지능을 활용한 개발에 관해 독자의 편지에 답한다.
독자의 편지에 대한 공개 답변.
최근 한 독자가 LLM 시대에 프로그래밍을 배우는 것에 관해 많은 질문이 담긴 긴 편지를 보내왔다. 몇 차례 의견을 주고받은 뒤, 공개적으로 몇 가지 답을 시도해 보기 위해 그 편지를 폭넓게 인용하는 허락을 받았다.
내 답변 중 어느 것도 특별히 엄밀하다고 생각하지는 않는다. 상황이 너무 불확실해서 내가 할 수 있는 최선의 답을 할 뿐이며, 어떤 종류의 불변하는 진실을 담고 있다고 주장하지는 않는다.
"나는 소프트웨어를 깊이 이해하는 사람들이 AI 시대의 학습과 역량을 어떻게 생각하는지 이해하려고 합니다. 실제로 기술적 전환기를 살아가는 동안, 사람들이 이를 어떻게 이해하는지 직접 묻는다는 점에서 거의 역사학자처럼 접근하고 있습니다.
"약 1년 전부터 저는 AI 보조 프로그래밍에 매료되었습니다. 정규 CS 배경은 없지만, LLM을 이용해 API, PostgreSQL, LLM 파이프라인, 연구 자동화, 다중 모델 워크플로를 포함하는 상당히 큰 TypeScript/JavaScript 시스템을 만들었습니다. 처음에는 거의 마법처럼 느껴졌습니다. AI가 아이디어를 갖는 것과 그것을 만들 수 있는 것 사이의 거리를 무너뜨리는 듯했으니까요.
"하지만 이제 그 시스템을 실제 운영 제품으로 만들려 하는데, 어려움을 겪고 있습니다. AI로 오류 하나를 고치면 다른 오류가 나타나고, 또 다른 부분이 내가 완전히 이해하지 못하는 방식으로 동작합니다. 몇 달 동안 리팩터링한 뒤 불편한 깨달음을 얻었습니다. 내가 스스로 이해하는 수준을 넘어서는 시스템을 만들었을지도 모른다는 것입니다. 모든 것이 작동할 때는 그 간극이 거의 보이지 않습니다. 작동하지 않을 때는 아주 현실적인 문제가 됩니다.
"때로는 다른 모델에게 묻지 않고 다음에 무엇을 해야 할지 정말로 모르겠습니다. 그래서 지난 1년 동안 내가 제품을 만든 것인지, 아니면 부분적으로는 제품의 외관을 만든 것인지 궁금해졌습니다. 작동할 만큼 정교하지만, 내가 진정으로 소유했다고 할 만큼 깊이 이해하지는 못하는 무언가 말입니다.
"저는 전혀 반 AI가 아닙니다. 이런 시스템들에 매료되어 있고, 직업적으로 함께 일하고 싶습니다. 하지만 이들과 어떤 관계를 맺는 것이 옳은지 확신이 없습니다."
실제로 나도 확신이 없다. 하지만 계속하기 전에 내 입장을 밝히는 것이 가장 투명하다고 생각한다. 아직 AI에 대해 결론을 내리지는 않았지만, 그것이 막을 수 없는 흐름일 수 있음을 충분히 알면서도 싫어하는 쪽으로 기운다.
나는 그것을 사용하고 실험하며, 종종 감탄한다. 다른 때에는 좌절한다. 대개 가장 크게 감탄할 때 가장 크게 원망한다.
형편없을 때는 답답할 수 있지만, 적어도 내가 30년 넘게 배운 것이 여전히 의미 있다는 환상에서 작은 온기를 얻을 수 있다. 최상의 상태일 때는 가끔 이렇게 생각한다. 버틀레리안 지하드는 어디에서 신청하나?
LLM에 대한 내 입장은 내 사회경제적 지위에만 기반한 것은 아니다. 나는 충분히 나이가 들었고 이미 어느 정도 성공을 거두었기에, 다른 조건이 같다면 실업 상태에서도 살아갈 수 있다. 반면 지식 기반 사회 전체가 그럴 수 있을지는 확신이 없다.
LLM은 다른 사무직보다 먼저 프로그래머의 일자리를 가져갈지도 모른다. 결국 프로그래밍은 보험금 청구 관리 같은 일보다 검증이 쉬운 분야일 수도 있다. 그래도 지식 노동자들 사이에 대량 실업이 발생하는 지점에 이른다면, 우리가 아는 사회가 살아남을지 확신이 없다.
나는 보통 경제학자로서의 배경을 많이 이야기하지 않지만, 이 맥락에서는 언급할 가치가 있다고 생각한다. 경제학자로서 나는 30-40%의 대량 실업이 경제에 상당한 영향을 미치지 않을 것이라고 상상할 수 없다.
나는 이런 일이 이전에도 일어났다는 주장들을 몹시 잘 알고 있다. 일자리가 사라질 수는 있어도 기술의 발전은 오늘날 우리가 상상조차 할 수 없는 새 일자리를 만들어 낸다는 주장이다. 양말 편직기, 증기 기관, 내연기관, 컴퓨터 등이 도입될 때도 그랬다. 이는 부분적으로만 사실이다. 그렇다, 새 일자리는 생겼지만 대개 일자리를 잃은 바로 그 사람들을 위한 것은 아니었다. 석탄 광부가 하룻밤 사이에 프로그래머가 되지는 않았다.
중국이 세계무역기구에 가입했을 때도 같은 종류의 주장이 사용되었다. 실제로 많은 새 일자리가 생겼지만, 서구 세계에서 생긴 것은 아니었다.
그러므로 살아온 경험과 역사적 경험에 비추어 볼 때, 모든 것이 괜찮아질 것이라는 주장에는 회의적이다.
하지만 내가 틀렸기를 진심으로 바란다. 나는 프로그래밍을 사랑하며, 앞으로 10년 더 하고 싶어도 전혀 개의치 않는다. 어쩌면 더 중요하게도, 내게는 이제 막 성인이 된 자녀들이 있다. 그들에게도 살아갈 세상이 있기를 바란다.
"그래서 이에 대해 어떻게 생각하시는지 정말 알고 싶습니다. LLM이 존재하기 전에 프로그래밍 기초를 배운 것이 기쁘신가요? 오늘 시작한다면 여전히 언어, 자료 구조, 데이터베이스, 네트워킹, 운영체제, 디버깅, 아키텍처를 진지하게 공부하시겠습니까? AI가 사람들이 이해할 수 있게 되는 속도보다 훨씬 빠르게 무언가를 만들 수 있게 해준다고 생각하시나요?"
LLM 이전에 프로그래밍을 배운 것이 기쁜가? 그렇다, 물론이다. 그 기술들은 30년 동안 내게 큰 도움이 되었다.
오늘 시작한다면 목공, 금속 가공, 총기 제작, 또는 손과 눈의 협응이 필요한 다른 일을 배우는 것을 진지하게 고려할 것이다. 로보틱스도 발전하고 있다는 것은 알지만, 육체노동의 대체는 더 먼 미래에 있을 듯하다.
하지만 질문에 답하자면, 나는 개인적으로 현재 대학 과정의 일부로 자료 구조, 언어 의미론 등을 배우고 있다. 다만 돈으로 큰 보상을 얻으리라 기대해서가 아니라 호기심 때문에 한다.
AI가 사람들이 따라갈 수 있는 속도보다 빠르게 발전하도록 만든다고 생각하는가? 이는 두고 봐야 한다. 소프트웨어 개발자들은 이미 수십 년 동안 자신이 이해하지 못하는 추상화 위에서 일해 왔다. 웹 개발자라면 컴파일러 프로그래밍을 많이 알지 못했다. 컴파일러 프로그래머라면 집적회로 설계를 많이 알지 못했다. 그리고 집적회로를 설계하는 일이 직업이었다면, 자신보다 위에 있는 추상화 수준은 많이 알지 못했을 것이다.
좋은 경험 법칙은 이랬다. 자신이 일하는 추상화 수준 바로 아래와 바로 위의 수준을 이해하라. 그러면 대부분의 문제를 해결할 수 있다.
"그렇다면 개인적으로는 이를 어떻게 다루시나요? AI가 무언가를 즉시 해결할 수 있을 때, 언제 그것을 사용하고 언제 스스로 문제를 풀어볼지 어떻게 결정하시나요? 상당한 규모의 AI 제작 프로젝트가 있지만 그 아래의 기초는 약한 제 입장이라면, 한 걸음 물러나 그 기초를 체계적으로 배우겠습니까, 계속 만들면서 문제가 나타날 때 배우겠습니까, 아니면 둘을 결합하겠습니까?"
그것은 완전히 다른 두 질문이다. 나는 더는 소프트웨어 개발의 기초가 약하지 않기 때문이다. 평소 하는 일과 아주 거리가 먼 일을 다루더라도, 이미 알고 있는 것을 활용해 빠르게 적응할 수 있다. 누군가가 나에게 RISC-V 어셈블리 코드로만 작성된 애플리케이션을 유지보수하라고 맡겼다고 상상해 보자. 그것은 내가 상상할 수 있는 한 가장 낯선 소프트웨어 환경이다. 그런 개발 환경에 적응하는 일은 내게 어렵겠지만, 일반적으로 프로그래밍을 처음 배우는 사람에게보다 어렵지는 않을 것이다. 믿기 어렵겠지만, 나는 RISC-V로 작은 연습 프로그램을 작성한 적이 있고, RISC-V로 컴파일하는 연습용 컴파일러도 작성했다.
하지만 소프트웨어 배경이 사실상 전혀 없다면 어떨까?
한때 나는 정확히 그런 상황에 있었다. 경력을 시작했을 때, 몇 년 동안 일을 해내는 것과 직장에서 배우는 것 사이의 칼날 위에서 균형을 잡았다. 1999년부터 C++로 COM 컴포넌트를 작성했지만, 내가 무엇을 하는지 많이 이해하지 못했다. 그럼에도 어떻게든 해냈고, 명백한 메모리 누수를 없앨 정도로는 해낼 수 있었다.
하지만 작동 방식을 이해하지 못한 채 그저 이것저것 붙이는 것에 만족한 적은 없었다. 그래서 질문에서 제안했듯이 한 걸음 물러나 기초를 체계적으로 배웠다. 이는 1990년대 중반에 시작한 경력에는 잘 맞았다. 오늘날에도 잘 맞을까?
그리 확신하지는 않는다. 과거의 자신감이 더닝-크루거 곡선에서 너무 무지해서 그것을 깨닫지 못하는 구간에 분명히 놓여 있었다고 알아볼 만큼 높은 역량에 도달하는 데 수십 년이 걸렸기 때문이다. 오늘날 그렇게 많은 시간이 있는가?
물론 LLM을 쓰면 더 직접적인 질문을 할 수 있으므로 더 빨리 배울 수 있다. 30년 전에는 어느 정도라도 도움이 되는 내용이 들어 있기를 바라며 책을 샀다. 이는 여전히 당면한 과제와 즉시 관련 없는 학습 자료를 많이 힘겹게 통과해야 한다는 뜻이었다.
그래도 인간의 학습을 크게 가속할 수 있으리라고는 의심한다. 병목은 교사나 자료가 아니라 인간의 뇌가 새 지식을 흡수할 수 있는 속도일 가능성이 크다.
"특히 감사하게 듣고 싶은 마지막 한 가지는, 당신이 직접 프로그래밍을 어떻게 배웠는지와 오늘날 새 기술적 내용을 어떻게 배우는지입니다. 경력 초기에 새 언어를 어떻게 배웠나요? 책, 프로젝트, 다른 사람의 코드 읽기, 연습, 디버깅, 아니면 다른 방법이었나요? 그리고 오늘날 AI를 사용할 수 있는 상황에서 완전히 새로운 프로그래밍 언어를 배워야 한다면 어떻게 하겠습니까?"
첫 번째 질문에 대한 짧은 답은 이렇다. 천천히, 많은 시행착오를 거쳐, 가끔 책의 도움을 받으며 배웠다.
COMAL 80으로 아주 이르게 실패한 출발을 한 것을 제외하면, 내 첫 프로그래밍 프로젝트는 경제학 석사 논문을 위해 분기 다이어그램과 로렌츠 끌개를 다시 계산하는 일이었다. 가지고 있던 것을 활용해 QBasic으로 작성했고, 함께 제공된 예제들로 배우고 가끔 친구에게 물었다.
많은 세부 사항을 생략하고 있지만, 1990년대와 2000년대에는 주로 예제와 문서로 배웠다. C++에 관한 책을 사기는 했지만 끝까지 읽었는지는 모르겠고, 여러 Basic 방언과 C#은 문서와 예제 코드만으로 익혔다.
그렇긴 해도 C#을 배우기 위해 책을 읽은 적은 없지만, F#과 Haskell을 배우는 데는 책이 핵심적인 역할을 했다. 수년에 걸쳐 자기 교육을 위해 책에 크게 의지해 왔지만, 내 Goodreads 프로필이 보여주듯 나는 전반적으로 책을 사랑한다.
오늘날 완전히 새로운 프로그래밍 언어를 어떻게 배우는가? 다시 말하지만, 내 경험은 2026년에 프로그래밍을 처음 배우는 사람에게는 쓸모가 없다. 이제 너무 많은 프로그래밍 언어를 보았기 때문에, 새 언어를 마주하면 대개 기존 코드를 훑어보고 즉시 명확하지 않은 몇 가지를 찾아보는 것만으로 익힐 수 있다.
하지만 이는 그 언어가 '평범하다'는 것을 전제한다. APL로 다시 돌아가야 한다면 적어도 튜토리얼은 찾아야 할 것이다.
알아차렸을지도 모르지만, 나는 학습을 위해 LLM을 많이 사용하지 않는다. LLM은 환각하지 않는다. 헛소리를 한다. 그래서 LLM이 내게 말하는 어떤 것이든 깊이 불신한다. 그렇다고 LLM을 쓰지 않는다는 뜻은 아니지만, 검증 가능한 답을 내놓는 질문을 하는 편이다. 이 Haskell 표현식을 더 간결하게 만들 수 있는가? 이런 질문에 대한 유용한 답은 작동하거나 작동하지 않고, 더 짧거나 더 짧지 않은 코드 제안이다. 이는 검증하기 쉽다.
반면 _다음에는 무엇을 배워야 하는가?_는 검증 가능한 답을 내놓지 않는다. 나는 대체로 LLM에게 그런 질문을 하지 않는다.
결론적으로, 나는 LLM에게 반증 가능한 질문을 하는 편이라고 말할 수 있다.