JavaSilver取得もといJavaの学習に役立った勉強法

## 目次
- [前提](#前提)
- [初心者時代の勉強法3選](#初心者時代の勉強法3選)
  - [YoutubeやUdemyの動画教材](#youtubeやudemyの動画教材)
  - [Paizaラーニングのようなプログラミング学習サイト](#paizaラーニングのようなプログラミング学習サイト)
  - [MineCraftのMOD制作](#minecraftのmod制作)
- [現在プログラミング関連で取り組んでいること](#現在プログラミング関連で取り組んでいること)
- [まとめ](#まとめ)


## 前提
インフラエンジニアになった私ですが、8月4日にJavaSilverに合格いたしました。
合格レポートとして記事を書こうとも思いましたが、「それだとあまり面白くないかな...？」とか「[大先輩の偉大な記事](https://qiita.com/ist-a-ku/items/9ddd264303f34fb65e16)があるので二番煎じかな？」などと思いが巡り、なかなか記事が書けておりませんでした。

ということで趣向を変え、この記事では参考書を使ったJavaSilverのための勉強法というよりも、Javaそのものの勉強法についてご紹介をしようと思います。
ありきたりな勉強だけでなく（大事ですが）、**ちょっと変わった勉強方法**も紹介しますので、ぜひ読み進めてみてください！

「JavaSilverの勉強をしなくちゃいけないけれど、参考書は面白くない！！」だったり「プログラミング未経験だけどJavaから勉強始めようかな〜」という人には特に刺さる内容かもしれません。


## 初心者時代の勉強法3選
### YoutubeやUdemyの動画教材
定番になってはしまいますが、まずはこれかなということで。
私が内定者時代にコツコツやっていたものになります。
少し真面目寄りですが、特にYoutubeの[せかちゃん](https://www.youtube.com/@SekaChan)の動画にはかなりお世話になりました。
JavaSilver取得を本格的に始めた時も、このチャンネルのJavaSilver勉強法の動画にお世話になりました。

入社後の技術研修で同期に紹介したり、すでに同期が見ていたりしていましたが、なかなか好評でしたので自信を持っておすすめできるチャンネルです。

Udemyでは、JavaServletやThymeleafなどのJavaに関する周辺知識の学習を目的に講座を利用していました。
ただJavaSilver・Javaの勉強というよりは、SQLやGitといったプログラミング言語以外の勉強をメインに、Udemyを利用していた印象が強いです。

### Paizaラーニングのようなプログラミング学習サイト
プログラミングの勉強をしたい！と思い立ち色々と調べた方は誰でも知っている、メジャーなサイトです。
[Paizaラーニング](https://paiza.jp/works)
今振り返ると、実際に書くという点での基礎固めは、このサイトを通して行なったかなと思っています。

プログラミングのお作法は講義動画を、思いつきをコードに表すプロセスは問題集を通して身につけました。
問題だけで言えば、基本的に無料で読むことができるので、気楽に挑戦してみても良いかもしれません。
（※解答の確認は無料プランだと制限があるので注意）

言語もJavaだけでなく有名どころの言語であれば解答例までサポートしていますので、Javaプログラマー以外にもおすすめの腕試し・勉強法かなと思います。


### MineCraftのMOD制作
そういえばMineCraftってJavaで作られていたなと思いつき、面白そうだという興味1つでこの勉強を開始しました。
実践こそ最強の勉強法ということで、楽しさを両立しつつ、最もためになったのはこの勉強法だと思っています。

ちなみに、MineCraftを知らない人向けの説明です。

>Minecraft はオープンワールドのサンドボックス ゲームです。サンドボックス ゲームとして無限大の可能性を秘めています！創造力を発揮してブロックで物を組み立てたり、探検して夜を生き抜くことに挑戦したりできます。

[MineCraft公式](https://www.minecraft.net/ja-jp/minecraft-tips-for-beginners)
MineCraftはJavaで作成されたゲームで、ユーザーが拡張機能のように開発・導入できる要素が「MOD」です。
MODを使うことで、ゲームの機能をカスタマイズしたり、新たな要素を追加して楽しむことができます。

さらにちなみに、勉強開始初期に作ったMODでは、下画像のようなアイテムたちを作っていました。
![CompressMod作成物.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3836775/e35f56ea-26ae-6837-e796-1406128bb3b4.png)

マク〇ナルドのポテトが特に分かりやすいですが（そう見えますよね？）、MOD作りによって、ゲームには本来存在しないアイテムなどを作ることができます。

まずこの勉強法の良いところは、「ガッツリ勉強」という感じがしないことだと思っています。
やっていることはゲーム開発のようなものなので、まさに遊びながら勉強しているという気持ちでJavaを学ぶことができます。

実際Java（プログラミング）の勉強として効果的な点もかなりあると思っています。
個人の感覚に寄ってしまうところがかなり多い気がするので恐縮ですが、私にとって以下のようなメリットがありました。

1. **プログラミングの基礎を学べる**
   - **プログラミングの基礎**：importやパッケージ、フォルダ構造、変数の型など、プログラミングの基本的な知識が自然に身につく。
   - **オブジェクト指向設計の基礎**：継承や実装の概念を理解し、オブジェクト指向プログラミングの基礎を学べる。
   - **ファイル形式への対応**：Javaのクラスファイルだけでなく、jsonやxmlなど、さまざまなファイル形式にも触れる機会がある。
2. **プログラミングの実践力が向上する**
   - **デバッグ・エラー対処のスキル**：デバッグやエラーの対応を通じて、プログラムの動作確認や修正の流れを掴むことができる。
   - **プログラムを書く際の感覚**：ブロックを組み合わせる感覚でプログラムを書くような、プログラムを書く上での重要なイメージを持つことができる。
   - **バージョン管理の意識**：バージョンの違いによるコードの互換性や、バージョン管理の重要性が理解できる。
3. **クリエイティブな達成感を得られる**
   - **成果物の充実感**：労力に対して大きな成果物を生み出せるため、達成感が得られやすい。
   - **プログラムが動く実感**：自分が作成したプログラムが実際に動作するイメージが掴める。
4. **拡張的なスキル習得**
   - **GitとGitHubの学習**：複数人で制作するなど必要に応じてGitやGitHubを学ぶことで、バージョン管理や共同作業の基礎も身につく。
   - **影響範囲の理解**：MODがゲームに与える影響範囲を理解し、それに伴ってテストすべき範囲のイメージを持つことができる。

一部のメリットは、複数人で開発していると言った条件付きであったり、入社後もう一度取り組み始めてから感じたものもありますが、包括的な内容は全て学べるのではないかと思っています。

JavaSilver取得に向けて考えても、これを通してコードを読み書きしたことが、プログラミングの慣れとして効果的だと考えています。

## 現在プログラミング関連で取り組んでいること
以前、JavaとSpring Frameworkを学ぶために、某掲示板サイトを模倣してWebサイトを作成しようとしたことがありました。しかし、HTMLとCSSなどのフロントエンド部分にこだわりすぎてしまい、結局バックエンドにたどり着く前に飽きてしまい、その勉強計画は中断してしまいました...。

その経験を踏まえ、現在は「楽しく学べる」ことを重視し、MinecraftのMOD制作に改めて取り組んでいます。複数人で1つのMODを作成しているため、Gitの復習やGitHub Actionsの学習など、以前よりも学習範囲を広げて学べていることがモチベの1つとなっています。。

また、これまで単純なブロック・アイテム追加にとどまっていたのに対して、現在は継承や参照を活用し、より複雑なロジックで動作するアイテムやブロックの作成にも挑戦しています。これに伴い、コードのリーディングが一層重要になってきましたが、ゲーム内のブロックの仕組みを理解することで感動し、その理解を基にアイデアが広がっていくことがモチベーションとなっています。 （これはもうJavaの勉強というより、プログラミングそのものの勉強である気がしますが...）

## まとめ
以上が、私がこれまでに取り組んできたJavaの勉強法です。

振り返ると、どの勉強法にも以下の共通点があると感じます。

モチベーションを維持できる要素を取り入れる
少し退屈に感じる部分もあるが、基礎をしっかり固める時間を確保し、実践する
この「しっかりとした基礎」×「楽しい実践」の組み合わせは、学習の良いスパイラルを生み出す大切な要素だと思います。プログラミングに限らず、他の分野でも、この要素を意識しながら学習方法を探してみると良いかもしれません。