AIで日本語で指示をあたえればプログラムを作ってくれるようになって、プログラミング知識がなくても誰でもプログラムが組めるとか、プログラマが不要になるとかいう話が盛り上がってますね。
けど、実際にプログラマをやって、AIコーディングエージェントを使っていれば、プログラミング知識がなくても可能な領域というのはそんなに広くないことを感じていると思います。
たとえば、ほぼプロンプト一発で作ってもらった刺身タンポポゲームがあります。
このプロンプトはこんな感じです。
刺身にタンポポを乗せるゲームをJavaのSwingで作って。 刺身かネコが0.75秒ごとに表示されます。 刺身は、白い皿に、赤い板状の切り身が3枚のっています。 ネコは顔だけ表示されます。かわいくおねがいします。 表示のシーケンスは次のようになります。 共通の影が右から中央に0.1秒で移動します。 刺身かネコが0.5秒表示されて、0.1秒で左の画面外に移動します。0.05秒は何も表示されません。 タンポポは、黄色くて花びらが12枚ある花です。キーを押すと上から降りてきて置けます。 刺身が表示されているときにタンポポを置くと「成功」と表示して点になります。 なにもないときに置くと減点です。 ネコに置くと、にゃーと表示されてライフが減ります。 さしみにタンポポ置けなくてもミスで「失敗」と表示。 判定はキーを置いた時点で行います。 ライフは最初3つあり、0になるとゲームオーバー。 ゲームオーバー時に、成功、失敗、ねこの回数を表示して。 フォントはsans serifで。timerのあいまいな参照に気を付けて。
これは日本語での宣言的プログラミングですね。
表示の調整はコードをいじったけど、プロンプトでも可能だと思います。
ちゃんと実用にそった処理を行おうとすると、どんどんこういった宣言的プログラミングが大事になっていきます。
それにもかかわらず、プログラミング知識不要とかプログラマが不要になるとか言われるのは、世の中でいう「プログラミング知識」にそもそも誤解があるんではないかと思います。
「プログラミング言語の文法を知ってればプログラムが書ける」という誤解です。
そういう誤解があるから「プログラミング言語の文法を知らなくていいのであれば誰でもプログラムが書ける」となっているんだと思います。
それは、世の「プログラミング入門書」を見るとわかります。
ほとんどの「プログラミング入門書」が、単にプログラミング言語の文法とライブラリを解説したものになっています。
けれども、多くの人が「入門書が終わったのにプログラムが組めるようにならない」と悩んでいます。
実際のところ、文法を勉強しただけではプログラムが組めるようにはならないですね。
プログラミングというのは知識があればできるものではなく技能です。
AIは、プログラミング知識がなくてもプログラムを作れるかもしれないけど、プログラミング技能は必要です。
プログラミングの勉強をしてなくても他の職能の転用で、ある程度のプログラミング技能がある人はいますが、プログラミング技能を得るための近道はプログラミングを学ぶことです。
プログラミング技能とは何かと一言でいうのは難しいですが、大事なところは「書くこととコンピュータの振る舞いを結び付ける」ということです。
そのためには、どのように書けばどのようにコンピュータが動くか、コンピュータにはどのような制約があるか、どのような処理が可能かといったことを実感する必要があります。
プログラミング言語は最初の入り口というだけで、書いたことと動きの対応の実感、そもそもプログラムとして書ける処理、書けるけど動かせない処理の把握が重要です。
なので「プロになるJava」では最初にJava用シェルであるJShellを使って、一行入力して実行結果を見せて、入力とコンピュータ動作の対応を実感することから始めています。 また、アルゴリズムや計算複雑性という話をとりこんで、「言語の文法を知っただけでプログラムが組めるわけではない」ということを伝えるようにしています。
以前に、「必要なのはプログラミング知識ではなくコンピューティング知識」と書いたのですけど、プログラミング知識の大部分は「コンピューティング知識」なんですよね。
AI時代に必要なのはプログラミング能力ではなくコンピューティング能力 - きしだのHatena
「コンピューティング知識」を身につける近道もプログラミングを勉強することです。
ということで、「AIでだれでもプログラムを組める」「AIでプログラマが不要になる」というのは、「プログラムというのはプログラミング言語の文法しってれば書ける」という誤解に基づいて「プログラミング言語の文法を知らなくていいならだれでもプログラムを組める」となっていて、そんなことはないって話でした。