プログラマ vs AI 生存競争

mizchi

NextBeat 第一回プログラミング教育について語る会

About

話したいこと

  • 今一度、共同作業者・競争相手としてAIを見直す
    • 「俺達はAIに勝てるのか?」
    • 2024/09 (chatgpt o1-preview) の世界観
    • AI ≒ LLM
  • 背景
    • 機械学習はにわか。主にユーザー目線
    • 前職: 非エンジニア向けコード生成パイプラインのR&D
    • 大学の研究室で教育工学を少し(暗黙知記述、オントロジー)

もう一度向き合う

プログラマ vs AI

プログラマ vs AI

というのをAIに考えさせた図

  • https://napkin.ai
  • PNG Export したら日本語描画できなかった
  • このスライドの図は適当に放り投げたもの

プログラマとしてのAIの強み

  • 金さえ払えば、高速
  • 金さえ払えば、24時間稼働
  • GitHub のソースコードと一般的なアルゴリズムを丸暗記
  • 寝て待ってたらどんどん賢くなる

「AI の弱み」…を語らない。なぜなら

  • 「(任意)ができない」は無限に言える
  • おそらくいずれ解決するもの
    • 精度(IQ)
    • ハルシネーション頻度
    • コンテキストウィンドウ
    • 知識構造モデル(RAG, プロンプトハック, 広義のオントロジー等)
    • コスト?
  • 最終的には 試行錯誤の手数で人間のプログラマを圧倒すると予想

例: o1-preview で A*

例: o1-preview でRAFT(分散合意)

https://chatgpt.com/share/66eaebbf-0500-800d-a1ba-40b22932d40a

  • TypeScript + WebWoker でやらせてみた
  • 自分がまだ RAFT を理解してないので、正解かどうかはわからない
  • 生成されたコードを動かしてみると、次のステップに進めるかも、程度

例: o1-preview でグリッドレイアウト抽出

https://chatgpt.com/share/66ed0c6b-afc4-800d-b6fa-8961e29757fe

  • 「ルートから全てを一つのCSSの入れ子グリッド定義できるんでは?」という思いつきをやらせた
  • まだ動かしてないが、既に想定した手間の8割は削減できてる
  • あとはレンダリング結果を与えて対話的に調整(して実現するかどうかは不明)

そもそもプログラマは

何をしていたのか?

高水準なプログラミング概念

  • 要件をデータとロジックに分解
  • 環境を抽象したAPIに処理をマッピング
  • 制御構造で環境の操作を記述
    • 変数・束縛
    • 条件分岐
    • 繰り返し
    • 関数
  • 目の前にはない潜在的な状態分布と処理フローを抽象思考する能力

非エンジニア向けツール開発者の視点

  • 静的データは誰でも簡単に理解できる
    • 文字列を書き換えることはできる
  • GUI がロジックを制御していると誤認する
    • フォームに要素を増やしてもサーバーロジックは増えない
  • ユーザーに制御構造のモデルがないのでロジックを言語化できない
    • 仮に作れても、ワンショットの単機能画面まで
    • 制御構造を変更する手順を言語化できず、変更できない

問題: 認識フレームの問題

  • プログラマじゃない人でもAI対話用にJSONを学ぶのが最高効率という提案 という記事を(試しに)書いた
    • 趣旨: 「構造化データでAIと話すとコスパいいよ」
  • わかったこと
    • 「学習」どころか「認識」を嫌ってAIに期待する人がいる
    • 一部の人は「構造」や「ロジック」が存在すること自体を認識できていない
    • AI でプログラミング不要になる主張する人(驚き屋)は、事前条件を認識するための思考回路がない

予想: 人間側がボトルネックになる

  • 「プログラマになる」 とは環境の制約下で自己の意図を分解しロジックと結びつける思考訓練を受けること、と定義できる
  • 「実装に必要な要件を洗い出してチェックリストを埋める」は、おそらく人間のハルシネーションを排除する作業
    • 今の生成コードは未定義領域をハルシネーションで統計的多数に倒している
  • 一定以上の複雑度でAIが人間にロジック説明を要求するはず
    • 入力に対する分岐や異常系を最終的に人間が言語化できる必要

ハルシネーション非許容度(%)みたいな概念?

  • ブラックボックスが意図通り完了する確率みたいな概念
    • 今のプログラマは 97~100% の水準 (人次第。適当です)
    • 今の生成コードは 30~60% (適当です)
    • 将来: 90~%?
  • 実際のタスク解決はパイプラインで、最終的にステップ数の累積
  • あなたの会社・サービスはどこに設定されると思いますか?
    • 例: 0.9^5 ≒ 0.59 の成功率で「価値あるサービス」と言える?

予想: AI 時代のプログラミングパラダイム

  • データ構造の理解
    • 今と一緒
    • プログラマでなくとも、最低限 JSON 相当の理解が必要
  • 評価ステップや制御構造/アルゴリズムの理解
    • 今と一緒
    • YouTube の動画教材になるかもね
  • ロジックの記述方法
    • より観念的に、ビジュアル重視にローコード化する?
    • 「テキスト」エディタではないかも

自分の主張

  • 単純なコーディング力という観点で、人間が負けるのは既定路線
  • AI前提で「プログラミング」と「プログラマ」が再定義される
  • 依然として、概念獲得抜きに「プログラマ」になることはできない
    • 学習コストは大幅に下がるが…
    • (AI驚き屋はここがわかってない)

おわり

  • 現時点でAIに注目できないのは熱意が足りない
  • 現時点で仕事に使えると思ってるのは思慮が足りない
  • 都合がいい側面を切り取って「AIは~ができない」は現状維持バイアスの人間賛美ポルノ!!!

=> 現状維持バイアスではなく、雇用競争力の観点でAIと人間のプログラマを比較してヒリついておく

--- ## 今の「AIと対等に勝負する」前提 - 人間はエラーを確認せずにコードを書いているのか? => NO - 人間はプレビューを確認せずにCSSを書けるか? => NO - 人間はハルシネーションする? => YES AIは十分に環境データを取得できていない。 まず人間と同じ情報を持たせてから判断すべき

- 認識の枷を外すには、人間側が学習して認識するしかない