見出し画像

プログラミング言語の習得、ChatGPTと一緒に「独学」しよう。

ここにきて、Python学習におけるChatGPTの有用性を全身で体験し打ち震えたので note しますね!

Pythonの勉強自体は半年ほど前からぼちぼち始めてまして、とある別の資格受験を挟みつつちびちび進めておりました。

使っている本は『Python [完全]入門 』という本。

この本は2/3強が基礎編で、残りが応用編となってまして、今は基礎編をほぼ終えたところです。
ただ、このまま応用編に行くのもちょっとモチベーションが続かない気がしてて、並行して「面白そうなこと」もやりたいなーと思っていたもので、試しに ChatGPT に相談してみた次第です。

以下、詳細を書いていくのですが、結論を先に書くと、プログラミング言語を独学でやるならもう、ChatGPTを活用しない手は無いですよーーー!って感じ。

早速、ChatGPTに提案依頼する!

とりあえず、まずはこのモヤモヤした想いの丈をChatGPTにぶつけてみました!

わたし:
Pythonの学習のため、参考書を買って勉強しているところです。一通りの概念を学びましたが、実践で使わないと身につかないとも思っています。この次に私がやるべき最も効率的なPythonスキルの定着方法を提案してください。

このわたしの提案依頼に対するChatGPTが出した回答はこちら。
あ、書き漏れてましたが、以下は全て無料版(GPT-3.5ベース)による回答になります。

ChatGPT:
Pythonのスキルを定着させるためには、以下の方法をおすすめします。

1. プロジェクトを作成する: 実践的なプロジェクトを選んで、Pythonを使ってアプリケーションやツールを開発してみましょう。実際の問題に取り組むことで、Pythonの概念や文法をより深く理解することができます。

2. オープンソースプロジェクトに貢献する: GitHubなどのオープンソースプロジェクトに参加し、Pythonのコードを書いたり既存のコードに貢献したりしてみましょう。他の開発者との協力やレビューを通じて、より良いコーディングプラクティスを学ぶことができます。

3. コーディングチャレンジや競技プログラミングに参加する: オンラインのコーディングチャレンジや競技プログラミングプラットフォームに参加して、問題を解決するためにPythonを使用してみましょう。制限時間内に効率的なコードを書くことを求められるため、実践的なスキルを磨くことができます。

4. オンラインコミュニティに参加する: Pythonのオンラインコミュニティに参加し、他のPython開発者と交流しましょう。質問や議論に参加することで、新しいアイデアやベストプラクティスを学ぶことができます。

5. チュートリアルやハンズオンラボに参加する: オンラインで提供されているPythonのチュートリアルやハンズオンラボに参加してみましょう。実際に手を動かしながら学ぶことで、理論だけでは得られない実践的な知識を身につけることができます。

これらの方法を組み合わせて活用することで、Pythonのスキルを定着させることができます。継続的な実践と学習を通じて、より高度なPythonプログラミングのスキルを身につけることができるでしょう。

なるほどなるほど。 まぁ、一般的な回答ですわね。
ただ、わたし自身趣味でやってるだけですしまだまだ初学者の域を全然出ていないレベルなので、2以降の活動はちょっとハードル高いよなぁ・・・という印象。

何を作ってみたら良さそう?

プログラミングって、やっぱり何か「使えそうなもの」を作り上げた時の達成感が気持ちいいですし、成長できると思うんですよ。

っていうことで、どういうのを作ってみるのがいいのかを(高望みしないレベルで)アドバイスしてもらいます。

わたし:
具体的に何を作ってみたら良いか、いいアイデアはありませんか?初学者向けに最適なものを提案してください。

すると、5つの初学者向けプロジェクトを提案してくれました。

ChatGPT:
初学者向けにPythonで取り組むことのできるプロジェクトの一部を以下に提案します。

1. TODOリストアプリケーション: シンプルなTODOリストを作成してみましょう。ユーザーがタスクを追加、編集、削除できるような機能を実装することができます。データの保存にはファイルやデータベースを使用することも考えられます。

2. 進捗管理ツール: プロジェクトの進捗状況を管理するツールを作成してみましょう。タスクのステータス、期限、担当者などの情報を入力できるようにし、進捗状況を視覚的に表示する機能を追加することができます。

3. 天気予報アプリケーション: 外部の天気APIを使用して、指定された地域の天気情報を表示するアプリケーションを作成してみましょう。ユーザーが都市名や郵便番号を入力すると、その地域の現在の天気や週間予報を表示することができます。

4. パスワードジェネレータ: ランダムなパスワードを生成するツールを作成してみましょう。パスワードの長さや含める文字の種類を指定できるようにすると良いでしょう。セキュリティに配慮しながら、使いやすさも考慮して設計しましょう。

5. 単語当てゲーム: ランダムに選ばれた単語を当てるゲームを作成してみましょう。プログラムが単語を選び、ユーザーが予想を入力する形式です。ユーザーの入力と正解の比較、ヒントの表示など、ゲームのロジックを実装することができます。

これらのプロジェクトは初学者にとって適切な難易度であり、Pythonの基本的な概念やデータ構造、制御フローなどを実践的に学ぶことができます。プロジェクトを通じて、自分自身のスキル向上にも役立つ経験を積むことができるでしょう。

おおすごい!聞く前は正直なところ「しょーもなさそうな」アイデアが出てくるかな・・・と邪推してましたが、実際にできたら面白そうなものを提案してくれました。初学者でもこういうのが作れるんですね!

しかし、まだまだテキストの基礎編を進めているだけのわたしでは、具体的にどこから始めていいのかピンときていないのも事実。

作り方を教えてもらおう!

なので、提案された5種類のプロジェクトの1つ目『ToDoリストアプリケーション』の作り方を教わることにしました。

わたし:
ありがとう。では1つ目のToDoリストアプリケーションの作成について、具体的な作成方法を含め私にレクチャーしてくれませんか?

ここからがChatGPTのすごいところ。
ちゃんとセットアップから実際のプログラムまで、ChatGPTが教えてくれるじゃないですか!

ChatGPT:
もちろんです!ToDoリストアプリケーションを作成するための基本的な手順を以下に説明します。

1. プロジェクトのセットアップ:
まず、新しいディレクトリを作成し、その中にプロジェクトのファイルを配置します。仮に「ToDoApp」というディレクトリ名とします。

2. 必要なモジュールのインストール:
PythonでToDoリストアプリケーションを作成するには、まず必要なモジュールをインストールします。ターミナル(またはコマンドプロンプト)を開き、以下のコマンドを実行してください。

pip install tkinter

これにより、GUIを作成するためのTkinterモジュールがインストールされます。

3. GUIの作成:
ToDoリストを表示するためのGUIを作成します。Tkinterを使用してウィンドウやボタン、ラベルなどの要素を配置します。以下は、基本的なToDoリストアプリケーションのGUIの例です。

import tkinter as tk

def add_task():
    task = entry.get()
    if task:
        listbox.insert(tk.END, task)
        entry.delete(0, tk.END)

def delete_task():
    try:
        index = listbox.curselection()
        listbox.delete(index)
    except:
        pass

window = tk.Tk()
window.title("ToDoリスト")

frame = tk.Frame(window)
frame.pack(pady=10)

listbox = tk.Listbox(
    frame,
    width=50,
    height=10,
    bd=0,
    font=("Courier New", 12),
)
listbox.pack(side=tk.LEFT, fill=tk.BOTH)

scrollbar = tk.Scrollbar(frame)
scrollbar.pack(side=tk.RIGHT, fill=tk.BOTH)

listbox.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=listbox.yview)

entry = tk.Entry(
    window,
    font=("Courier New", 12)
)
entry.pack(pady=10)

add_button = tk.Button(
    window,
    text="追加",
    command=add_task
)
add_button.pack(pady=5)

delete_button = tk.Button(
    window,
    text="削除",
    command=delete_task
)
delete_button.pack(pady=5)

window.mainloop()

4. 動作確認:
上記のコードを実行してみてください。ToDoリストアプリケーションのウィンドウが表示され、タスクの追加と削除ができるようになります。

このToDoリストアプリケーションの基本的な機能は実装されています。タスクを入力し、「追加」ボタンをクリックするとリストに追加され、選択したタスクを削除するには「削除」ボタンをクリックします。

もちろん、このアプリケーションをさらに拡張することもできます。例えば、タスクの保存や読み込み機能を追加したり、タスクに期限や優先度を設定できるようにしたりすることができます。

以上が、ToDoリストアプリケーションの作成手順の基本です。これをベースにして、自分なりにアプリケーションをカスタマイズしたり機能を追加したりすることができます。順調なプログラミング体験をお楽しみください!

すげええええ。プログラムできたやん!
とりあえず実行してみたら、おお、ちゃんとToDoが登録・削除できる!

・・・ま、待て。
これは単にChatGPTがプログラムのコードを教えてくれただけで、わたしが書いたわけじゃないぞ。

コードを解説してくれて至れり尽くせり!

これではプログラミングの勉強にならないので、このコードの意味を理解するのが大事だな!それを教えてくれ!

わたし:
プログラムの解説を上から順番にお願いします。

もしかしてやってくれるかな?、と思ったらマジで全行解説してくれました。
神すぎない??

ChatGPT:
もちろんです!プログラムの解説を上から順に説明します。

1行目: `import tkinter as tk`
Tkinterモジュールを`tk`という名前でインポートしています。これにより、Tkinterを使用してGUIを作成することができます。

3行目: `def add_task():`
`add_task`という関数を定義しています。この関数は、入力されたタスクをリストボックスに追加する役割を持ちます。

4行目: `task = entry.get()`
`entry`という名前のエントリーウィジェットから入力されたテキストを取得し、`task`という変数に格納しています。

5行目: `if task:`
`task`が空でない場合の条件をチェックしています。入力されたタスクが空でない場合にのみ、タスクをリストボックスに追加する処理が行われます。

6行目: `listbox.insert(tk.END, task)`
`listbox`という名前のリストボックスウィジェットの末尾に、`task`の内容を挿入します。新しいタスクがリストの一番下に表示されます。

7行目: `entry.delete(0, tk.END)`
タスクの追加が完了した後、入力エリアのテキストを削除します。次のタスクを入力するためにエントリーをクリアします。

9行目: `def delete_task():`
`delete_task`という関数を定義しています。この関数は、選択されたタスクをリストボックスから削除する役割を持ちます。

10行目: `try:`
`try`ブロックの開始です。後続のコードを実行し、例外が発生した場合に対応するための処理を行います。

11行目: `index = listbox.curselection()`
リストボックスで選択された項目のインデックスを取得し、`index`という変数に格納します。

12行目: `listbox.delete(index)`
`listbox`から`index`で指定された項目を削除します。

15行目: `window = tk.Tk()`
`window`という名前のトップレベルウィンドウを作成します。このウィンドウは、ToDoリストアプリケーションのメインウィンドウです。

16行目: `window.title("ToDoリスト")`
ウィンドウのタイトルを設定します。

18行目: `frame = tk.Frame(window)`
`frame`という名前のフレームウィジェットを作成します。このフレームにリストボックスなどの要素を配置します。

19行目: `frame.pack(pady=10)`
フレームをウィンドウに配置します。`pady=10`は上下の余白を指定しています。

21行目: `listbox = tk.Listbox(frame, width=50, height=10, bd=0, font=("Courier New", 12))`
`listbox`という名前のリストボックスウィジェットを作成します。`width`と`height`でサイズを指定し、`bd`で境界線の幅を指定しています。`font`で表示するテキストのフォントを設定しています。

23行目: `listbox.pack(side=tk.LEFT, fill=tk.BOTH)`
リストボックスをフレームに配置します。`side=tk.LEFT`は左揃え、`fill=tk.BOTH`は水平方向と垂直方向の両方に拡張します。

25行目: `scrollbar = tk.Scrollbar(frame)`
`scrollbar`という名前のスクロールバーウィジェットを作成します。

26行目: `scrollbar.pack(side=tk.RIGHT, fill=tk.BOTH)`
スクロールバーをフレームに配置します。`side=tk.RIGHT`は右揃え、`fill=tk.BOTH`は水平方向と垂直方向の両方に拡張します。

28行目: `listbox.config(yscrollcommand=scrollbar.set)`
リストボックスのスクロールコマンドを設定します。スクロールバーの動作とリストボックスを連携させます。

29行目: `scrollbar.config(command=listbox.yview)`
スクロールバーのコマンドを設定します。リストボックスの垂直方向のスクロール動作にスクロールバーを関連付けます。

31行目: `entry = tk.Entry(window, font=("Courier New", 12))`
`entry`という名前のエントリーウィジェットを作成します。`font`で表示するテキストのフォントを設定しています。

33行目: `entry.pack(pady=10)`
エントリーをウィンドウに配置します。`pady=10`は上下の余白を指定しています。

35行目: `add_button = tk.Button(window, text="追加", command=add_task)`
`add_button`という名前のボタンウィジェットを作成します。`text`で表示するテキストを指定し、`command`でボタンがクリックされた時に呼び出す関数を指定しています。

37行目: `add_button.pack(pady=5)`
追加ボタンをウィンドウに配置します。`pady=5`は上下の余白を指定しています。

39行目: `delete_button = tk.Button(window, text="削除", command=delete_task)`
`delete_button`という名前のボタンウィジェットを作成します。`text`で表示するテキストを指定し、`command`でボタンがクリックされた時に呼び出す関数を指定しています。

41行目: `delete_button.pack(pady=5)`
削除ボタンをウィンドウに配置します。`pady=5`は上下の余白を指定しています。

43行目: `window.mainloop()`
ウィンドウのメインループを開始します。これにより、ウィンドウが表示され続け、イベントの処理が行われます。

以上が、ToDoリストアプリケーションのプログラムの解説です。各行の役割や動作がわかるかと思います。

どひゃー!この解説とプログラムを一緒に見ていけば、ものすごい勉強になるやん!

何度でもどんな質問でも教えてくれる

いかがでしたか?
実際の例題プログラムを提示してくれて、解説もしてくれる。なので、テキストの基礎編で習った機能がどのように活かされるのかがわかるわけですよ。
しかも、わからない箇所があったら、追加でとことん教えてくれるんです。

これ、マジで「なんでも教えてくれる先生」がマンツーで対応してくれている環境ですよ。聞くのが恥ずかしいな、とか、何度も聞いて申し訳ないな、みたいなことを気にせず、バンバン質問できる。
先日も、テキスト読んで「?」となっていたことをGhatGPTが教えてくれました。

以上、この note でみなさんにお伝えしたかったのは、

  • 学びたい意欲があれば、ChatGPTが個別指導塾の先生のように色々と教えてくれる!なんだったら教材も提示してくれる!

という衝撃の事実でした。

今回はPythonに関するご紹介でしたが、比較的普遍的である程度インターネット上に統計立てて確立されているジャンル(プログラミングや語学なんかは良さそうです)であれば、今回同様にChatGPTは素敵な講師としてあなたを助けてくれると思います。
そう、ChatGPTと一緒に独学することが可能な時代になっているわけですよ!

スキやシェアやフォローしてもらえたりすると、サポートしていただけるのと同じぐらい嬉しいのです!