- 소프트웨어 엔지니어링에서 LLM에 과도하게 의존하면 단기 속도는 높아져도 비판적 사고와 문제 해결 능력이 약해질 수 있음
- 잘못된 출력보다 더 큰 위험은 결함 있는 프롬프트를 그대로 받아들이고, 그 결과 기술 부채와 사용자 역량 저하가 빠르게 쌓이는 데 있음
- LLM은 현재 컨텍스트 창을 넘어 프로그램 이론을 기억하거나 내면화하지 못하므로, 설계와 유지보수에 필요한 공유 정신 모델은 인간 엔지니어의 영역으로 남음
- 복잡성은 유지보수 과정에서 계속 늘어나며, 텍스트 수준의 토큰 예측기인 LLM은 불필요하거나 이상한 변경으로 프로그램 엔트로피를 키울 수 있음
- AI는 도구로 쓸 수 있지만 목발처럼 의존해서는 안 되며, 2019년에도 가치 있던 기초 엔지니어링 역량과 깊은 사고에 계속 투자해야 함
LLM 의존이 만드는 엔지니어링 위험
- LLM을 “친구”처럼 부르는 태도는 실제 동반자라기보다, 사용자에게 이익을 준다는 완곡한 표현에 가까움
- 이런 관점의 엔지니어는 대체로 속도를 우선하거나, 속도를 우선하라는 압박을 받음
- LLM은 많은 코드를 빠르게 만들 수 있지만, 그 사용에는 긴 꼬리의 위험이 붙음
코드 생성에서 드러나는 다섯 가지 위험
-
출력 위험
- LLM은 컴파일되지 않는 코드처럼 명백히 틀린 결과를 낼 수 있음
- 더 위험한 경우는 논리 버그처럼 미묘하고 감지하기 어려운 잘못된 결과임
- 프롬프트 작성자가 결과를 평가할 자격이 없을 때 위험이 커짐
- 예로 프로젝트 매니저가 소스 코드를 요청하는 상황이 나옴
-
입력 위험
- LLM은 유도 질문, 잘못된 가정, 불완전한 맥락을 가진 프롬프트에 이의를 제기하지 않음
- 예를 들어 “C#에서 스레드 안전 리스트 구현을 제공하라”는 요청에는 200줄짜리 그럴듯한 코드가 나올 수 있지만, 실제 질문은 “이 코드를 스레드 안전하게 만들려면?”일 수 있음
- 이 경우 답은
System.Collections.Concurrent를 쓰는 한 줄의 코드일 수 있음 - LLM은 요청받지 않았기 때문에 XY Problem의 사례를 인식하지 못함
-
미래 속도 저하
- LLM은 코드베이스 품질을 매우 빠르게 낮출 수 있음
- 강한 가드레일이 없으면 LLM 생성 코드는 겉으로는 멀쩡하지만 내부는 비위생적이고 비기능적인 공간처럼 변할 수 있음
- 이는 일반적인 기술 부채 논의보다 더 긴급한 문제로 취급됨
-
사용자 유아화
- 사고와 문제 해결을 LLM에 넘기는 개인과 조직에서는 재능이 사라질 수 있음
- 시니어 엔지니어는 생산적인 고투를 통해 배우는 기회를 잃으면서 문제 해결력과 비판적 사고가 약해질 수 있음
- 주니어 엔지니어는 그런 역량을 처음부터 개발하지 못하고, 이후 미래의 주니어를 멘토링하기도 어려워짐
- ThoughtWorks Technology Radar Volume 32는 AI 기반 자신감이 비판적 사고를 희생하는 경우가 있다고 다룸
- Coding as Craft: Going Back to the Old Gym은 코딩을 공예로 보존하는 의도적 AI 협업을 강조함
- Thoughts on Thinking는 LLM이 완성된 생각을 줄 수는 있어도 스스로 발전시키는 지적 성장은 주지 못한다고 봄
-
즐거움 상실
- 많은 개발자가 AI 사용이 몰입 상태와 창작의 즐거움을 빼앗는다고 보고함
- AI 생성 코드는 읽고 변경하기 괴로운 코드가 될 수 있음
- 관련 글로 The Hidden Cost of AI Coding가 연결됨
LLM이 대체하지 못하는 두 가지 역량
- 숙련된 엔지니어가 AI 때문에 불필요해질 것이라는 걱정에 대해, LLM이 제공하지 못하는 프로그래밍 역량은 두 가지로 정리됨
- 그 역량은 프로그램 이론과 프로그램 엔트로피임
프로그램 이론: 코드는 프로그램 그 자체가 아님
- Peter Naur의 Programming as Theory Building은 프로그래밍을 문제에 대한 통찰이나 이론을 형성하는 활동으로 봄
- Naur의 관점에서 프로그램은 소스 코드가 아니라 공유된 정신적 구성물, 즉 이론 또는 설계임
- 코드는 그 설계에서 파생되지만, 가치 있는 산출물은 코드보다 설계에 있음
-
두 팀 사고 실험
- 같은 역량의 두 팀 A와 B가 서로 소통하지 않는 별도 방에 있음
- A팀은 터미널 기반 체스 게임 같은 프로그램을 작성하고, B팀은 기다리거나 실제 체스를 둠
- A팀이 끝낸 뒤 소스 코드가 B팀에 전달되고, 두 팀 모두 가상 체스 플레이어 같은 기능을 추가해야 함
- 더 나은 해법을 낼 팀은 A팀임
- A팀은 방금 만든 프로그램의 신선한 정신 모델을 갖고 있음
- B팀에는 그런 모델이 없음
- 프로그램은 초기 생성 이후 계속 수정되므로, 소스 코드만 있고 설계에 대한 내면화된 이해가 없으면 변경 비용이 높아짐
- 큰 기존 코드베이스에 처음 들어갔을 때 생산성이 거의 0에 가깝다가, 프로그램 이론을 머릿속에 적재하면서 생산성이 오르는 경험과 연결됨
-
LLM과 프로그램 이론
- 현재의 LLM은 컨텍스트 창 너머를 기억하지 못하므로 이론, 설계, 정신적 구성물을 숙달할 수 없음
- 프로그램 이론을 얻고 유지할 수 있는 존재는 인간임
프로그램 엔트로피: 복잡성을 줄이거나 저항하는 능력
- 복잡성은 프로그래밍에 맞서는 근본적인 힘이며, 엔트로피와 상관됨
- Fred Brooks의 _The Mythical Man-Month_는 프로그램 구축을 엔트로피 감소 과정으로, 유지보수를 엔트로피 증가 과정으로 봄
- Brooks의 관점에서 초기 구축 이후 프로그램 변경은 소스 코드를 더 복잡하게 만들 수밖에 없음
- 다만 설계와 조화를 이루는 변경은 복잡도 증가 속도를 늦출 수 있음
-
LLM과 프로그램 엔트로피
- LLM은 토큰 예측기이며 텍스트 수준에서만 작동함
- LLM은 아이디어, 다이어그램, 요구사항 명세 같은 개념 수준에서 추론하지 못함
- 큰 코드 덩어리를 LLM에 넣어 본 사람은 LLM이 불필요하고 이상한 변경을 적용하는 경향을 보게 됨
- 대화가 길어질수록 결과가 더 벗어날 수 있음
- 코드의 복잡성을 줄이거나 복잡성에 저항하는 능력은 인간에게 있음
엔지니어링에서 AI를 쓰는 방식
- AI가 엔지니어링 경력을 다음 단계로 올려줄 것이라고 기대했다면, 반대로 작용할 수 있음
- LLM은 무능력을 가속할 수 있지만, 인간 엔지니어링을 대체하지는 못함
- AI의 사업적 매력은 엔지니어링을 상품화해 비용을 줄이는 데 있음
- 다만 해외 엔지니어링 인재 활용이 혼합된 결과를 낳는 것처럼, LLM도 한계와 위험을 동반함
- AI 하이프 사이클은 결국 정점에 이를 수 있음
- 지금 AI를 과도하게 쓰는 기업은 긴 꼬리의 비용을 떠안게 되고, 방향을 바꾸거나 사라질 수 있음
- 엔지니어링에서 인간의 장기 가치 제안은 변하지 않음
- 세상은 여전히 기술 역량과 깊은 사고를 필요로 함
- 그런 역량에 비용을 지불할 것임
- AI는 계속 남겠지만, 도구로 사용해야 하며 목발처럼 의존해서는 안 됨
- 2019년에 가치 있다고 여겨졌던 기본 엔지니어링 역량에 계속 투자해야 함