36P by neo 2달전 | ★ favorite | 댓글 1개
  • 지난 1년간 LLM(대규모 언어 모델)을 사용한 프로그래밍 경험을 요약한 글
  • LLM은 생산성을 높였으며, 이를 사용하지 않는 프로그래밍으로 돌아가는 것은 어려움
  • 주로 Go 프로그래밍 환경에 초점을 맞춰 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 간 협력을 강화하여 더욱 생산적인 환경 제공
Hacker News 의견
  • 저자는 이미 세계적 수준의 소프트웨어 엔지니어이며, Google의 전직 직원이자 Tailscale의 공동 창립자/CTO임. LLMs가 그를 더 생산적으로 만든다는 점이 인상적임.

    • LLMs는 새로운 아이디어의 초안을 작성할 때 유용함.
    • 과거에는 데이터베이스에서 구현을 가져왔지만, 현재는 LLMs가 실시간으로 생성함.
  • LLMs는 작업의 시작 에너지를 줄여줌.

    • 새로운 것을 시도할 때의 장벽을 낮춰줌.
    • 인간 수준의 깊이는 없지만, 폭넓은 지식을 가지고 있음.
    • 다양한 프로그래밍을 하는 사람들에게 유용함.
  • LLMs를 사용할 때는 자신이 잘 아는 분야에서만 사용해야 함.

    • 잘못된 부분을 쉽게 식별할 수 있는 경우에만 시간 절약 가능함.
    • 검색에 도움이 됨.
  • LLMs는 소프트웨어 개발 도구로서의 가능성이 있음.

    • sketch.dev가 첫 시도에서 깨끗한 예제를 제공함.
    • 언어의 공식 문서에 맞춰 훈련된 LLMs가 필요함.
    • LLMs의 인간화가 불편함.
  • 검색 엔진 사용과 유사함.

    • 적절한 키워드 사용이 중요함.
  • LLMs 사용에 대한 열망이 없음을 느낌.

    • 직접 코딩하는 과정을 즐김.
    • LLMs가 비용을 증가시킬 수 있음.
  • 프로그래머가 아닌 사람에게 LLMs는 큰 도움이 됨.

    • 코드 작성 시간을 크게 단축시킴.
    • 개인 프로젝트에 유용함.
  • 간단한 애플리케이션을 작성하는 데 LLMs가 유용함.

    • 최소 기능 제품을 설명하면 코드 생성 가능함.
    • 기술 부채가 빠르게 쌓일 수 있음.
  • 취미로 프로그래밍을 하는 사람에게 LLMs가 도움을 줌.

    • 프로젝트 구조 설정과 코드 생성에 도움을 줌.
    • 그러나 모호한 지시로 인해 문제가 발생할 수 있음.
  • LLMs는 자동 완성과 검색에 주로 사용됨.

    • ChatGPT는 기존 코드 최적화에 유용함.