ChatGPTでプログラミング第(n+1)言語習得のススメ!
※ただしnは正の整数とする
前回の技術ネタはBingのAIを使って色々やってみた話でしたが、今回はAIといえばの大本命!
ChatGPTを使ってプログラミングの勉強をしてみよう!といった話になります。
ChatGPTとは・・・は飛ばして!
いつもならChatGPTとは・・・みたいな話を書くのですが、流石に
「なんかすごい!説明不要!!!!!」
で(エンジニアとしてどうなのかは置いといて)大体わかると思いますし、
「ChatGPT とは」とかでGoogle先生に聞けばわかりやすく教えてくれると思うので今回は飛ばしちゃいます。
ただ、事前認識として
AIは雑に言うと”創造性が必要とされる”ことは不得意としていて、”単純作業や集合知でなんとかなる”ことを得意としている
ということだけ覚えておいてください!
プログラミング学習、どうしてますか?
私もエンジニア歴が中学生ぐらいになってきたのでたまに、
「勉強ってどうしてましたか?」
っていう質問をされることが増えてきました。
思い返してみると勉強した記憶ってほとんどなくて、
何かをつくろうとする→息詰まる→調べる→進む→息詰まる→調べる・・・
の無限ループで「進む」フェーズが延びてきてやっと「オレ、プログラミング チョットワカル」になったような気がします。
ただ、その前段の「何かをつくろうとする」が結構厄介で、本やネットの初心者講座の大半が「Hello,World!」や計算のやり方などを第一目的にしている場合が多いです。
それも確かに勉強としては大事なのですが、じゃあ今触ってるシステムって、あのアプリってどう作られてるの?という疑問を解決してくれる文献って意外と少ないのが現状ですよね。
じゃあその部分をChatGPTに丸投げして、勉強のとっかかりにしてしまおう!ってのが今回のたくらみです。
Hey,ChatGPT キッチンタイマーを作って!
早速ChatGPTに投げてしまってもいいのですが、その前にプログラミング言語の選定と環境構築は済ませてしまってください。
何でも大丈夫そうですが、ChatGPTに限らずAIの性質上、最近できました!みたいな言語やバージョンだと学習されてないので出してくれないこともしばしばです・・・
環境構築手順がわからなければChatGPTに「〇〇の環境構築手順を作ってください」とかで投げると結構しっかり作ってくれます。
↑この倍ぐらい続いてますw
当然ですが結構長めにしっかり書いてくれるので、過去実際にPythonの環境構築を行って、
Discordと連携するボットを作ってみましたがものの1時間ぐらいで形になっていって感動しました。
ただ、第(n+1)言語とは言ったものの、ブログに書く以上ちょっと正誤判定的に不安なので、私が一番得意なJavaを使ってもらってどんなものが出来上がるのか見てみたいと思います。
今回はこんな感じのプロンプトをもとにキッチンタイマーもどきを作ってもらいました。
Javaを使って以下の条件を満たすプログラムを作成してください。
・起動引数で受け取った秒数をカウントする。
・起動引数が数値でない、または無かった場合、15秒カウントする。
・カウント中は現在のカウントをコンソールに出力する。
・上記条件でカウント完了後に「ピピピピ」をコンソールに出力する。
すると・・・
パッと見問題なさそうなのがすごい・・・
実際に動かしてみました!
ちょっと小さいですが実行時間からちゃんと15秒経過してるのがわかりますね。
今度は起動引数に8を渡して起動してみました。こちらもちゃんと8秒カウントしてますね!
作れたら改造してみる、モノづくりの基本ですね
イイ感じに作れましたね!
これで終わるとただ作らせたものを眺めただけで全くと言っていいほど勉強にならないのでもう少し詳しく見てみましょう。
public class CountdownTimer {
public static void main(String[] args) {
int countdownSeconds = 15; // デフォルトのカウントダウン秒数
if (args.length > 0) {
try {
countdownSeconds = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.out.println(“引数が数値ではないため、デフォルトの15秒でカウントダウンします。”);
}
}
countdown(countdownSeconds);
System.out.println(“ピピピピ”);
}
public static void countdown(int seconds) {
for (int i = seconds; i > 0; i—) {
System.out.println(“カウントダウン: “ + i + “秒”);
try {
Thread.sleep(1000); // 1秒待機
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
私にとっては得意言語なのでなんてことはないですが、初めて見た言語だとしてもなんとなーく下記のことは読み取れるのではないでしょうか。
・「System.out.println();」ってのが受け取った値をコンソールに出力する
・「Thread.sleep();」ってやつは受け取った数字をミリ秒として処理を止める
起動引数で何を受け取ったのかがわからないプログラムなので、コンソールに受け取った値を出力させたい!
と思ったら「System.out.println();」に起動引数を渡して出力させよう。
だとか、経過時間は出力させずに最後の「ピピピピ」だけ出したいならfor文を外してThread.sleep();に入れる数字だけ変えてみよう等、
様々な改造が思い浮かぶのではないでしょうか。
または、「第(n+1)言語・・・n=0だから全くわからん・・・」なんて人はChatGPTにこう言ってみてください。
上記プログラムにコメントを追加してそれぞれの処理を説明してください。
するとこんな感じにしっかりコメントと説明文も書いてくれます。
なんだか優しめの専属プログラムの先生がいるみたいですねw
ちなみに動かしてみてエラーが出たときもChatGPTに聞くと対応方法を教えてくれます。
※ローカルのパスや業務的な社外秘などをChatGPTに入力するのはタブーですのでそこだけはお気を付けください!!!!
作って壊す、何ができるかの引き出しを増やす
プログラミング言語の習得は何より「作ってみる」が一番の近道だと思います。
そして作っていくうちに先ほどプログラムから読み取ったような「この言語ではこう書けばこうなる」といった引き出しが増えていきますね。
これを繰り返していけば徐々にChatGPTに頼らずとも何かを作れたりするのではないでしょうか!
その時が第(n+1)言語習得!の時ですね。
是非ChatGPTを活用していろんな言語を勉強してみてください!
私はRustに手を出してみたいと思ってます( *´艸`)
いかさん
実はイカ嫌いです。
今年こそ痩せます。
と言い続けてきましたがやめました。
何もしなくても痩せられる技術を待ち望んでいます。