はじめに
新しい言語やフレームワークを学ぶとき、AI がコードを書いてくれる時代になりました。
最近では、ループエンジニアリングとか「如何にして AI に効率よくコードを書かせるか」などが議論されています。
この状況下で、手を動かしてコードを書くという従来の学習が本当に必要なのかという疑問を持ちました。
for 文や if 文のような基本的な制御構造の振舞いさえ理解していれば、あとは AI に任せれば良い、という発想です。
この記事では、自分なりに思考を巡らせて1つの結論にいたりました。しかし、それは自分の考えであって、最終的な結論は「一概には言えない」だと思っています。
職業エンジニアの数多ある考えの1つと思って頂ければなと思います。
「手で実際に書いて学ぶ」が必要ないのでは?と思う理由
理由は大きく2つあります。
AI がコードを生成する以上、言語ごとの文法を覚える必要がない
for 文や if 文のような制御構造の振る舞いさえ理解していれば、その言語が Python だろうが GO だろうが、Rust だろうが実装の詳細は AI に任せられます。
わからないコードに直面したら、その場で AI に聞けば良い
わからないコードや実装に直面したら、都度 AI に質問して、理解・学習すればよいという考えです。
質問して答えを得られるのであれば、あらかじめ手を動かして経験を積んでおく必要はない、言語の具体的なコードの書き方は知らなくても良いのではないか、という発想です。
結論
結論としては、手でコードを書く学習は、規模を縮小しつつも必要である。
この「規模を縮小」というのは、目指す到達点というのは変化したということです。
従来のように、補完にはたよりつつも、何も見ずにコードをスラスラ書けるようになる必要はなくなったと考えています。必要なのは、AI が生成したコードを読んで、その内容を他人に説明できる、あるいはその妥当性について判断できるレベルの理解だと思います。
理由
理由は主に3つ
分かったつもりになりやすい
読むだけだと「分かったつもり」になりやすいという点。
これは人間の認知の性質です。
心理学ではこれを流暢性の錯覚と呼びます。 解答を見ながら問題を解くと理解した気になりますが、実際に自分だけで同じ問題を解こうとすると手が止まることが多いものです。 コードを読んで理解したつもりでも、似たコードを自分で書こうとして初めて、理解が浅い箇所に気づきます。
バグの匂い
AIの出力に含まれる誤りや不備に気づく力が、実際に手を動かした経験の積み重ねから育つという点です。テストや振る舞いは合っていても、気づかないバグに気づくには手で書いた方が良いと思います。
例えば Python コードの場合、
for i in range(len(arr) - 1):
print(arr[i])
「配列をループしてる」という概念理解だけでは、これが最後の要素を1つ読み飛ばすバグだと気づけません。range() の終端が「未満」なのか「以下」なのか、という細部の文法知識がないと、AIが出したこのコードのバグを見抜けないのです。
同様に、パスワードを平文のまま保存している、同じ処理を無駄に繰り返しているといった、動くが望ましくないコードの違和感に気づく力も、手を動かした経験に支えられています。
記憶の定着
認知心理学における望ましい困難という現象です。 多少の苦労を伴う練習の方が、記憶に定着しやすいという考え方です。 他人が書いたコードを読むだけよりも、自分で書いて、エラーを出して、直すという一連の過程を経た方が、記憶に残りやすくなります。
最後に
数学の教科書を読んだところで、数学の問題を解くのは難しいのと同じように、AIが実装・出力したコードを読んだところで、力にはならないのではないかなと思いました。
「自分はこういう意見だ」みたいなのがあれば、ぜひコメント欄に投稿ください。