"Yes, and..." — AI 시대에 프로그래밍을 가르친다는 것

"프로그래밍을 배워야 하나요?"
최근 htmx 창시자이자 몬태나주립대 교수인 Carson Gross가 쓴 에세이 "Yes, and..."를 읽었다. 학생들로부터 "AI 시대에 프로그래밍이 여전히 좋은 진로인가"라는 질문을 받고, 그가 내놓은 답이 "Yes, and..."였다. 프로그래밍은 여전히 가치 있다. 다만, 코딩만으로는 부족하다.
이 글을 읽으면서 지난 4년간의 기억이 떠올랐다.
4년간의 강의, 그 사이에 ChatGPT가 왔다
2022년부터 작년까지 영남대학교에서 "소프트웨어와 인공지능"이라는 과목을 강의했다. 주로 1학년을 대상으로 하는 교양 수업이었고, 컴퓨터공학 전공자뿐 아니라 비공학 계열 학생들도 수강했다.
2022년 11월, ChatGPT가 등장했다. 그 이전과 이후로 교육의 형태가 확연하게 바뀌었다. 이전에는 "이 코드가 왜 안 돌아가죠?"라는 질문이 주였다면, 이후에는 "ChatGPT가 짜준 코드인데 왜 안 돌아가죠?"로 바뀌었다. 질문의 주어가 학생에서 AI로 이동한 것이다.
대학 교육의 방향성은 여기서 논할 내용이 아니다. 기회가 되면 따로 정리하고 싶다. 다만, 강의를 하다 보면 자연스럽게 학생들의 미래 이야기로 넘어가는 순간이 있다.
말해줄 수 없는 것들
1학년 교양 수업이니 가볍게 진행하지만, 이런저런 얘기를 하다 보면 학생들이 졸업 후의 미래를 묻는다. 이 순간이 참 고민된다. 어떤 세상으로 바뀔 테니 이렇게 준비하라고 말하기가 쉽지 않다.
특히 코딩이나 프로그래밍에 회의적인 시각을 가진 사람들에게, "그래도 배워두면 도움이 됩니다"라고 설득할 근거를 찾기가 갈수록 어려워졌다. 3년 전만 해도 "기본적인 프로그래밍 능력은 어느 분야에서든 무기가 됩니다"라고 자신 있게 말할 수 있었다. 지금은 그 문장을 입 밖에 꺼내기 전에 한 번 더 생각하게 된다.
Carson Gross의 에세이에서 인상 깊었던 부분이 바로 여기에 닿는다. 그는 프로그래밍의 본질이 "컴퓨터를 이용한 문제 해결"과 "복잡성 관리"라고 했다. 코드를 타이핑하는 행위 자체가 아니라, 복잡한 시스템을 이해하고 다루는 능력이 핵심이라는 것이다. AI가 코드를 작성해줄 수 있어도, 그 코드가 만들어내는 시스템의 복잡성을 다루는 건 여전히 사람의 몫이다.
맞는 말이다. 하지만 강단에서 이걸 1학년 학생에게 설득력 있게 전달하는 건 또 다른 문제다.
마법사의 제자 함정
Gross는 학생들에게 이렇게 경고한다. AI가 코드를 생성해줄 수 있지만, 직접 작성하지 않으면 코드를 읽는 능력도 잃는다고. 그는 이것을 "마법사의 제자(Sorcerer's Apprentice) 함정"이라고 불렀다. 자신이 이해하지 못하는 시스템을 만들어놓고, 그것이 폭주할 때 손쓸 방법이 없는 상태.
교육자가 아닌 회사를 운영하는 입장에서, 이 문제는 이미 현실이다. 주니어 개발자들 중에 LLM을 이용하는 것에는 익숙하지만, 문제가 발생했을 때 전혀 해소하지 못하는 경우가 나타나고 있다. AI가 생성한 코드가 에러를 뱉으면, 에러 메시지를 다시 AI에 던지고, AI가 또 다른 코드를 주고, 그것도 안 되면 또 던지고—이 루프가 끝없이 돌아간다.
경험의 부족이 여기서 드러난다. 디버깅 능력이라는 건 수많은 실패와 삽질에서 쌓이는데, 그 과정을 AI에 위임해버리면 정작 필요한 순간에 발휘할 능력이 없는 것이다. Gross가 어셈블리-고급언어 비유를 반박한 것도 같은 맥락이다. 컴파일러는 결정론적이지만, LLM은 그렇지 않다. LLM이 생성한 코드에는 "우연한 복잡성"이 들어 있고, 그걸 다루려면 결국 사람이 코드를 읽을 줄 알아야 한다.
그런데, "and..."가 더 중요하다
여기까지만 보면 "그러니까 코딩을 열심히 배워라"가 결론처럼 보인다. 하지만 Gross의 답이 "Yes"가 아니라 "Yes, and..."인 이유가 있다.
그는 순수한 코딩 능력의 상대적 중요성이 줄어들 것이라고 솔직하게 인정한다. 대신 부상하는 역량이 있다.
- 의사소통 능력. AI와 사람 모두에게 명확하게 의도를 전달하는 것.
- 비즈니스 이해. 기술이 해결해야 할 실제 문제를 파악하는 것.
- 시스템 아키텍처. 규모 있는 시스템의 복잡성을 제어하는 것.
- LLM 활용 능력. 시니어는 설계에, 주니어는 학습 보조로 활용하되 직접 코드를 작성하는 근본은 유지하는 것.
이 목록을 보면서 생각했다. 사실 이건 프로그래밍에만 해당하는 이야기가 아니다. 모든 직업에서 "도구를 다루는 기술"에서 "도구를 활용해 문제를 정의하고 해결하는 능력"으로 무게중심이 이동하고 있다.
사람과 에이전트 사이
코딩 에이전트는 기술적으로 계속 성장할 것이다. 지금 주니어 개발자가 겪는 "디버깅 못 하는 문제"도 에이전트가 점점 더 잘 처리하게 될 것이다. 그 방향은 분명하다. 하지만 동시에, 인간이 하는 역할이 축소되는 것은 벌써 눈에 보인다.
그래서 앞으로 어떤 일을 해야 하는가? 여기에 대해서는 솔직히 답이 없다. 동물적인 직감으로 느끼는 것은 이 정도다. 에이전트들이 점점 더 많은 일을 할 것이고, 사람의 역할은 사람과 에이전트를 연결하는 접점에 남지 않을까. 에이전트가 이해할 수 있도록 문제를 정의하고, 에이전트가 내놓은 결과를 사람이 이해할 수 있도록 번역하고, 여러 에이전트가 만든 것들을 하나의 시스템으로 엮는 역할.
Gross가 말한 "의사소통 능력"과 "비즈니스 이해"가 결국 이 접점에 대한 다른 표현일 수도 있다.
참으로 빠르게 바뀌는 세상
4년 전 처음 강단에 섰을 때와 지금은 완전히 다른 세상이다. 2022년에는 학생들에게 "for문을 이해하세요"라고 말했고, 2025년에는 "AI가 짠 for문이 왜 이렇게 도는지 이해하세요"라고 말하게 되었다. 같은 "이해"라는 단어인데, 맥락이 완전히 달라졌다.
학생들에게 확신에 찬 답을 주지 못하는 건, 교육자로서 부끄러운 일이 아니라 솔직한 일이라고 생각한다. 세상이 어떻게 바뀔지 모르는데 아는 척하는 것이야말로 무책임하다.
다만 한 가지, "Yes, and..."라는 프레임은 마음에 든다. 프로그래밍은 여전히 배울 가치가 있다. 다만, 코드를 작성하는 기술 그 자체가 아니라, 코드를 통해 세상의 복잡성을 다루는 감각을 익히는 것으로서. 그리고 그 감각 위에 의사소통, 비즈니스 이해, 시스템적 사고를 쌓아가는 것으로서.
다음에 강단에 설 기회가 온다면, "프로그래밍을 배워야 하나요?"라는 질문에 이렇게 답할 수 있을 것 같다. "네, 그리고..."