現在のブログ
ゲーム開発ブログ (2025年~) Gamedev Blog (2025~)
レガシーブログ
テクノロジーブログ (2018~2024年) リリースノート (2023~2025年) MeatBSD (2024年)
 
        【研究】AIはプログラマーの速度を下げる
研究論文(英語のみ)が発表され、AIを使用する開発者は使用しない開発者に比べて19%遅い事が示されました。
今日の技術業界の殆どのトレンド追随者にとって、これは衝撃的なニュースです。
然し、実際の開発者であるあたし達にとっては、此れは最初から明らかでした。
其の理由を説明します。

LLMの目的
LLM、詰り大型言語モデル(英語では「Large Language Model」)は、人間の様なテキストを処理・生成する為に設計されており、翻訳、要約、対話等のタスクで優れています。
当初はプログラミング用に作られた物ではありませんでしたが、コード生成能力が広く採用されています。
但し、限界もあります。
然し、コードにも使える事が分かりました。
プログラミングを理解している人なら、生成されたコードに欠陥があることが直ぐに分かりますが、正直な所、今日では「開発者」と自称する人の多くを含む殆どの人がプログラミングを理解していません。
其の理由は必ずしもAIのせいではなく、1990年代から積み重ねてきた根本的な複雑さに起因しますが、其れは次の私のブログで語る話題で、きっと多くの人を怒らせるでしょう。
とはいえ、簡単に怒る様な人なら、抑々此のブログを読まないでしょう。
プログラマーとしての私の経験
プログラミングにおいてAIは必ずしも悪い物ではありません。
新しいプログラミング言語を分かり易く学ぶのに役立ち、オンラインチュートリアルよりも優れている場合が多く、フィードバックや更なる説明を求める事で完全に理解出来ます。
例えば、あたしはAIを使ってGo言語のプログラミングを学びました。
C、C++、PHPに似ていますが、コードの書き方が大きく異なります。
例えば、i := 0 や var i int ではなく int i = 0; です。
ZigやRustの開発者には馴染みのある物で、何故か値の後に型を書くスタイルです。
此処でのポイントは、最終的にAIの支援から離れ、新しいスキルを使って現実のソフトウェアを構築する事です。
然し、よく見られるのは、人が全ての事においてAIに依存し続け、思考プロセス全体をアウトソーシングしてしまうことです。
其の一方で、そうした開発者が高給の仕事を得易いのは、HR部門が此れらの「雰囲気コーダー」と同じくらいプログラミングについて何も知らないからです!
あたしは何年も前から、AIは人間を置き換えず、AIは未来ではなく一過性のハイプだと主張してきました。
今でも、殆どの人はあたしが頭がおかしいと思っています。
まあ、TikTokの脳死したバカの様に何でも盲目的に繰り返さないでごめんね、といった所でしょうか・・・
研究の要点
研究では生産性の低下の原因を明確に結論づけられていませんが、低下が起こっている事は確認されています。
プロンプトの作成、生成の待ち時間、AI生成コードのレビューと修正に費やす時間が、自動化で節約される時間を上回っています。
成熟したオープンソースリポジトリの高品質基準では、AIの提案に多くの手動監視と改良が必要で、効率が低下します。
特定のツール(例:Cursor)に慣れていない場合、例えLLMの経験があっても非効率になります。
大規模リポジトリでの実際のタスクは深いコンテキストを必要とし、AIはこれを効果的に扱うのが難しく、デバッグ時間が増加します。
AI生成コードの不正確さによる頻繁な拒否や修正が、全体の作業負担を増やします。
「AIはボイラープレートコードを減らす為だけに使っている」
其れに対するあたしの解決策は、コピペです。
毎回此れをやりたくないのはよく分かります:
#pragma once
class MyClass {
  public:
    MyClass();
    ~MyClass();
  private:
};然し、此れはNeovimの様なエディタでも簡単に自動化出来ます。
例えば:
vim.keymap.set("n", "ch", function()
  local className = vim.fn.input("クラス名:")
  local namespace = vim.fn.input("ネームスペース(任意):")
  local lines = { "#pragma once", "" }
  if namespace ~= "" then
    table.insert(lines, "namespace " .. namespace .. " {")
    table.insert(lines, "  class " .. className .. " {")
    table.insert(lines, "    public:")
    table.insert(lines, "      " .. className .. "();")
    table.insert(lines, "      ~" .. className .. "();")
    table.insert(lines, "")
    table.insert(lines, "    private:")
    table.insert(lines, "  };")
    table.insert(lines, "} // namespace " .. namespace)
  else
    table.insert(lines, "class " .. className .. " {")
    table.insert(lines, "  public:")
    table.insert(lines, "    " .. className .. "();")
    table.insert(lines, "    ~" .. className .. "();")
    table.insert(lines, "")
    table.insert(lines, "  private:")
    table.insert(lines, "};")
  end
  local curline = vim.api.nvim_win_get_cursor(0)[1]
  vim.api.nvim_buf_set_lines(0, curline, curline, false, lines)
  vim.cmd("normal! ggdd")
end, { noremap = true, silent = true })「ch」を押した後の結果を見るビデオはこちら:
もう一つの便利なスニペット:
vim.keymap.set(
  "n", "co", 'istd::cout << "" << std::endl;<Esc>3Ba'
)此れを使えば、C++でstd::cout << "" << std::endl;を書く時間を、「co」を押すだけで大幅に節約出来ます。
ほら、AI契約料費を節約出来ました!
どうすればいい?
AIに過度に依存しない最善の方法は、プログラミングを学ぶ事です。
既にAIを使っている場合、AIにコードを書かせるのではなく、コードを見せて其の動作を説明させ、自分で其れを入力してコンパイルし、結果を確認して下さい。
「どうやって」ではなく「何故」を尋ねて下さい。
プログラミング初心者の場合、線形代数を学ぶと、どのプログラミング分野でも大いに役立ちます。
以上