프로그래밍의 캐치-22
Source: Dev.to
딜레마 22
- 숙련된 프로그래머만이 AI를 올바른 소프트웨어로 이끌 수 있다.
- 숙련된 프로그래머가 되기 위해서는 입문 단계에서의 단순 코딩 기간을 포함해 오랜 시간이 필요하다.
- AI가 입문 수준 프로그래머의 일자리를 빼앗고 있다.
프로그래머가 되기까지
컴퓨팅 초기에 프로그래머가 되는 길은 간단했다: 직접 해보는 것이 전부였다. 교육 과정이 거의 없었기 때문에 학습은 교과서와 데이터 시트에서 이루어졌다. 꾸준히 노력한 사람들은 전문 프로그래머가 되었다.
그 후 정보가 풍부해졌다. 이메일과 월드 와이드 웹 덕분에 사람들은 책이 도착하기를 기다릴 필요 없이 질문을 하고 글을 읽을 수 있었다. 거의 모든 주제에 대한 강좌가 생겨났다.
하지만 소프트웨어도 점점 복잡해졌다. 수많은 도구와 라이브러리가 필수가 되었고, 구인 공고는 약어들로 가득 차서 많은 지원자들이 노력해도 상금이 손에 닿지 않는 듯한 느낌을 받았다.
LLM을 활용한 프로그래밍
AI가 등장하면서 프로그래머의 삶이 다시 간단해진 듯 보였다. 라이브러리의 모든 함수를 기억할 필요가 없어졌고, AI에게 물어보기만 하면 되었다. 하지만 우리는 이 새로운 작업 흐름에 익숙해지면서 AI 시스템이 우리의 일자리를 노리기 시작했고, 이제는 “모든 프로그래밍이 곧 AI 엔진에 의해 완전히 수행될 것”이라는 이야기를 듣게 된다.
실제로 AI에게 소프트웨어 작성을 요청하면 출력물은 대개 프로토타입 수준이며 완성된 제품으로 배포하기엔 부적합하다. 좋은 제품을 만들기 위해서는 다음이 필요하다:
- 원하는 바를 정확히 설명하는 탄탄한 프롬프트를 만든다.
- 시작부터 끝까지 전체 과정을 면밀히 모니터링한다.
- 올바른 작업 방식을 강제하고 작성되는 모든 코드를 테스트한다.
이 작업을 할 수 있는 사람은 유능한 프로그래머뿐이다. 따라서 딜레마 22가 발생한다:
- 좋은 제품을 만들려면 전문가가 AI를 올바르게 이끌어야 한다.
- AI가 일상적인 프로그래밍 작업을 차지하면서 전문가가 되기 위해 시간을 투자할 사람이 줄어든다.
코드를 직접 작성하지 않으면 AI의 실수를 발견하는 방법을 배우지 못하고, 프로그래밍 언어의 역량과 최적 활용법도 이해하지 못한다.
핵심 문제
상황은 아직 진행 중이지만, 최고 수준 프로그래머가 부족해지면서 빠르게 심각해질 것이다. AI가 만든 제품은 대부분 프로토타입 단계에 머물러 완전하지 못하고 목적에 맞지 않을 가능성이 크다.
우리의 선택지는?
문제의 핵심은 컴퓨터와 소통하는 방식이다. 크게 두 가지 접근법이 있다:
1. 전통적인 고수준 언어
C++, Java, Python 등 주류 언어로 코드를 작성한다. AI가 저수준 코딩을 장악함에 따라 이러한 언어에 능숙해지는 사람은 점점 줄어들 것이다.
2. 자연어 (예: 영어)
AI는 자연어를 통해 프로그래밍을 가능하게 하지만, 인간 언어는 본질적으로 모호하다. AI는 모호성을 질문하기보다 사용자가 의미한다고 생각하는 대로 해석해 미묘하거나 크게 잘못된 결과를 초래한다.
소프트웨어는 도구(운영 체제, 라이브러리)와 제품(그 도구로 만든 애플리케이션)으로 나눌 수 있다. 개발자는 두 경우 모두 같은 언어를 사용하지만, 요구되는 표현 방식은 크게 다르다. 영어로 표현된 알고리즘은 어색하고, 영어로 명확히 표현된 비즈니스 규칙은 Python이나 Java로 옮기면 이해하기 어려워진다.
자동화가 아무리 진행돼도 숙련된 도구 제작자는 항상 필요하다. 인간의 두뇌는 기계가 따라올 수 없는 통찰을 제공한다. 현재 병목 현상은 기존 언어와 도구를 오랜 시간 익힌 전문가가 되지 않아도, 요구사항을 명확히 표현하고 AI를 안내할 수 있는 별도의 코더 계층이 부족하다는 점이다.
명확한 논리를 잘 표현하는 사람도 있다—예를 들어 변호사는 모호함이 없는 제한된 형태의 영어를 사용한다. AI를 안내하기 위해 비슷하게 제한된 언어가 필요할지도 모른다.
예시
새로운 데스크톱 앱을 만들고 싶다고 가정해 보자. 창 기반 UI를 위해 Python과 PySide를 사용한다. 앱은 전통적인 웹 페이지 레이아웃을 모방한다: 중앙 데이터 영역, 좌·우 사이드바, 제목 표시줄, 푸터. 메뉴 바에는 “About”과 “Exit” 항목을 포함한 단일 메뉴가 있다.
원하는 레이아웃 (예시)


AI 프롬프트 (탄탄하고 모호함 없는 형태)
Using PySide6, create a main window with the following attributes:
- Location: 100,100
- Size: 640,480
- Title: My New App
The window contains 3 rows:
1. First row: panel taking 20% of the window height, containing a label with the text “Header”.
2. Second row: occupies the remaining height and contains three elements:
a. Left panel: takes 20% of the window width, with a label “Left”.
b. Center panel: takes the remaining width, with a label “Center”.
c. Right panel: takes 15% of the window width, with a label “Right”.
3. Third row: panel taking 15% of the window height, containing a label with the text “Footer”.
Menu bar:
- Single “File” menu with two items:
* “About” – when clicked, shows a simple dialog.
* “Exit” – when clicked, terminates the app.
이 프롬프트는 모호함을 피하기 위해 의도적으로 자세히 기술한 것이다. 자연어 사양을 파싱할 컴파일러가 없으므로, 경험을 통해 얻는 문구에 대한 엄격함이 필수적이다. 그렇지 않으면 오류가 눈에 띄지 않고, 변경이 필요할 때 큰 부분을 다시 작성해야 할 수도 있다.