AI 시대의 프로그래밍 교육
AI 시대의 프로그래밍 교육은 어떤 형태이면 좋을까? 프로그래밍 교육이 여전히 필요하긴 할까?
교육의 대상
기존에는 주로 프로그래밍을 직업으로 삼으려는 사람을 대상으로 했다면, 앞으로는 “엑셀 교육”처럼, 자신의 업무나 연구에 프로그래밍을 도구로 활용하려는 사람을 대상으로 하는 게 더 일반화될 것 같다. 프로그래밍의 허들이 점점 더 낮아지고, 프로그래밍과 프로그래밍 아닌 것의 경계가 모호해지고 있기 때문.
교육의 형태
깃헙 코파일럿 등 프로그래밍 보조 도구가 LLM의 가장 성공적인 초기 응용일 수 있었던 이유는, 프로그래밍 환경에는 이미 정적 분석기나 자동화된 단위 테스트나 모듈화 등 LLM의 환각을 빠르게 발견할 도구와 실천법이 잔뜩 존재하기 때문이다.
소프트웨어 결함의 비용은 결함 발견까지의 시간에 비례한다(DCI; defect cost increase). 즉 결함을 빠르게 발견할수록 결함 해소에 드는 비용이 적어진다. 따라서 좋은 환경에서 좋은 실천법에 따라 코딩을 하면 LLM 환각으로 인한 비용이 매우 낮아진다. 반대로 말하면, 정적 분석이 약한 언어를 쓰거나 단위 테스트를 안하거나 설계를 엉망으로 하는 상황에서 코파일럿을 쓰면 환각으로 인해 오히려 비용이 커질 수 있다.
“코파일럿은 숙련자에게만 이롭고 초보자에게는 해롭다”는 류의 이분법은 숙련자가 대체로 좋은 도구와 좋은 실천법을 쓰는 경향이 있기 때문일 수 있다. 초보라도 좋은 도구와 좋은 실천법을 익히면 코파일럿을 이롭게 쓸 수 있다고 믿는다.
한편, 초보자라고 하더라도 좋은 도구를 쓰는 건 상대적으로 쉽지만 좋은 실천법은 어떻게 익힐 수 있을까? 이걸 알면 이미 초보자가 아니지 않나?
따라서 AI 시대의 프로그래밍 교육은 초보자가 AI와 짝 코딩을 하는 상황에서 어떻게 하면 좋은 실천법을 점진적으로 익혀가도록 유도할 수 있는지에 대한 고민을 포함해야 한다.
교육에서 다루면 좋을만한 내용들:
- 인지 적소 구축 개념 소개. 어떤 환경에서 프로그래밍을 하는지에 따라 역량 향상에 대단히 중요한 차이가 있을 것. 특히 초보자일수록.
- 깃: 언제나 “정상” 상태로 되돌릴 수 있도록 하여 안전한 탐색 환경 만들기.
- 코드 읽기: AI가 작성한 코드를 효율적으로 읽고 이해하기.
- 리팩토링: AI가 작성한 코드를 개선하고 그 과정에서 이해하기. 이후에 AI가 더 나은 코드를 만들 수 있도록 유도하기. “작동하면 끝”이 아니라 “왜 작동하는지”, “더 나은 방법은 무엇인지” 등을 습관적으로 묻기.
- 단위 테스트와 테스트 주도 개발: AI가 작성한 코드의 오류를 빠르게 검증하기(DCI). 이후에 AI가 더 나은 코드를 만들 수 있도록 유도하기.
- 정적 타입 검사 활용하기: AI가 작성한 코드의 오류를 빠르게 검증하기(DCI. 이후에 AI가 더 나은 코드를 만들 수 있도록 유도하기. 자바스크립트를 쓰는 환경이라면 타입스크립트, 파이썬을 쓰는 환경이라면 MyPy.
- LLM에 대한 올바른 멘탈 모델 갖추기: LLM이 어떻게 작동하는지, 왜 환각이 일어나는지, 무엇이 믿을 수 있는 제안(타입 기반 자동완성)이고 무엇이 의심할 필요가 있는 제안인지(LLM 기반 고스트텍스트) 구분하기.
- 과정에 담긴 가치를 고민하기. 수련의 관점에서 무엇을 AI에게 시키고 무엇을 인간이 하는 게 유익한지 구분하기. Exploration-exploitation dilemma.
- 과정에 담긴 지식을 고민하기. AI 지원 프로그래밍 환경에서 코딩하는 과정을 보여주며 암묵지를 전달할 방법을 고민하기. 코딩 후 커서를 어디에 놓는지 등 아주 사소한 실천 방법이 쌓여서 큰 차이를 만들지만, 완성된 코드만 보면 이러한 과정이 보이지 않는다. 참고: AI 지원 프로그래밍을 위한 새 실천법
- 코드 품질 정량화: 테스트 커버리지, 순환복잡도 또는 인지복잡도 등. Linter 사용하기. AI를 쓰는 상황에서도 좋은 코드 품질을 유지하기.
- 메타: 언제 어떤 일을 AI에게 시킬지, AI가 제안한 결과를 어떤 상황에서 얼마나 신뢰할지 등을 구분하는 능력을 기르기. 평소에 어떤 실천법을 쓰면 이런 능력을 개발할 수 있을지에 대해서도 고민해보기.
교육의 목적
근미래에는 인간이 프로그래밍을 배울 필요가 없어질까?
코드를 만들기 위한 수단으로서의 프로그래밍이 없어지거나 크게 줄어든다고 하더라도, 사고를 다듬기 위한 수단으로서의 프로그래밍(혹은 그 유사한 무언가; 추상적 사고를 명확히 표현하고, 논리를 전개하고, 복잡성을 추상화하는 방법을 익힐 수 있는 구체적인 무언가)은 계속 필요할 것이다.
AI 시대에 인간이 사고를 뭐하러 다듬나? AI-인간 소통 루프에서 인간의 사고(사고의 속도와 품질)가 병목이기 때문. 루프에서 인간을 제거할 수 있는 분야가 점점 늘어날테지만 어떤 루프에는 여전히 인간이 관여해야 하고, 이 경우 인간으로 인한 병목을 줄이는 게 전체 루프의 퍼포먼스에 가장 큰 영향을 주게 된다(제약 이론).
한편 더 단기적으로 보면, 프로그래밍의 허들이 점점 더 낮아진 덕에 오히려 직업 프로그래머가 아닌 사람들이 프로그래밍을 할 일이 늘어날 수도 있겠다.