그래도, 그리고
Carson Gross
2026년 2월 27일
나는 Montana State University에서 컴퓨터과학을 가르친다. 세 아들의 아버지이기도 하다. 아들들은 내가 프로그래머라는 사실을 알고 있고, 적어도 한 명은 이 분야에 관심을 보였다. 나는 프로그래밍을 사랑하며, 아들들과 수업을 듣는 학생들, 그리고 내 이야기를 들어주는 사람들에게 그 애정을 전하려 한다.
친척과 친구, 학생들에게서 점점 자주 받는 질문이 있다.
AI가 등장한 지금도 컴퓨터 프로그래머가 되는 것을 고려해야 할까?
내 대답은 “그렇다. 그리고…”다.
컴퓨터 프로그래밍은 근본적으로 두 가지를 다룬다.
- 컴퓨터를 이용해 문제를 해결하는 일
- 문제를 해결하는 과정에서 복잡성을 제어하는 일
컴퓨터로 문제를 해결하는 법과 그 해결책의 복잡성을 제어하는 법이 지금보다 덜 중요해질 미래를 상상하기 어렵다. 따라서 AI 도구가 등장해도 프로그래밍은 계속 유효한 직업일 것이라고 생각한다.
그렇지만 AI는 초급 프로그래머에게 매우 위험할 수 있다고 본다. 여러 문제의 코드를 효과적으로 생성할 수 있기 때문이다. 초급 프로그래머가 코드를 배우지 않고 생성에만 의존하면, 직접 부딪혀 코드를 쓰면서 얻는 생생한 이해를 키울 기회를 스스로 빼앗는다.
그래서 학생들에게 이렇게 말한다.
“그래, AI가 이 과제의 코드를 생성할 수 있다. 하지만 AI에게 맡기지 마라. 코드는 직접 써야 한다.”
직접 코드를 쓰지 않으면 코드를 효과적으로 읽을 수도 없다고 설명한다. AI 기반 코딩의 미래에는 코드를 읽는 능력이 분명 중요하며, 어쩌면 더 중요해질 것이다.
코드를 읽지 못하면 마법사의 제자 함정에 빠져 이해하거나 제어할 수 없는 시스템을 만들게 된다.
코딩에서 프롬프트로의 변화는 어셈블리에서 고급 언어로의 변화와 같은가?
고급 언어에서 AI 생성 코드로의 변화가 어셈블리에서 고급 프로그래밍 언어로 넘어간 과정과 같다고 말하는 사람들이 있다.
나는 이 비유에 동의하지 않는다.
컴파일러는 대체로 현재의 AI 도구보다 결정론적으로 작동한다. for 반복문이나 if 조건문 같은 고급 프로그래밍 언어의 구문이 주어지면, 특정 컴퓨터 아키텍처에서 생성될 어셈블리 코드가 어떤 모습일지 상당히 확실하게 말할 수 있다. 적어도 최적화 전에는 그렇다.
특정 프롬프트에 대한 LLM 기반 해법에는 같은 말을 할 수 없다.
고급 프로그래밍 언어는 어셈블리와 달리 적은 텍스트로 컴퓨터를 이용한 문제 해결책을 구체적으로 지정하는 데 매우 적합하다. 이 언어들은 많은 우연적 복잡성을 덜어냈고, 코드가 합리적으로 작성됐다면 주로 본질적인 복잡성만 남겼다.
반면 LLM이 생성한 코드는 우연적 복잡성을 없애지 못하는 경우가 많다. 문제에 맞지 않는 접근법을 선택하거나 지름길을 택해 오히려 상당한 복잡성을 더하기도 한다.
코드를 읽을 수 없다면 그 차이를 어떻게 알아차릴 수 있을까?
그리고 코드를 읽고 싶다면 직접 코드를 써야 한다.
학생들에게 하는 또 다른 말은 AI를 제대로 쓰면 매우 효과적인 조교가 된다는 것이다. 코드 생성기가 아니라 개념과 기법을 이해하도록 돕는 동료로 활용하면 지적 성장에 큰 도움이 될 수 있다.
프로그래밍을 배울 때 가장 힘든 일 중 하나는 막히는 순간이다. 요령이 보이지 않거나 어디서부터 시작해야 진전이 있을지 모를 때가 있다.
우연적 복잡성 때문에 막히는 일은 더 나쁘다. 특정 도구 체인을 어떻게 다루는지, 도구 체인이 무엇인지조차 모를 수 있다.
이것은 배우는 사람의 문제가 아니라 환경의 문제다. 무의미하게 막혀 있으면 실제로 배울 시간이 줄어들고, 컴퓨터과학을 그만두게 되는 경우도 많다.
(나도 Berkeley에서 혼자 Unix를 배우려다 막혔고, 그것이 컴퓨터과학 과정을 중퇴한 이유 중 하나였다.)
AI는 이런 장애물을 넘도록 도울 수 있다. 올바르게 활용하면 훌륭한 조교가 될 수 있다. 나는 코딩 에이전트가 코드 생성기 대신 훌륭한 조교처럼 행동하도록 설정하는 데 사용하는 AGENTS.md 파일을 공개했고, 학생들에게 AI를 이런 역할로 활용하라고 권한다.
AI를 적절히 사용하면 프로그래머로 성장하는 데 방해가 될 필요는 없다.
AI가 프로그래밍을 바꿀 것이라고 생각한다. 일부 사람들이 예상하는 만큼 극적이지는 않겠지만, 근본적인 변화도 있을 것이다.
코딩 행위 자체의 상대적 가치가 낮아질 수도 있다.
나는 그 점이 아쉽다. 보통 코딩하는 행위 자체를 좋아한다. (비유적으로) 맨손으로 무언가를 작동하게 만드는 일은 즐겁다. 코드를 잘 쓰는 데에는 예술성과 만족감이 있고, 여러 미적 선택도 따른다.
그러나 앞으로는 코드를 직접 작성하는 능력의 중요성이 낮아질 수 있다.
이 능력의 상대적 중요성이 줄어들면 다른 기술의 중요성은 커질 것으로 보인다.
예를 들어 LLM과 사람 모두에게 글을 쓰고, 생각을 정리하고, 명확하게 소통하는 능력이 앞으로 훨씬 중요해질 듯하다. 많은 프로그래머는 원래 글쓰기를 좋아하는 성향도 있다. 이 능력은 시간이 갈수록 가치가 커질 가능성이 있으며, 기를 만한 가치가 있다.
책을 읽고 에세이나 블로그 글을 쓰는 활동이 이런 능력을 키우는 데 도움이 될 수 있다.
비즈니스나 정부 조직 등 자신이 일하는 분야를 더 잘 이해하는 데 정신적 노력을 기울이는 방법도 있다.
컴퓨터 프로그래밍은 컴퓨터로 문제를 해결하는 일이고, 기업에는 컴퓨터로 해결할 문제가 많다.
일부 비즈니스 관계자는 AI를 보고 “좋다, 이제 프로그래머는 필요 없다”고 말한다. 하지만 프로그래머가 “좋다, 이제 비즈니스 담당자는 필요 없다”고 말하는 것도 그만큼 그럴듯하다.
나는 두 주장 모두 근시안적이라고 본다. 다만 AI가 프로그래머에게 프로그래머로서의 일을 계속하면서 자신이 해결하려는 현실의 문제(비즈니스 문제든 다른 문제든)를 이해하는 데 더 많은 시간을 쓰게 해줄 수 있다고 생각한다.
이는 의사소통 능력을 키우는 일과도 잘 맞물린다.
많은 프로그래머처럼 나도 “소프트웨어 아키텍트”라는 용어에 양가적인 감정을 갖고 있다. 아키텍처 우주비행사들이 세상에 많은 문제를 일으키는 모습을 봤기 때문이다.
더 나은 용어가 없지만, 소프트웨어 아키텍처는 시간이 갈수록 더 중요한 기술이 될 것이라고 생각한다. 대규모 소프트웨어 시스템을 효과적으로 구성하고, 특히 그 시스템의 복잡성을 제어하는 능력을 말한다.
초급 개발자에게 어려운 점은 전통적으로 큰 해결책을 설계하는 능력이 작은 시스템 구성 요소를 만들어보는 경험에서 나온다는 것이다. 처음에는 서툴게 만들더라도 시간이 지나면서 더 효과적으로 만들게 된다.
내가 만난 형편없는 아키텍트 중 상당수는 코딩 실력이 부족하거나 코딩 경험 자체가 많지 않았다.
AI가 “간단한” 코드 생성을 대신하게 두면, 효과적인 아키텍트가 되는 데 필요한 직관을 어떻게 키울 수 있을까?
그래서 다시 말하지만, 코드를 직접 써야 한다.
분명 앞으로 중요성이 커질 또 다른 능력은 LLM을 효과적으로 사용하는 법을 아는 것이다. 지금은 그게 무엇을 뜻하는지 알아가는 중이라고 생각한다.
또한 그 방법은 경험 수준에 따라 다르다고 본다.
AI 이전 시대부터 충분한 경험을 쌓은 시니어 개발자는 LLM을 효과적으로 활용하기에 유리한 위치에 있다. 좋은 코드가 무엇인지 알고, 대규모 시스템을 만든 경험이 있으며, 무엇이 중요하고 중요하지 않은지 알기 때문이다. 이들에게 위험한 점은 프로그래밍을 완전히 그만두고 뇌의 퇴화를 겪기 시작하는 것이다.
특히 프롬프트를 보내고 결과를 기다리다가 끝없는 스크롤에 빠지는 상황은 위험하다.
어떻게 아는지는 묻지 말라.
나는 보통 LLM을 다음과 같이 활용한다.
- 기존 코드를 분석해 더 잘 이해하고 문제나 불일치를 찾는다.
- 진행하려는 대규모 프로젝트의 생각을 정리하는 데 도움을 받는다.
- 작업 중인 시스템에 필요한 비교적 작은 코드 조각을 생성한다.
- 정규 표현식이나 CSS처럼 쓰기 싫은 코드를 생성한다.
- 버려도 되거나 깊이 유지보수할 생각이 없는 데모·탐색용 코드를 생성한다.
- 작업 중인 기능에 필요한 테스트를 제안받는다.
유지보수가 필요한 완성된 해결책을 LLM에 통째로 생성하게 하지는 않으려 한다. 해결책을 직접 작성하는 동안 LLM을 함께 사용해 API와 선택지를 이해하는 경우는 있다.
내가 만드는 시스템의 API 설계를 LLM에 맡기지는 않는다.
초급 개발자는 더 어려운 처지에 놓여 있다. 다시 말하겠다. 코드는 직접 써야 한다.
요령껏 프롬프트만으로 문제를 넘기고 싶은 유혹은 매우 크지만, 그 유혹에 저항해야 한다.
동료들이 그런 식으로 문제를 해결하는 모습을 보면 짜증이 날 수 있다. 그들보다 더 열심히 해야 하고, 느리다는 비판을 받을 수도 있다. 여기서 업무 환경의 역학을 이해하는 것이 중요하다. 많은 기업이 현재처럼 이해보다 속도를 우선시한다면, 그 현실을 받아들이고 해고되지 않도록 해야 한다.
하지만 이 상황은 일시적이라고 생각한다. 기업들은 곧 빠른 바이브 코딩이 충분히 이해한 뒤 신중하게 코딩하는 것보다 복잡성을 더 크게 폭발시킨다는 사실을 깨달을 것이다.
그때가 되면 AI를 보조 수단으로 활용하는 느리고 신중한 코딩이 이 신기술을 가장 잘 이용하는 방법으로 자리 잡으리라 예상한다.
AI는 초급 개발자가 발목을 잡히는 우연적 복잡성을 없애 시니어 개발자가 되는 길을 단축하는 데 도움을 줄 수 있다. 앞서 말했듯, AI를 하인보다 유용하지만 때로는 지나치게 열성적인 조력자로 여기면 코드베이스의 구성, 특정 문제에 활용할 수 있는 API와 기법, 빌드 시스템이나 프로그래밍 언어의 작동 방식을 이해하는 데 효과적일 수 있다.
하지만 코드는 직접 써야 한다.
그리고 기업도 초급 개발자에게 코드를 쓰게 해야 한다.
AI와 프로그래밍에 관한 질문은 결국 괜찮은 일자리를 구할 수 있는지에 관한 것이다.
지금 프로그래머 취업 시장이 좋지 않다는 것은 비밀이 아니다. 성실한 컴퓨터과학 전공 학생들도 프로그래밍 직무를 구하는 데 어려움을 겪는 모습을 보고 있다.
미래를 확실히 알 수는 없지만, 이 상황은 영구적이 아니라 일시적이라고 생각한다. 프로그래머 취업 시장은 호황과 불황을 반복하는 경향이 있고, 지금의 불황도 언젠가는 회복될 것이다.
하지만 당장 일자리를 찾는 사람에게는 별 위안이 되지 않는다. 그래서 학생들에게 실제로 해주는 구직 조언을 전하고 싶다.
온라인 구인 사이트는 특히 초급 개발자에게 대체로 별 도움이 안 된다고 본다. 복권처럼 당첨 가능성이 낮아 그곳에서 좋은 일자리를 찾을 확률은 낮다. 무료이니 이용할 만하지만, 많은 시간을 투자할 가치는 없다.
더 나은 방법은 네 가지 F, 즉 Family, Friends, Family of Friends다. 개인적인 인맥을 이용해 아는 사람이 근무하는 회사의 채용 기회를 찾아라. 가족이 가장 좋은 연결고리일 수 있고, 친구도 종종 도움이 된다. 친구의 가족은 그보다 약한 연결이지만 역시 문의해볼 만하다. 회사에 다니는 사람을 알거나 몇 단계만 거치면 연결될 수 있다면, 그 회사에 취업할 가능성이 훨씬 커진다.
가족이 Google 같은 대형 기술 기업에 다녀야 한다는 뜻은 아니라고 학생들에게 강조한다.
규모가 어느 정도 되는 회사라면 컴퓨터로 해결해야 할 문제가 있다. 직원이 100명을 넘는 회사라면 개발 부서라고 부르지 않더라도 대개 어떤 형태로든 개발 조직이 있다.
예를 들어 취업에 어려움을 겪던 학생이 있었다. 부모가 무슨 일을 하는지 물었더니 Costco 본사에서 일한다고 했다.
나는 그 학생에게 사실은 운이 매우 좋은 편이며, 그 회사에 들어갈 수 있는 기회를 가진 것이라고 말했다.
처음부터 “컴퓨터 프로그래머”로 시작하지 않을 수도 있다. 분석가나 다른 직무로 출발할 수도 있다. 하지만 그 직무에 프로그래밍 능력을 더하면 큰 가치가 생기고, 좋은 경력으로 이어질 가능성이 크다.
나는 여전히 컴퓨터 프로그래밍을 직업으로 삼는 것이 좋은 선택이라고 생각한다. 현재 취업 시장이 좋지 않은 것은 분명하지만, 일시적인 상황이라고 본다.
프로그래밍 방식이 바뀌고 있으며, 프로그래머는 순수한 코드 작성 능력 외의 기술도 키워야 한다고 생각한다. 이는 언제나 좋은 생각이었다.
일부 주장이 말하는 것만큼 프로그래밍이 극적으로 바뀌지는 않는다고 본다. 특히 좋은 코드를 쓰고 복잡성을 제어하는 프로그래밍의 기초는 앞으로도 계속 중요할 것이다.
이 글이 그 질문에 답하는 데, 특히 초급 프로그래머에게 도움이 되고, 내가 큰 보람을 느껴왔으며 앞으로도 오랫동안 계속할 것으로 기대하는 직업에 뛰어드는 자신감을 주길 바란다.
그리고 기업은 초급 개발자에게 적어도 일부 코드를 직접 쓰게 해야 한다. 기업에도 이익이 되는 일이다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요