36 ポイント 投稿者 GN⁺ 2025-01-08 | 1件のコメント | WhatsAppで共有
  • 過去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の協力を強化し、より生産的な環境を提供

1件のコメント

 
GN⁺ 2025-01-08
Hacker Newsの意見
  • 著者はすでに世界水準のソフトウェアエンジニアであり、Googleの元社員で、Tailscaleの共同創業者/CTOでもある。LLMsが彼の生産性をさらに高めている点が印象的。

    • LLMsは新しいアイデアの下書きを作るときに有用。
    • 以前はデータベースから実装を持ってきていたが、今はLLMsがリアルタイムで生成する。
  • LLMsは作業を始めるためのエネルギーを減らしてくれる。

    • 新しいことを試すときのハードルを下げてくれる。
    • 人間レベルの深さはないが、幅広い知識を持っている。
    • さまざまなプログラミングをする人々に有用。
  • LLMsを使うときは、自分がよく知っている分野でのみ使うべき。

    • 間違っている部分を簡単に見分けられる場合にのみ、時間を節約できる。
    • 検索に役立つ。
  • LLMsはソフトウェア開発ツールとしての可能性がある。

    • sketch.devは最初の試みとしてクリーンな例を提供している。
    • 言語の公式ドキュメントに合わせて訓練されたLLMsが必要。
    • LLMsの擬人化は不快。
  • 検索エンジンの利用と似ている。

    • 適切なキーワードを使うことが重要。
  • LLMsを使いたいという強い気持ちは感じない。

    • 直接コーディングする過程を楽しんでいる。
    • LLMsはコストを増やす可能性がある。
  • プログラマーではない人にとって、LLMsは大いに役立つ。

    • コードを書く時間を大幅に短縮する。
    • 個人プロジェクトに有用。
  • 簡単なアプリケーションを書くのにLLMsは有用。

    • 最小機能製品を説明すれば、コードを生成できる。
    • 技術的負債が急速に積み上がる可能性がある。
  • 趣味でプログラミングをする人にとって、LLMsは助けになる。

    • プロジェクト構造の設定とコード生成に役立つ。
    • ただし、あいまいな指示によって問題が発生することがある。
  • LLMsは主に自動補完と検索に使われている。

    • ChatGPTは既存コードの最適化に有用。