📌

めんどうな学習スケジュール設計をChatGPTに助けてもらう

2023/01/02に公開

はじめに

年始に一年の目標設定をする人も多いでしょう。
例えば今年はRustを勉強する、とか英語をしゃべれるようになる、とかです。
ところがエンジニアの職業病なのか完璧な学習スケジュールを求めるあまり学習スケジュールを作って満足してしまったり無理のあるスケジュールになってしまうことも往々にしてあります。
しかし、偉い人は言いました。
Done is better than perfect.と。

そこで学習スケジュールの骨子は秘書足るChatGPT君に提案してもらってさっさと学習を始めてしまい、適宜修正していくのもいいんじゃないかと考えました。

ChatGPT とはなにか

ChatGPTはOpenAIによって開発されたAIによる自然言語処理を利用したテキスト生成プラットフォームの1つです。
チャット形式で利用者のインプットに応じたアウトプットを自動的に生成してくれるサービスとなっています。

https://openai.com/blog/chatgpt/

※記事執筆時点でトライアル中
※利用方法は詳しく解説しません。
以下の記事など参考にどうぞ。

https://zenn.dev/toguri/articles/5cd5a2f34c491e

2022年の11月頃から使えるようになりTwitter界隈で話題になっていました。

ChatGPTでプログラミング

話題の1つはChatGPTで(わりと)正確なコードを出力できることでした。
例えば以下のように入力をしてみます。

メールアドレスとパスワードを入力するログインフォームを作成したいのでコードを提案してください。

すると以下のように出力されます。

以下のようなHTMLコードを使用することで、メールアドレスとパスワードを入力するログインフォームを作成することができます。
<form action="/login" method="post">
  <label for="email">Email:</label><br>
  <input type="email" id="email" name="email"><br>
  <label for="password">Password:</label><br>
  <input type="password" id="password" name="password"><br><br>
  <input type="submit" value="Submit">
</form>
このコードでは、「form」タグでフォームを作成しています。「action」属性では、フォームを送信するときにリクエストを送信するURLを指定しています。「method」属性では、リクエストを送信するときのHTTPメソッドを指定しています。この例では、「post」メソッドを使用しています。

次に、「label」タグと「input」タグを使用して、メールアドレスとパスワードを入力するフィールドを作成しています。「label」タグでは、フィールドの説明を表示するテキストを指定しています。「input」タグでは、フィールドの種類を指定する「type」属性を使用しています。「email」タイプを使用することで、メールアドレスを入力するフィールドを作成しています。「password」タイプを使用することで、パスワードを入力するフィールドを作成しています。

最後に、「input」タグの「type」属性を「submit」に設定することで、フォームを送信するボタンを作成しています。

このように、HTMLを使用することで、簡単にログインフォームを作成することができます。

やっぱりすごい…。

なお、ここからさらに発展してChatGPTを活用して1つのアプリケーションを開発するということまでやっておられる先人もいます。

https://qiita.com/autotaker1984/items/5b5ac8c01d11fbbbc4a7

https://qiita.com/autotaker1984/items/c6769f9ea7f2df1fdeb5

誰かが言っていましたがまるでペアプロしながら開発を進められる感覚ということで、ChatGPTだけで完結することはないものの利用者が適宜直せば使えるレベルにはなっていそうです。

ChatGPTでスケジュール設計を決めてもらう

では本題に入ります。
ここではChatGPTにある内容を1年間で学習するためのスケジュールを提案してもらいます。

あくまで学習スケジュールを立てるためのベースになるものを成果として期待し、その正当性はここでは検討しません。
また、入力方法によっても結果はブレますがその辺りは他記事に譲ります。

加えて、提案範囲も気になるところです。
触ったことのない技術に触れる場合どういったロードマップを引くべきか案外分からないものですから。

実際の例

ということで2つ試してみます。

  1. 英語の学習スケジュール
    1年をかけて英語を使って流ちょうに会話をこなせるためにどのように学習スケジュールを立てるべきか提案してもらいます。
    なお、出力結果は見やすいように適宜段落分け/改行しています。
入力
英語を流ちょうに喋れるように学習を行いたいと思います。
1年間の学習スケジュールを提案してください。
出力結果
すべての学習には決まったスキルが必要です。
1年間で英語を流暢に話すことができるようになるためには、
次のようなスキルを学習する必要があります。

単語力を向上させること。
新しい単語を覚えることで、より多くの英文を理解できるようになります。
読解力を向上させること。
英文をよりスムーズに読むことで、より多くの情報を得ることができるようになります。
会話能力を向上させること。
英語を話すことで、英語を理解する力を高めることができます。
スピーキング能力を向上させること。
英語を流暢に話すことで、自信を持って英語を使うことができるようになります。

以上のスキルを身に付けるためには、次のようなスケジュールを作ることができます。

月1で新しい単語を学ぶ。
週1で英文を読む。
週1で英語を話す機会を持つ。
週2でスピーキングの練習をする。

これらのアクティビティを継続的に行うことで、1年間で英語を流暢に話すことができるようになるでしょう。

なんだかそっれぽい提案が出されました。
ですがもうちょっと具体的に提案してほしいのでお願いしてみましょう。

入力
提案をより具体的にしてください。
例えば取り組む課題を3か月ごとで提案してください。
出力結果
1年間で英語を流暢に話すことができるようになるためには、
次のようなスケジュールを作ることができます。

第1か月:
新しい単語を30個以上覚える。
英文を1冊読む。
英語を話す機会を1回持つ。
スピーキングの練習を1回する。

第2か月:
新しい単語を30個以上覚える。
英文を1冊読む。
英語を話す機会を2回持つ。
スピーキングの練習を2回する。

第3か月:
新しい単語を30個以上覚える。
英文を1冊読む。
英語を話す機会を3回持つ。
スピーキングの練習を3回する。

以降も同様に、毎月新しい単語を30個以上覚え、英文を1冊読み、英語を話す機会を増やし、
スピーキングの練習をすることで、1年間で英語を流暢に話すことができるようになるでしょう。

より具体的な提案がもらえました。
厳密に言えば3か月ごとの課題を1年間分提案してほしかったですがそのようになっていませんね。
やはり精度は完ぺきでないので入力内容を工夫し、納得いくまで繰り返すと良さそうです。

ともあれ、少なくとも最初の3か月の学習スケジュールの骨子はできたので、あとはこれに沿ってどの教材やイベントを利用するか詰めていけばいいでしょう。

  1. Typescriptの学習スケジュール

では続いてTypeScriptの学習スケジュールについても提案してもらいます。
TypeScriptを選んだのは、前提としてJavaScriptの学習スケジュールも提案に含められるか、どの程度の範囲まで提案してもらえるのかという検証を兼ねています。

入力
プログラミングの初心者です。
TypeScriptの学習をしたいと思います。
1年間の学習スケジュールを提案してください。
出力結果
TypeScriptを1年間学習するためのスケジュールを提案する前に、
基礎的なプログラミング知識を身に付けることが重要です。
TypeScriptはJavaScriptのスーパーセットであり、
JavaScriptの基礎知識がなければ、TypeScriptを理解することができません。

JavaScriptの基礎知識を身に付けるためには、以下のようなスケジュールを提案します。

プログラミングの基礎知識(変数、データ型、演算子、流れ制御、関数、オブジェクト、配列、クラスなど)を学習する
JavaScriptの基礎的な文法を学習する
HTMLとCSSを学習し、Webページを作成する
JavaScriptを使ったWebページの作成を試みる
JavaScriptの基礎知識を身に付けたら、TypeScriptに取り組むことができます。

TypeScriptを学習するスケジュールとしては、以下のようなものが考えられます。

TypeScriptの基礎的な文法を学習する
TypeScriptでクラスを使ったオブジェクト指向プログラミングを学習する
TypeScriptでの関数型プログラミングを学習する
TypeScriptでのモジュールシステムを学習する
TypeScriptでのエラーハンドリングを学習する
TypeScriptを使ったWebアプリケーションやモバイルアプリケーションの開発を試みる

これらを1年間にまとめると、毎週1〜2時間、毎日30分〜1時間の練習をするようにするとよいでしょう。
また、本やインターネット上の情報を参考にしながら、実際にプログラムを作成してみることも重要です。
そのようなプログラムを作成することで、実際にTypeScriptを使ったプログラミングを体験することができるだけでなく、理論的な知識を実践的なスキルに結びつけることができるでしょう。

また、TypeScriptを学習する上で、以下のようなことも検討することをおすすめします。

TypeScriptを使用した開発環境の構築方法
TypeScriptでのテスト駆動開発(TDD)
TypeScriptでのリファクタリング
TypeScriptでのデバッグ方法
TypeScriptを使用したWebフレームワークの導入方法

これらを学習することで、TypeScriptを使用した開発プロジェクトをスムーズに進めることができるようになります。

1年間ですと、TypeScriptを完全に習得することは難しいかもしれませんが、
基礎的な知識を身に付け、実践的なスキルを身に付けることは可能です。
ぜひ、頑張って学習してみてください。

すごい、実際にメンターの人に提案してもらったのかと感じるくらい具体的な提案でした。
もちろん厳密に言えばツッコミところは散見されますが、ひとまずもう少し具体的なスケジュールを提案してもらいましょう。

入力
提案内容を採用します。
JavaScriptの基本的な学習を3か月で終了する場合の具体的なスケジュールを提案してください。
出力結果
avaScriptの基本的な学習を3か月で終了するためのスケジュールを提案する前に、
学習する内容について確認します。以下のような内容を学習するとします。

プログラミングの基礎知識(変数、データ型、演算子、流れ制御、関数、オブジェクト、配列、クラスなど)を学習する
JavaScriptの基礎的な文法を学習する
HTMLとCSSを学習し、Webページを作成する
JavaScriptを使ったWebページの作成を試みる

これらを3か月で学習するためのスケジュールとしては、以下のようなものが考えられます。

週1回、2時間程度のレッスンを受ける
週3回、1時間程度の自主学習をする
毎日30分〜1時間の練習をする

以上のようなスケジュールで、3か月でJavaScriptの基本的な学習を終了することができるでしょう。

このスケジュールはあくまでも目安であり、
個人差や学習スタイルによっては、より短期間で学習を終了することもあるでしょう。
また、学習する内容をもっと絞り込んで、より集中的に学習することもできます。
ぜひ、自分に合ったスケジュールを作成して、頑張って学習してみてください。

レッスンを受ける…というのはあまり考えていなかったので代わりに書籍で勉強するのはどうでしょうか。

入力
レッスンを受けず代わりにその時間で書籍を利用して学習を進めたいです。
出力結果
書籍を利用して学習を進めるのは、とても良いアイデアです。
書籍は、わかりやすい記述やイラストを使って、
内容をわかりやすく解説してくれるため、学習効率が高いです。

さらに、書籍は、自分で学習するスピードをコントロールできるため、
自分に合ったペースで学習することができます。
また、書籍を読むだけでなく、内容を理解するために、
自分でプログラムを作成してみることで、実践的なスキルを身に付けることもできます。

以上の理由から、書籍を利用して学習を進めるのは、とても効果的な学習方法です。
提案したスケジュールを参考に、書籍を利用して学習を進めてみてください。
また、学習の中で分からないことがあった場合は、本やインターネット上の情報を参考にしながら、
自己解決することも検討してみてください。

良いみたいです。

いずれにしても、まとめると以下のようなスケジュールを元にすると良さそうです。

  • JavaScriptの基礎知識

    • プログラミングの基礎知識(変数、データ型、演算子、流れ制御、関数、オブジェクト、配列、クラスなど)を学習する
    • JavaScriptの基礎的な文法を学習する
    • HTMLとCSSを学習し、Webページを作成する
    • JavaScriptを使ったWebページの作成を試みる
  • TypeScriptを学習

    • TypeScriptの基礎的な文法を学習する
    • TypeScriptでクラスを使ったオブジェクト指向プログラミングを学習する
    • TypeScriptでの関数型プログラミングを学習する
    • TypeScriptでのモジュールシステムを学習する
    • TypeScriptでのエラーハンドリングを学習する
    • TypeScriptを使ったWebアプリケーションやモバイルアプリケーションの開発を試みる
  • 追加で学習するといいもの

    • TypeScriptを使用した開発環境の構築方法
    • TypeScriptでのテスト駆動開発(TDD)
    • TypeScriptでのリファクタリング
    • TypeScriptでのデバッグ方法
    • TypeScriptを使用したWebフレームワークの導入方法
  • 勉強時間

    • 週1回、2時間程度の書籍を利用してインプット
    • 週3回、1時間程度の自主学習をする
    • 毎日30分〜1時間の練習をする

あとはこれをベースに具体的な教材を決めたりしていけば学習スケジュールとして完成するのではないでしょうか。
繰り返しになりますが完成度については色々とツッコミどころは多いもののベースになるものとしては十分という印象を受けました。

特に新しい技術に触れる場合その周辺知識まで提案に含めてくれるのはいい感触があります。
現時点でもここまでやってくれるのであれば将来的にはメンター的な役割も補完できる未来がくるのでしょうか。

Discussion