HexWolf Blog

AI時代のブラックボックスとコードリーディング力

はじめに

AIという便利な力を使うとプログラミングの知識を正しく身につけられない、という意見をよく耳にします。
たしかに関数やオブジェクト、if elseforなど基礎構文を知らない人がいきなりAIに丸投げでコーディングをするのは怖いという意見には初学者の私としても賛同します。

しかし、基礎をある程度終えた人が、それでも机上の写経を続ける意義は実際のところあまり無いように感じました。

物の仕組みを理解しなくても物を扱える

極論ですが、我々の商売道具であるパソコン1つ取っても、CPUの動作原理である命令実行サイクル(Fetch Decode Execute)は知っていても、CPU自体がどのようにして製造され、どのような技術が盛り込まれているかまでは知りません。
戦闘機のパイロットも非常に優秀な方達ですが、機体にはブラックボックスがあり、技術者やパイロット自身もその中身を開けて見ることはできません。

これは開発者にとってのフレームワークも同じはずです。多くのエンジニアはReactやRailsの内部実装を完全に理解しているわけではありません。このように動くという信頼の上に成り立つAPIを使って製品を作っています。

つまり対象そのものの仕組みを知らなくても、経験則や信頼できるインターフェースさえあれば、十分に物を動かすことができるのです。

プログラミングもある程度は同じ

プログラミングも長い歴史の中で、型にはめることで安全な設計ができるフレームワークのように、中身がブラックボックスでも様々な製品を作れるようになりました。AIによるコーディング補助も、この延長線上にあると捉えることができます。

一方で、AIの仕組み上どうしても足りない部分もあります。設計が薄いとAIは推測で実装を進めますし、学習時点のスナップショットの都合上、数ヶ月前の知識を最新のものとして提示してくることがあります。
エンジニアである我々は、これに対応するためにコードリーディング力と新規技術のキャッチアップ力を常に磨き続ける必要があると思います。

だからこそ、私は初学者はAIでコーディングをすべきかという問いに対してはこう考えています。
基礎文法をある程度理解したなら、そこから先はAIを積極的に活用して問題ない。ただし、コードリーディング力と新規技術へのキャッチアップ力はAIに委ねずに自分で鍛え続ける必要があると思います。

これは私自身が初学者であるからこそ至った考えです。

コードリーディングは必須技能

初学者もAIに補助してもらいながらコードを書き進めることは十分可能です。
ただし、その際に必要なのはAIに書かせる力ではなくAIが書いたコードを読み解く力です。

AIが出力したコードをそのまま貼り付けて動いたで終わらせると怖いです。

  • なぜそのロジックで動くのか
  • 意図通りの実装になっているか
  • 潜在的なバグを埋め込んでいないかを自分の目で追えるかどうか

という視点が大事になります。

ここが甘いと、AIの出力を検証できないままプロダクトに組み込むことになり、結局動いているけれど中身が分からないコードを量産します。
コードリーディング力は、AI時代においてむしろ以前より重要度が増した技能だと感じています。

コードリーディング自体もAIに補助してもらえるか

ここまでコードリーディング力は自分で鍛えるべきと書きましたが、読み解く過程そのものにAIを使うことは可能です。
知らない構文の意味を聞いたり、処理の流れを要約してもらったり、疑問点を壁打ちする相手として使う分には、理解の入り口として十分役立ちます。

ただし注意したいのは、AIの説明を鵜呑みにしてしまうと、今度はAIがそう言ったから正しいという別のブラックボックスに依存することになる点です。
説明してもらった内容を実際のコードと照らし合わせ、なぜそうなるのかを自分の頭で納得できるかどうかが最終的な検証になります。

つまりAIは読解の補助輪としては使えますが、最後に自分の目で追って納得する工程まで委ねてしまうと、コードリーディング力そのものは育ちません。

新規技術のキャッチアップ力も大事

AIの知識はスナップショットのため、それ以降の技術が反映されないことが往々にしてあります。もちろんAI自身が最新の情報を調べるということも可能ですが、プロンプトを書くエンジニア自体がそんな最新技術があることを知らないとどこかのタイミングで見逃します。

以前、ReactでuseStateを大量に並べて状態管理をする実装をAIに提案されたことがありましたが、現在ではuseReducerやカスタムHooksを使って状態管理をひとまとめに整理するほうが実践的な書き方です。

AIが提示してくる情報が必ずしも今の正解とは限らない、ということを実体験として学びました。だからこそ、AIの提案を鵜呑みにせず、自分でも最新のプラクティスを追いかける姿勢が欠かせないと思います。

おわりに

とはいっても新規技術のキャッチアップ力よりも、コードリーディング力って、具体的に何を養えばいいのかは悩ましいところです。

  • なぜそのロジックで動くのかを追える力
  • 依存関係を追う力(この関数はどこから呼ばれ、変更が何に影響するか)
  • 差分を読む力(AIが生成した変更のどこが本質でどこが余計か)
  • 読まずに動くコードと、読んで理解して動くコードを見分ける目力

あたりが大事だと思いますがこのAI全盛にどうやってコードリーディングを養うかは少し悩ましい所です。

この養い方については、また今後の記事で掘り下げてみようと思います。