/note/tech

AIがコードを書くなら、もう勉強しなくていい?AI時代に基礎を学ぶ理由

要約:

■ 1. テーマ設定

  • 今日の主題:
    • AIを使って開発することと、基礎を勉強すること、その折り合いをどうつけるか
    • 個人的な感想とポジショントークを交えて話す
  • マシュマロに届いた質問:
    • AIの進歩がすごすぎて、自分でコンピュータのことを勉強しても無駄なのではと思い、モチベーションが消え失せている
  • その気持ちはすごく分かる:
    • 仕事でプログラムを書くとき、エディタを開いて自分でソースコードを書くことはまったくなくなった
    • 設計や方針を考えるときもAIに相談しまくる
    • 自分の知識はいるのか、AIにすべて任せるでもいいのではないか、という疑問が生じる

■ 2. 宮本佳林さんの事例

  • ファン参加型の10時間生配信:
    • 新曲発売に合わせて企画
    • 𝕏のハッシュタグ投稿数やミュージックカードの購入数に応じて、衣装やカメラを解放していく
    • 最後に自宅でMVを再現し、本物と比較する
  • このために作ったシステム:
    • 配信画面に表示する進捗ゲージ
    • 数値を操作する管理画面
    • 𝕏のハッシュタグ投稿数を取得する仕組み
    • 再現動画を本物と比較してAIに採点してもらう仕組み
  • プログラミング経験ゼロでの達成:
    • コードは一行も自分で書いていない
    • それでも実際に10時間配信を成功させた
    • このシステムについては本人がブログに書いている

■ 3. 異常系の難しさ

  • 外部サービスは止まる:
    • 𝕏の投稿数を自動取得する仕組みは、当然外部サービスに依存する
    • 失敗したときどう振る舞うかは、意識して決めない限り決まらない
    • 実際にその失敗を踏むまで、どうなるか分からない
  • 宮本さんの実装:
    • 最後に取得できた数字を表示し続ける
    • 必要に応じて管理画面から手動で修正できる
  • 難しいのは正常系より異常系:
    • エラーが起きたときにどうするかを、考えて、設計して、テストして、トレードオフの中で最善を選ぶ
    • ソフトウェアエンジニアをやっていると分かってくる、いちばん大変なところ
  • 成功の要因:
    • 自分が利用者であり、ゴールが明確だった
    • AIが持つ知識と自身が持つドメイン知識の掛け合わせ
    • 「10時間の生配信を成功させる」という明確なゴールを設定してシステムを作っていった
  • もし自分が今ぺーぺーだったら:
    • エラーが起きたとき、想定外のバグを踏んだときにどうすべきか
    • 気をつけることができただろうかという疑問が残る

■ 4. ジョシュアツリーの話

  • ノンデザイナーズ・デザインブック:
    • デザイナーでない人に向けてデザインの原理原則を紹介してくれている名著
    • その第一章に書いてある内容を、いまだによく覚えている
  • ジョシュアツリーの逸話:
    • 筆者はクリスマスプレゼントに植物の図鑑をもらい、最初に載っていたのが独特の見た目の木だった
    • こんな変な形の木、見たことがあったら気づくに決まっている、一度も見たことがないはずだと考えた
    • 本を持って外に出たら、近所の4軒の庭に生えていた
  • 名前を意識した途端の変化:
    • 「ジョシュアツリー」という名前とその形を意識するようになった途端、それまで一度も見たことがないと思っていた木が実はそこにあったと気づいた
  • 名前を知らないものは見えない:
    • 自分が知らないことは、「調べる必要がある事柄」として認識することもできない
  • 「作りながら学べばいい」の死角:
    • プログラミングの学び方として、作りながら必要なことを学べば良いという意見もある
    • ただ、それだと実はそこにあるはずの問題点に気づけないということもある

■ 5. 基礎固め

  • 社会人大学院に通っていた:
    • 2022年から2025年まで、仕事をしながら通った
    • アメリカのジョージア工科大学のコンピュータサイエンス修士課程
    • 大学院に行く前も、職業エンジニアとしてWeb開発をしたり、Rustを書いてOSSにコントリビュートしたりはできていた
  • 断片的な知識から地図へ:
    • 大学院の前は、働きながら必要なことを学べば良いという状態で、断片的な知識でやりくりしていた
    • OS、ネットワーク、データベース、分散システムといったCSの基礎はおろそかだった
    • 基礎を体系的に学んだことで、それまで持っていた断片的な知識を大きな地図の上にマッピングできるようになった

■ 6. 陳腐化しない基礎

  • 数年後には大きく変わっているもの:
    • 今使っているプログラミング言語やツール、AI関連のサービスなどは変わりゆく
  • さほど変わらないもの:
    • CPUがどう命令を実行するのか
    • OSがメモリやプロセスをどう管理するのか
    • コンパイラがどうコードを変換するのか
    • 複数のコンピュータがどう通信するのか
  • 基礎学習のコストパフォーマンス:
    • 陳腐化せずにずっと役立つため、基礎を学ぶことはコスパがいい

■ 7. AI時代に問いを持つ力

  • 基礎の出番はむしろ増えた:
    • 基礎は不要になるどころか、むしろ使う場面が増えた
    • AIはこちらの指示に対して、もっともらしい実装を爆速で出す
    • そこに対して何を問えるかが焦点となる
  • その実装に何を問えるか:
    • 他のやり方はないのか
    • 利用者が増えたときにどうなりそうか
    • 外部APIが止まったらどうなるのか
    • データはどこに永続化するのか、それは合理的なのか
    • 何かが失敗したときに、それにどう気づくのか

■ 8. まとめ

  • 今日言いたかったことではないこと:
    • AIを使わずに自分でコードを書こう、という話ではない
    • まず何年も勉強してからものを作ろう、という話でもない
  • ものを作り始めるハードルは大きく下がった:
    • 解決したい問題があり、それを具体的な仕様にしてAIと相談しながら進めれば、実際の10時間配信で使えるシステムまで作れる
  • それですべて十分かというと違うかもしれない:
    • ジョシュアツリーの話のように、名前を知らないもの、存在を意識したことがないものはそこにあっても認識できない
    • 問題を表現する言葉や背景にある仕組みを知らなければ、ここを調べた方がいいと気づくことすらできないかもしれない
  • 地図があると問いを持ちやすくなる:
    • 外部APIが止まったらどうなるのだろう
    • このデータはどこに保存されるのだろう
    • 利用者が増えたらどこがボトルネックになるのだろう
    • 失敗したとき、誰がどうやって気づくのだろう
  • 結論:
    • 勉強を終えるまで、作るのを待つ必要はない
    • でも、作ったものを理解するための勉強は、むしろ大事になる
    • まず作る、そして作ったものを理解するために学ぶ