본문 바로가기

단상/기술

코딩을 배우는 의미...


https://brunch.co.kr/@iancho/58


유튜브 쇼츠에서, 몇 년 전, AI 코딩으로 개발자가 사라질 일 없다고 말한 사람이 자기 말을 철회했다는 유머 영상을 보았다. 웃픈 일이다. 나도 개발자다... ㅜ.ㅜ

개발자란 직종이 얼마나 갈 수 있을까. AI가 다 해준다는데.

하지만 나는 굳이 여기서 흑역사가 될지도 모르는 말을 남기고자 한다.

개발자, 네버 다이. 개발자는 사라지지 않는다.

그리고 코딩을 배우는 의미도 사라지지 않을것이다. 그렇잖아. 계산기가 다 해줄 수 있다고 우리가 사칙연산을 안 배우는게 아니다.


2가지 측면에서 접근하고자 한다. 이제 사람이 코딩을 배울 필요가 없을까? 그리고 개발자의 존재 의미란? 두가지는 닮았으면서 전혀 다른 논제다.

먼저, 코딩을 배우는 의미. 일단 미래를 보려면 과거를 봐야한다.

처음의 프로그래밍 언어는 어셈블리다... 아니, 천공카드나 톱니바퀴 짜맞춰 프로그래밍 하는건 일단 제끼자. 어쨌건 프로그래밍 언어라는 건 사람이 나름 이해할 수 있는 언어로(정말?) 기계가 이해할 수 있는 언어를 만드는 것이다. 그래서 어셈블리는 기계어와 1대1 매칭이 된다.

기계어란, 진짜로 0과 1로 이루어진 비트스트림이다.

아무튼 그것을 시초로, 다른 언어들이 나왔다. 그리고 프로그래밍 언어를 기계어로 번역하는 번역기, 컴파일러는 점점 복잡해져갔고, 대신 사람들은 더 자연어에 가까운, 이해하기 쉬운 언어를 쓸 수 있었다. 그만큼 부담은 컴파일러로 가고, 1대1 매칭은 불가능하게 되었다. 그와 함께 프로그래밍 언어는 점점 추상적인 개념을 다루고, 구조화할 수 있게 진화했다.

옛날 C가 메인일 때는, 프로그래밍을 알려면 어셈블리는 배우긴 해야지, 라고 하던 때가 있었다. 멀지 않다. 내 시대다. (아니, 먼가?) 하지만 이내 자바로 넘어갔고 (나름 학교에서 빠르게 새 시대의 흐름을 따른다고, 대학교 1학년때 배운 프로그래밍 기초가 자바였다.) 자바를 해도 C++은 당연히 배워야 시스템에서 메모리를 어떻게 사용하는지 알수 있다고 했다. 나중에 판명났다. 그딴거 몰라도 프로그래밍 잘 한다는걸...

가비지 콜랙터는 위대하다!

나중에 후배들은 프로그래밍 기초로 파이썬으로 시작했다. 뭐? 타입을 선언할줄을 몰라? 내가 PHP를 처음 배울 때 변수의 타입을 정하지 않고도 아무거나 다 들어가는 스크립트 언어의 무질서함에 경악한 적이 있다. 근데 그걸 맨 처음 배운다고?

전혀 괜찮았다. 그딴거 몰라도 되는 거였다. 인터프리터가 잘 해주면 만사 오케이였다. 젠장!

그럼 내가 했던 고생은!

물론 그 고생은 피가 되고 살이 된다. 하지만 앞으로 새로운 것들을 할 후배들은 그거 말고 할게 많았다. AI시대가 오며 텐서플로우도 배우고 파이토치도...

뭐? 이제 그거도 배울 필요 없다고? 트렌스포머? 허깅페이스? 그건 뭔데!!

그렇다. 요즘 유행하는 LLM은 또 새로운 라이브러리가 기존 하이브러리들을 덮어씌워 이전건 배울 필요가 없어졌다...

언제나 그런 식이다. 그러니 앞으로의 세대는 이제 파이썬도 배우지 않아도 될 수 있다. 자연어로 코딩할 테니까.

정말로?

응, 정말로.

근데 그게 정말로 '코딩을 배울 필요 없다'일까? 무슨 소리. 앞서 서술한 내용을 보면 안다.

저 중에서 한번도 코딩을 안 배운 세대는 없다는것을.

배우는 언어가 달라져도 근본은 변하지 않는다. 코딩이란, 내가 머릿속에 있는 막연한 일의 절차들을 컴퓨터가 알아듣기 쉽게 풀어서 서술하는 것이다. 언어가 바뀌어도, 패러다임이 바뀌어도, 복잡한 일들을 컴파일러가, 가비지 콜렉터가, 인터프리터가 다 해줘도 그럼 그들이 해주지 않는 무언가를 사람이 해야한다.

AI시대도 마찬가지다. 뭔가는 사람이 지시해야 돌아간다. 에이전틱 AI는 알아서 돈다고? 무슨 헛소리를. 사람이 개입 안해도 돌아가는 건 자연 뿐이고, 그 자연은 언제나 재해를 우리에게 푸짐하게 안겨준다. 그래서 사람이 시작한 방법은, 자연도 프로그래밍 하는 것이었다.

집을 짓고, 댐을 만들고, 숲을 밀어내고 도시를 만들고 등등, 사람이 간섭할 수 없는 자연을 사람이 간섭하고 관리하는 형태로 만든 것이다. 근데 그걸 도로 AI가 멋대로 하게 한다고?

AI의 발달은 세세한 통제를 할 필요 없게하는 것이지 절대로 통제가 필요없는 게 아니고, 개발자들은 점점 더 상위의 개념에서 기계를 통제해야 한다.

무언가 자기가 하고자하는 목적을 위해 기계에게 지시를 내려야한다.

그게 코딩이고, 그걸 설계하는게 프로그래밍이고, 로우레벨의 코딩은 사라져도 프로그래밍의 일은 없어지지 않으며, 프고르래밍을 하여면 코드에 대한 이해가, 추상적 개념을 구체화하는 능력이 필요하다.

우리는 세상의 복잡한 개념들을 '물리학'이란 틀을 통해 수학이란 추상적인 틀로 변형시켰고, 그 추상적인 개념을, '수'를 이해하기 위해 사칙연산을 배운다. 덧셈뺄셈을 손가락으로 세며 현실적인 손가락과 가상의 수를 매칭시킨다. 구구단은 혁명이다. 2단을 넘어 3단부터는 양손 손가락으로 세지 못하는 개념을 머릿속에 그리기 시작하기 때문이다.

같은 것이다. 코딩을 할 필요 없더라도 우리는 어떤 식으로든 코딩을 배워야한다. 일을 나누고, 순서를 정하고, 분할하여 해결하고, 구조화하는 모든 작업들이 코딩에 녹아있고 프로그래밍을 위한 기초 작업이다. 이건 비단 컴퓨터에 프로그램을 작성할 때만 쓸모가 있는 게 아니다. 사람의 일에도 절차가 있고 구조가 있으니까.

중요한 건 스위치 문의 사용법이나 익셉션 핸들링 방법처럼 일반인들이 모를 그들만의 개념이 아니라, 그런 구조화 능력인 것이다.

물론 코딩을 배웠다면서 정작 그 구조화 능력을 배우지 못한 사람은 천지다. 그건 수학을 고등학교때 배웠다면서 기초적인 개념도 증명 못하는 사람 천지인 것과 같다... 언제나 이상대로는 되지 않는 법이다.

하지만 그렇다고 수학이 교육과정에서 빠지지 않듯이, 코딩도 빠질 일 없다. 오히려 더 가르쳐야한다. 그래야 AI에게도 일을 시킨다. 비록 그 언어가 지금과 달라지더라도.


그렇다면 2번째 문제도 답이 나온다. 그렇다. 개발자, 네버 다이. 네버 엔드다.

좀 더 가까운 이야기를 해보자. 지금 비개발자도 AI만으로 게임을 만드느니 하는 이야기가 나온다. 무슨, AI 코딩을 시작한 시점에서 그는 개발자고 프로그래머다.

...

물론 전문화된, 숙련된, 이란 타이틀은 붙지 않겠지만.

하지만 대개, 그게 가능한 경우는 엄청 간단한 기능을 주문한 게 아니라면 원래부터 본인이 그 구조화 능력이 있던거다.

하지만 좀 더 복잡한 기능은 또 이야기가 다르다.

AI는, LLM은 입력된 데이터를 기반으로 통계적으로 타당한 값을 내뱉는다. 통계적으로 타당한 값이라면 간단히 말하면 '평균'이다. 즉 그 상황에서 '평균적으로 나올 만한 코드를 만들어주는 것이지 얘가 코딩하는 게 아니다. 따라서 일반적인 코드는 잘 만들어주지만 특이한 코드는 잘 만들어주지 못한다. 당연하다. 일반적이고 검증된 코드를 만들어야 잘 동작할 테니까.

하지만 특수한 상황에선? 당연히 잘 못한다.

AI 코딩을 잘 쓰는 가장 기본적인 방법은, 나의 특수한 문제를 일반적인 문제로 쪼개 AI가 만들게 하고, 그골 통합하는 것이다. 간단한 프로토타입을 만들고, 많이 쓰이지만 매번 만들기 귀찮은 함수를 짤 때 유용하다.

생각보다 많이 복잡한 것도 만들어준다. 하지만 그 내용이 완벽하게 내가 의도한 기능이리란 보장이 없다. 물론 AI가 설명하게 하고, 스스로 테스트 케이스도 만들게 해서 검증할수도 있다. 그렇게 내가 검증 가능한 범위를 늘려나가면 AI 코딩을 더 잘 쓸 수 있다.

개인적으로는 일반적인 개발자들과는 코딩스타일이 많이 다르다. 간단한 스타일만이 문제가 아니라 함수와 클래스를 나누고 구조화하는 스타일부터가 다르다. 그래서 AI가 짜주면 내가 쓰기 애매한 경우가 많다. 하지만 유용하다. 때때로 코드의 최적화나, '내 가독성'을 위해 꼼수를 쓸 때가 있는데, 그게 일반적으로도 먹힐만한건지, 혹은 더 좋은 방법이 있는지를 AI에게 시켜서 발견해 내기도 한다.

요즘 개발자에게 AI를 안 써보는 건 손해다. AI는 좋은 동료고, 후임이고, 때론 선생님이다. 본인의 작업에는 적합하지 않더라도, 개별적으로라도 써보는 게 좋다고 본다.

하지만 그래서, 지금의 AI가 당장 2-3년 내로 개발자를 대체할 수 있을까?

글쎄. 내가보기엔 개발자의 수요도 그리 많이 줄이지 못해 보인다.

AI가 전적으로 짠 코드는 신뢰할 수 없다. AI가 잘하나 못하나 이전의 문제다. 코드의 기능을 책임지고 보장할 사람이 반드시 필요하다. 그리고 현실적으로, 지금의 AI는 품질 면에서도 보장이 안된다. 단순 QA도 할루시네이션이 만발하는 마당에, 당신은 AI가 전적으로 코딩한 시스템을 이용하고 싶은가?

개별 개발자의 능력을 어디까지 확장해줄 수 있을까? 그거도 별로... 회사가 막장이 아니라면 그 회사는 이미 기 구축되어있는 많은 라이브러리를 재사용할거다. 그게 아니라도 오픈소스도 많다. 이미 개발자들은 타자 치는 사람이 아니라 그런 부품들을 엮어 문제를 풀고, 시스템의 문제를 찾아내어 해결하는 사람들이다. 지금의 AI는 그걸 못한다.

그럼 지금 개발자를 자르거나 고용을 중단한 기업들은 바보인가? 아니다. 난 그들이 올바른 판단을 내린 건 아니라고 생각하지만 그들이 바보라서 그런 건 아니라고 본다. 문제는 불확실성이다. AI 코딩이 이 정도로 발달한 건 대단히 짧은 시간이었고, 이후 단기간에 어디까지 발전할지를 예상하지 못하기에, 미리 고용했다가 비용이 증가하는 리스크를 안기 싫은 거다. 일반적인 경영자들은 그렇게 판단한다.

한편, 또 한가지가 있다. 단순 코더나, AI를 제대로 활용하지 못하는 프로그래머들은 AI를 활용 가능한 이들에 비해 생산성이 확 떨어질거다. 나라면 사내에 AI를 이용한 코딩 기술을 개발하고 전파하는 체계를 만들며, 못 따라가는 이들을 자를 수 있을 거 같다.

그리고 이쪽의 대표적인 기업, MS에서는 불필요한 중간관리자를 많이 잘랐다는 이야기도 있다.

난 AI로 생산성이 올랐다면 그만큼 사람을 자르는 게 아니라, 그 남는 인력으로 기존의 제품의 퀄리티를 높이거나 신사업이 투입하는 게 맞다고 본다. AI는 사람을 대체하는 게 아니라 사람의 능력을 확장시키는 툴이라고 믿기 때문이다. 하지만 모든 경영자들이 나와 같이 생각하지 않을 것이다.

사실, 최악에는, AI가 짠 스파게티코드가 우리가 사용하는 각종 시스템, 서비스에 난무해서 심각한 문제가 생길지도 모른다. 뭐 그럼 그 서비스는 시장에서 도태되고 다른 기업이 올라오겠지.. (근데 윈도우가 터지면? ㅜ.ㅜ;;)

그렇다. 난 AI가 개발자를 대체할거라 믿진 않지만, 당분간 개발자 고용 시장에는 찬바람이 부는 건 어쩔 수 없다.

거기에서 개발자가 살아남으려면, 지금 회사에 잘 붙어있거나, 혼자거 AI군단을 거느리고 개인 플젝을 하며 개발 커리어를 유지하는 수밖에.

막말로, 지금 개발해야할 게 얼마나 많은데! 전부 주먹구구로 하는 주제에 무슨 개발자를 줄여!

겨울은 끝날 것이다. 하지만 겨울은 왔다.ㅠ.ㅠ


결론은 이거다. 개발도 사라지지 않고 코딩도 사라지지 않는다. 형태가 달라질 뿐. 그러니 달라지는 형태에 적응해야한다. 프로그래밍 언어 하나에만 목매달아도 밥이 보장되는 시대는 지났다.

AI시대는 초보에겐 가혹한 시대다. 그러니 살아남으려면 빨리 초보를 탈출하는 수밖에 없다.

하지만 반대로, 뭔가 할 수 있다면 AI로 그 능력을 대폭 증폭시킬수도 있는 기회의 시대이기도 하다.