GN⁺: LLM과 함께 프로그래밍하는 방법
(crawshaw.io)- 지난 1년간 LLM(대규모 언어 모델)을 사용한 프로그래밍 경험을 요약한 글
- LLM은 생산성을 높였으며, 이를 사용하지 않는 프로그래밍으로 돌아가는 것은 어려움
- 주로 Go 프로그래밍 환경에 초점을 맞춰 sketch.dev라는 도구 개발 진행 중
배경
- 새로운 기술에 대한 호기심에서 시작.
- LLM이 질문에 대한 복잡한 답변을 생성하거나 프로그래밍 코드를 작성할 수 있는 능력에 매료됨
- 인터넷이 처음 등장했을 때와 비슷한 흥미와 가능성을 느끼게 함
- 도구가 “대체로 맞는” 코드를 생성할 때 얻는 순이익을 확인하고, 이를 실질적으로 활용하려는 노력
주요 사용 사례
-
자동완성 (Autocomplete)
- 자주 반복되는 코딩 작업을 자동완성으로 처리하여 생산성 향상
- 특히 FIM(Fill-In-the-Middle) 모델은 일상적인 작업에서 필수적
-
검색 대체 (Search)
- 특정 프로그래밍 질문(예: CSS에서 버튼 투명도 설정)을 검색엔진보다 정확하게 답변
- LLM의 답변이 틀릴 수 있지만, 이러한 한계를 수용하며 사용
-
대화 기반 프로그래밍 (Chat-driven Programming)
- 가장 어려우면서도 가치 있는 영역.
- 새로운 파일 생성, 라이브러리 검색 등의 초기 작업을 대신 수행.
- 대화형 프로그래밍의 목표는 현재의 불편함을 줄이고 LLM의 능력을 더욱 사용자 친화적으로 만드는 것
대화형 프로그래밍의 핵심
-
왜 대화를 사용하는가?
- 하루가 지나며 에너지가 떨어질 때 첫 초안을 제공하는 데 유용
- 초기 초안을 보고 수정하는 것이 처음부터 작성하는 것보다 효율적
-
LLM과의 작업 방식
- 명확하고 간결한 작업 목표 설정
- 코드를 읽고 검증하며 수정
- 컴파일러 에러를 활용하여 빠르게 문제 해결
-
효과적인 테스트 작성
- LLM은 테스트 작성에 열정적이며 더 철저한 테스트 환경을 구축 가능
- 예제 기반 테스트 외에도 퍼지 테스트(fuzz test)로 확장 가능
예시: 분수 샘플러
- 목표: Go 언어로 데이터 스트림의 사분위수를 샘플링하는 알고리즘 작성
-
과정
- LLM을 통해 첫 초안 작성
- 컴파일 오류를 수정하며 코드 개선
- 테스트 코드를 재작성하여 더 읽기 쉬운 구조 생성
새로운 코드 구조의 가능성
-
더 작은 패키지, 더 많은 테스트
- 작은 패키지는 코드 맥락을 명확히 제공하여 LLM 및 인간에게 더 유용
- 독립적인 테스트와 컴파일 가능성을 높임
-
예: API 래퍼
- 대규모 공식 라이브러리 대신 필요한 부분만 구현하는 얇은 래퍼 사용 권장
- 유지보수 및 학습 비용 감소
미래 방향: sketch.dev
-
LLM을 위한 Go IDE
- LLM 중심의 프로그래밍 환경을 제공
- 자동화된 테스트 피드백, 컴파일러 에러 수정, Go 모듈 통합 등 지원
- 인간과 LLM 간 협력을 강화하여 더욱 생산적인 환경 제공
Hacker News 의견
-
저자는 이미 세계적 수준의 소프트웨어 엔지니어이며, Google의 전직 직원이자 Tailscale의 공동 창립자/CTO임. LLMs가 그를 더 생산적으로 만든다는 점이 인상적임.
- LLMs는 새로운 아이디어의 초안을 작성할 때 유용함.
- 과거에는 데이터베이스에서 구현을 가져왔지만, 현재는 LLMs가 실시간으로 생성함.
-
LLMs는 작업의 시작 에너지를 줄여줌.
- 새로운 것을 시도할 때의 장벽을 낮춰줌.
- 인간 수준의 깊이는 없지만, 폭넓은 지식을 가지고 있음.
- 다양한 프로그래밍을 하는 사람들에게 유용함.
-
LLMs를 사용할 때는 자신이 잘 아는 분야에서만 사용해야 함.
- 잘못된 부분을 쉽게 식별할 수 있는 경우에만 시간 절약 가능함.
- 검색에 도움이 됨.
-
LLMs는 소프트웨어 개발 도구로서의 가능성이 있음.
- sketch.dev가 첫 시도에서 깨끗한 예제를 제공함.
- 언어의 공식 문서에 맞춰 훈련된 LLMs가 필요함.
- LLMs의 인간화가 불편함.
-
검색 엔진 사용과 유사함.
- 적절한 키워드 사용이 중요함.
-
LLMs 사용에 대한 열망이 없음을 느낌.
- 직접 코딩하는 과정을 즐김.
- LLMs가 비용을 증가시킬 수 있음.
-
프로그래머가 아닌 사람에게 LLMs는 큰 도움이 됨.
- 코드 작성 시간을 크게 단축시킴.
- 개인 프로젝트에 유용함.
-
간단한 애플리케이션을 작성하는 데 LLMs가 유용함.
- 최소 기능 제품을 설명하면 코드 생성 가능함.
- 기술 부채가 빠르게 쌓일 수 있음.
-
취미로 프로그래밍을 하는 사람에게 LLMs가 도움을 줌.
- 프로젝트 구조 설정과 코드 생성에 도움을 줌.
- 그러나 모호한 지시로 인해 문제가 발생할 수 있음.
-
LLMs는 자동 완성과 검색에 주로 사용됨.
- ChatGPT는 기존 코드 최적화에 유용함.