# LLM과 함께 프로그래밍하는 방법

> Clean Markdown view of GeekNews topic #18619. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18619](https://news.hada.io/topic?id=18619)
- GeekNews Markdown: [https://news.hada.io/topic/18619.md](https://news.hada.io/topic/18619.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-08T09:43:49+09:00
- Updated: 2025-01-08T09:43:49+09:00
- Original source: [crawshaw.io](https://crawshaw.io/blog/programming-with-llms)
- Points: 36
- Comments: 1

## Summary

필자는 지난 1년간 LLM을 사용한 프로그래밍 경험이 생산성을 크게 향상시켰고, 이제는 사용하지 않는 환경으로 돌아가는 것은 어렵다고 합니다. LLM은 자주 반복되는 코딩 작업을 자동완성으로 처리하여 생산성을 향상하, 특정 프로그래밍 질문에 검색 엔진보다 더 정확하게 답변을 해서 검색을 대체하며, 대화 기반 프로그래밍은 초기 작업을 대신 수행하여 사용자 친화적인 환경을 제공합니다. 또한, LLM을 통해 더 작은 패키지와 독립적인 테스트 환경을 구축하여 코드의 효율성과 유지보수성을 높이는 방향으로 발전하고 있습니다.

## Topic Body

- 지난 1년간 LLM(대규모 언어 모델)을 사용한 프로그래밍 경험을 요약한 글  
- LLM은 생산성을 높였으며, 이를 사용하지 않는 프로그래밍으로 돌아가는 것은 어려움   
- 주로 Go 프로그래밍 환경에 초점을 맞춰 [sketch.dev](https://sketch.dev)라는 도구 개발 진행 중  
  
### 배경  
- 새로운 기술에 대한 호기심에서 시작.  
- LLM이 질문에 대한 복잡한 답변을 생성하거나 프로그래밍 코드를 작성할 수 있는 능력에 매료됨  
- 인터넷이 처음 등장했을 때와 비슷한 흥미와 가능성을 느끼게 함  
- 도구가 “대체로 맞는” 코드를 생성할 때 얻는 순이익을 확인하고, 이를 실질적으로 활용하려는 노력  
  
### 주요 사용 사례  
1. **자동완성 (Autocomplete)**  
   - 자주 반복되는 코딩 작업을 자동완성으로 처리하여 생산성 향상  
   - 특히 FIM(Fill-In-the-Middle) 모델은 일상적인 작업에서 필수적  
  
2. **검색 대체 (Search)**  
   - 특정 프로그래밍 질문(예: CSS에서 버튼 투명도 설정)을 검색엔진보다 정확하게 답변  
   - LLM의 답변이 틀릴 수 있지만, 이러한 한계를 수용하며 사용  
  
3. **대화 기반 프로그래밍 (Chat-driven Programming)**  
   - 가장 어려우면서도 가치 있는 영역.  
   - 새로운 파일 생성, 라이브러리 검색 등의 초기 작업을 대신 수행.  
   - 대화형 프로그래밍의 목표는 현재의 불편함을 줄이고 LLM의 능력을 더욱 사용자 친화적으로 만드는 것  
  
### 대화형 프로그래밍의 핵심  
- **왜 대화를 사용하는가?**  
  - 하루가 지나며 에너지가 떨어질 때 첫 초안을 제공하는 데 유용  
  - 초기 초안을 보고 수정하는 것이 처음부터 작성하는 것보다 효율적  
  
- **LLM과의 작업 방식**  
  1. 명확하고 간결한 작업 목표 설정  
  2. 코드를 읽고 검증하며 수정  
  3. 컴파일러 에러를 활용하여 빠르게 문제 해결  
  
- **효과적인 테스트 작성**  
  - LLM은 테스트 작성에 열정적이며 더 철저한 테스트 환경을 구축 가능  
  - 예제 기반 테스트 외에도 퍼지 테스트(fuzz test)로 확장 가능  
  
### 예시: 분수 샘플러  
- **목표**: Go 언어로 데이터 스트림의 사분위수를 샘플링하는 알고리즘 작성  
- **과정**  
  1. LLM을 통해 첫 초안 작성  
  2. 컴파일 오류를 수정하며 코드 개선  
  3. 테스트 코드를 재작성하여 더 읽기 쉬운 구조 생성  
  
### 새로운 코드 구조의 가능성  
- **더 작은 패키지, 더 많은 테스트**  
  - 작은 패키지는 코드 맥락을 명확히 제공하여 LLM 및 인간에게 더 유용  
  - 독립적인 테스트와 컴파일 가능성을 높임  
  
- **예: API 래퍼**  
  - 대규모 공식 라이브러리 대신 필요한 부분만 구현하는 얇은 래퍼 사용 권장  
  - 유지보수 및 학습 비용 감소  
  
### 미래 방향: sketch.dev  
- **LLM을 위한 Go IDE**  
  - LLM 중심의 프로그래밍 환경을 제공  
  - 자동화된 테스트 피드백, 컴파일러 에러 수정, Go 모듈 통합 등 지원  
  - 인간과 LLM 간 협력을 강화하여 더욱 생산적인 환경 제공

## Comments



### Comment 33117

- Author: neo
- Created: 2025-01-08T09:43:49+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42617645) 
- 저자는 이미 세계적 수준의 소프트웨어 엔지니어이며, Google의 전직 직원이자 Tailscale의 공동 창립자/CTO임. LLMs가 그를 더 생산적으로 만든다는 점이 인상적임.
  - LLMs는 새로운 아이디어의 초안을 작성할 때 유용함.
  - 과거에는 데이터베이스에서 구현을 가져왔지만, 현재는 LLMs가 실시간으로 생성함.

- LLMs는 작업의 시작 에너지를 줄여줌.
  - 새로운 것을 시도할 때의 장벽을 낮춰줌.
  - 인간 수준의 깊이는 없지만, 폭넓은 지식을 가지고 있음.
  - 다양한 프로그래밍을 하는 사람들에게 유용함.

- LLMs를 사용할 때는 자신이 잘 아는 분야에서만 사용해야 함.
  - 잘못된 부분을 쉽게 식별할 수 있는 경우에만 시간 절약 가능함.
  - 검색에 도움이 됨.

- LLMs는 소프트웨어 개발 도구로서의 가능성이 있음.
  - sketch.dev가 첫 시도에서 깨끗한 예제를 제공함.
  - 언어의 공식 문서에 맞춰 훈련된 LLMs가 필요함.
  - LLMs의 인간화가 불편함.

- 검색 엔진 사용과 유사함.
  - 적절한 키워드 사용이 중요함.

- LLMs 사용에 대한 열망이 없음을 느낌.
  - 직접 코딩하는 과정을 즐김.
  - LLMs가 비용을 증가시킬 수 있음.

- 프로그래머가 아닌 사람에게 LLMs는 큰 도움이 됨.
  - 코드 작성 시간을 크게 단축시킴.
  - 개인 프로젝트에 유용함.

- 간단한 애플리케이션을 작성하는 데 LLMs가 유용함.
  - 최소 기능 제품을 설명하면 코드 생성 가능함.
  - 기술 부채가 빠르게 쌓일 수 있음.

- 취미로 프로그래밍을 하는 사람에게 LLMs가 도움을 줌.
  - 프로젝트 구조 설정과 코드 생성에 도움을 줌.
  - 그러나 모호한 지시로 인해 문제가 발생할 수 있음.

- LLMs는 자동 완성과 검색에 주로 사용됨.
  - ChatGPT는 기존 코드 최적화에 유용함.
