코드 러너(Learner+ Runner)

AI가 코딩하는 시대에는 어떤 프로그래머가 살아남을까? 본문

GPT

AI가 코딩하는 시대에는 어떤 프로그래머가 살아남을까?

mallard.oh 2023. 3. 30. 18:00

최근에는 코딩에 거대 언어모델을 많이 사용하면서 기본 코딩 블록 구현은 거대 언어 모델이 대체하게 될지도 모른다는 이야기가 많이 등장하고 있다. 실제로 코딩을 할 줄 모르는 분들도 ChatGPT를 활용하여 프로그램을 만드는 사례들이 우후죽순 등장한다.

 

코딩 지식 없이 프로그램을 만드는 유튜브 영상들

 

실제로도 ChatGPT에서 한 줄의 명령만으로 손글씨를 인식할 수 있는 영상 인식 프로그램을 Pytorch라는 딥러닝 프레임워크를 사용하는 코드를 작성해 준다.

MNIST 손글씨 데이터를 읽는 영상인식 프로그램 코드 작성 by ChatGPT

이뿐만 아니라 Github Copilot을 사용하면 Visual Studio 등과 같은 통합개발환경(프로그램을 만들기 위한 다양한 기능들을 많이 담고 있는 프로그램이라고 생각하면 쉽다) 내에서 코드를 작성하면서 많은 도움을 받을 수도 있다.

 

깃허브 코파일럿 채팅을 통해 코드 설명하는 화면. 출처 : 깃허브

 

그런데 실제로 프로그램을 만들기 위해서는 단순히 코드를 작성하는 과정 외에도,

  • 요구사항 분석(이 프로그램을 왜 만들어야 하는지)
  • 계획(팀을 꾸리고, 자세한 프로그램에 대한 계획을 세우는 단계)
  • 아키텍처 디자인(어떤 구조로 프로그램을 만들 것인지)
  • 코드 구현(실제로 코드를 작성하는 과정, 대부분은 프로그램을 만든다고 하면 이 과정을 떠올린다)
  • 테스팅(버그가 있는지 확인해 보는 과정)
  • 코드 배포(사람들이 사용할 수 있도록 배포하는 과정)
  • 유지 관리와 지원(사용자 피드백도 받아서 버그도 수정하고, 보안 문제도 해결하고, 새로운 기능도 넣는 과정)

등의 단계들이 존재한다.

소프트웨어 개발 수명 주기

 

그런데 개인 개발자들이 개인용 프로그램을 만들 때에는 보통 과정들을 많이 생략하고 '코드 구현'에 집중하는 경향이 있다. 그리고 이 '코드 구현' 단계에서 ChatGPT가 보인 코드 작성 능력이 생각보다 강력하기에 이런 우려들이 많이 발생하는 것으로 보인다.

 

그럼 역으로 코딩 프로세스를 분석해서 앞으로는 어떤 개발자들이 남고, 어떤 개발자들이 먼저 사라지는지를 생각해 보면 어떨까? 미래는 항상 변수들이 가득하기에 미리 예측하는 것이 어쩌면 오만한 행위일 수도 있으나, 미래에 대한 백업 플랜 없이 커리어를 키워가는 것은 지금 같은 급변하는 세상에서 위험할 수 있으니 한 번 생각해 보면 좋을 것이다.

 

우선 '코드 구현'은 앞으로도 다양한 코드들이 쌓이고, 더 크고 강력한 거대 언어모델들이 등장할수록 대체될 가능성이 커진다. 물론 얽히고설킨 복잡한 기능이 담긴 코드들은 쉽게 대체되지 않을 것이다. 그러나 이 '코드 복잡도' 역시 인간의 기준일 뿐일지도 모른다. 사람에게는 복잡한 일들을 인공 지능이 쉽게 돌파한 사례가 얼마나 많은지 생각해 보면 당연하다. 예컨대, 넷플릭스나 유튜브의 추천 알고리즘을 만약 사람이 규칙 기반으로 작성한다면 얼마나 복잡할까? 추천 시스템의 등장으로 이런 작업들은 지금은 인공지능이 주축이 되어 수행한다.

 

요구사항 분석은 어떨까? 이 부분은 사람이 오래 남아있지 않을까 기대한다(물론 필자의 희망회로일지도 모른다..!). 결국 이 부분은 사람에 대한 이해가 필수적으로 이뤄져야 한다(사실 대부분 개발자들은 공감한다. 개발해 보면 얼마나 요구사항이 괴랄해질 수도 있는지..!!). 우리가 만드는 프로그램들은 사람들을 더 행복하게, 편하게 해 주기 위함이고, 결국 요구사항 분석은 사용자의 입장으로 빙의되어 '인간'에 대해 생각해 봐야 하기 때문이다. 그러나 이 역시도 이분법적으로 생각해서는 안 되는 게, 요구사항 분석에서도 사용자에 대한 데이터 분석이 필수적이고, 데이터 분석이야말로 데이터 과학, 머신 러닝 지식이 상당히 많이 활용된다. 즉, 이 분야는 사람에 대한 관심과 이해, 그리고 데이터 과학에 대한 활용 지식이 함께 어우러져서 시너지를 일으키지 않을까 한다.

 

계획에는 일정을 계획하고, 요구 리소스, 한계사항 등을 파악하는데, 이 부분은 아마도 자동화의 물결이 큰 영향을 줄 것 같다. 이미 일정 관리는 회사에서는 다양한 협업 툴을 사용해서 관리하는데, 이 과정도 수많은 프로젝트들을 크게 보면 반복되는 부분들이 많다.

 

아키텍처 디자인은 당장 대체되기는 조금 어렵지 않을까 생각된다. 여러 개발자 포럼, 커뮤니티 등을 보면 많은 분들이 ChatGPT가 개발자를 얼마나 대체할 수 있을지에 대한 토론이 뜨거운데, 공통적으로 많이 나오는 이야기가 '시니어 개발자는 글쎄.. 주니어 개발자는 대체될 수도 있겠다..!' 의견이 지배적이다. 두 개발자의 큰 차이 중 하나가 '아키텍처 디자인 능력'이다. 얼마나 더 효율적이고, 좋은 아키텍처를 짜는지는 개발자의 역량에 달려있다. 아키텍처를 어떻게 짜느냐에 따라 만들어지는 프로그램의 품질은 처참할 수도, 매우 훌륭할 수도 있다.

 

테스팅은 이미 상당히 자동화되어 있다. 가장 기본적인 함수 단위로 테스트하는 유닛 테스트부터, Jenkins 등의 자동화 프로그램을 통해 코드 빌드 테스트 등 인공지능을 사용하지 않더라도 많은 부분이 자동화되어 있다. 코드 배포까지도 이미 자동화 파이프라인들이 많이 구축되어 있다.

 

유지 관리와 지원은 약간 사람냄새가 난다. 이 역시 요구사항 분석과 유사한 부분도 있다. 만약 피드백을 두 개 받았는데 하나는 A 기능을 빼달라고 하고, 또 다른 피드백은 A를 두 배로 늘려달라고 한다. 어떻게 해야 할까? 결국 인간에 대한 이해가 필요할 것이다. 물론 그 과정에서 피드백 데이터를 관리하고, 분석하는 데에는 데이터 과학이 상당히 많이 사용될 것이다. 따라서 이 부분도 사람이 인공지능과 함께 시너지를 일으키는 그림이 그려질 것 같다.

 

지금까지 서술한 이야기들은 필자의 개인적인 의견이 다수 들어갔다. 실제로는 이보다 더 인공지능이 빠르게 발전하면서 인공지능으로 대체되기 힘든 부분들이 모두 쉽게 대체되어 버릴 수도 있다. 반대로 쉽게 대체될 것 같았으나, 생각보다 복잡한 부분들이 생겨 대체되지 못할 수도 있다. 그러니 너그럽게 한 명의 개발자이자 인공지능 분야의 연구자 개인의 의견을 수용해 주시면 좋을 것 같다.

Comments