- LLM 코드 생성 도구에 대한 업계의 열광적 수용에 대해, 소프트웨어 개발에서 사고의 중요성을 강조하는 글
- 자동 생성 코드는 비결정적(non-deterministic) 이며 내부 작동이 불투명해, 매번 동일한 결과를 보장하는 기계화와는 본질적으로 다름
- LLM이 기존의 저품질 코드를 학습해 같은 실수를 반복하고, 이를 다시 학습하는 "인간 지네 인식론(human centipede epistemology)" 문제 존재
- 코드 생성을 에이전트에 위임하면 PR 리뷰 시 공유 맥락과 책임 소재가 약화되어 소프트웨어 품질에 악영향
- LLM은 프로토타이핑 등 제한적 용도에서는 유용하지만, 개발자가 사고 자체를 외주화하는 것은 위험하며 이해 없이 유지보수 불가
LLM 코드 생성에 대한 불편함
- 오랫동안 업계 최신 동향을 따라가며 CSS, JS 신기능을 동료들과 공유해온 경험이 있음에도, LLM 기반 코드 생성이 급속히 확산되면서 뒤처지는 듯한 불안감 경험
- Copilot과 Claude를 "spicy autocomplete"(매운 자동완성)와 디버깅 보조 도구로 사용해왔으나, 조금이라도 복잡한 작업을 시키면 결과가 엉망
- 충분한 컨텍스트를 제공해야 하지만 너무 많으면 과부하가 걸리고, "당신은 분산 시스템 전문가입니다"처럼 LLM의 자아를 달래는 긴 프롬프트를 작성해야 하는 상황
- 프롬프트를 다듬는 시간보다 직접 코드를 작성하는 것이 더 빠른 경우가 많음
- 엔지니어들이 코딩이라는 즐거운 작업을 버리고, 리뷰라는 지루한 작업만 남기려 하는 현상에 의문
"산업혁명의 재현"이라는 주장에 대한 반론
- 산업혁명이 기후변화에 기여한 것처럼, AI 데이터센터의 막대한 에너지 소비에서 유사한 패턴 확인
- 모든 전력이 화석연료 기반은 아니지만, "새우 예수" 이미지 생성 같은 데 엄청난 자원 낭비
- 기계화는 상품을 저렴하고 널리 보급했지만 품질 하락을 초래, SHEIN에서 커피 한 잔 값보다 싼 바지를 살 수 있는 현실로 이어짐
- 숙련 노동의 쇠퇴, 저임금 국가로의 공장 이전과 노동자 착취로 악화
- 생성된 코드는 패스트 패션과 유사: 겉보기엔 괜찮아 보이지만 시간이 지나면 구멍투성이, 종종 다른 사람의 코드를 무단 차용, 환경에도 악영향
- 핵심적 차이: 기계화는 매번 동일한 결과를 생산하고 문제 발생 시 내부를 들여다볼 수 있었지만, LLM 출력은 비결정적이고 내부 작동이 불투명
- 매번 다른 결과를 내놓고 환각(hallucination) 이 섞이는 기계화 프로세스는 유용하지 않음
"추상화의 새로운 계층"이라는 주장에 대한 반론
- Java나 Go를 쓰면서 어셈블리를 배울 필요가 없어진 것은 사실이며, 가비지 컬렉션이나 메모리 할당을 런타임이 처리
- 그러나 시스템 아키텍처, 크리티컬 패스에 대한 영향, 유지보수성 대 배포 속도 간의 트레이드오프, 브라우저 호환성, 접근성, 보안, 성능 등은 여전히 개발자가 직접 사고해야 할 영역
- LLM이 가장 큰 피해를 주는 지점은 엔지니어가 소프트웨어 개발에 필요한 사고 자체를 외주화할 때
- LLM은 추론 능력이 없으므로, 개발자도 생각하지 않고 LLM도 생각하지 않으면 아무도 생각하지 않는 상태
-
Horizon 스캔들 사례: Post Office 소프트웨어 버그로 무고한 직원들이 수감되고, 13명이 자살
- 소프트웨어에 대한 책임(accountability) 이 그 어느 때보다 중요
저품질 코드가 근본 문제
- 인간 개발자도 접근성이 떨어지고, 성능이 낮으며, JavaScript에 과도하게 의존하는 코드를 작성하고 있음
- LLM은 이런 저품질 코드를 학습 데이터로 훈련(명시적 동의 없이)받아 동일한 실수를 반복 출력
- LLM이 생성한 저품질 코드를 다시 다른 LLM이 학습하는 순환 구조, 이른바 "인간 지네 인식론(human centipede epistemology)"
- 보조 기술 사용자, 열악한 인터넷 환경의 사용자, 안면인식 소프트웨어의 인종 차별 피해자 등을 고려하면 현재의 소프트웨어 품질은 충분하지 않음
- 인간으로서 학습하고 개선하는 대신, 실수를 사고 없는 알고리듬에 외주화한 상황
PR 리뷰와 공유 맥락의 약화
- FFConf에서 Jessica Rose와 Eda Eren의 발표 핵심 메시지: "직접 작성하지 않은 코드는 이해하지 못하는 코드이며, 이해하지 못하는 코드는 유지보수할 수 없음"
- 동료가 작성한 PR에는 일정 수준의 신뢰와 사고 과정이 담겨 있지만, LLM 생성 PR에는 그런 보장이 없음
- 오픈소스 메인테이너들이 저품질 LLM 생성 PR의 폭증을 경험 중
- 일부 기업이 Slack에서 Claude에게 채팅으로 코드 변경을 요청하고, 자동 생성된 PR을 같은 사람이 승인하는 방식 사용
- 이 경우 책임이 리뷰어 한 명에게만 집중되고, 두 쌍의 눈 중 하나를 잃게 됨
- 팀 내 공유 맥락(shared context) 도 감소
- PR 리뷰는 버그 확인뿐 아니라 코드와 변경사항에 대한 이해 공유 과정
진보 반대가 아닌 과대광고 반대
- LLM 자체를 반대하는 것이 아니라, "인공지능"이라는 브랜딩에 반대
- LLM은 지능적이지 않으며, 머신러닝의 한 형태
- "생성형 AI"는 사람들이 과도한 기대를 거는 매우 잘 만든 마르코프 체인
- 프로토타입이나 와이어프레임, 인터랙티브 데모를 빠르게 만드는 용도에서는 합리적
- 문제는 "바이브 코딩(vibe code)" 으로 프로덕션 수준 소프트웨어를 만들 수 있다고 믿거나, 코딩의 사고 과정 자체를 위임하는 것
- Zed 블로그의 Mikayla Maki 견해: 에이전트는 신뢰하지 않는 외부 기여자처럼 다루고, 이미 수행 방법을 아는 작업에만 사용해야 하며, 코드를 이해하는 것이 필수
- "spicy autocomplete"는 계속 사용하되, 사고를 외주화하지는 않을 것이며, 이 일을 처음 좋아했던 이유를 기억해야 함