【資格試験】Java SE8 Silver学習方法まとめ

**---更新履歴---**
　2020/06/02：**知識補完の役立ち情報**を追記（各学習の補足説明>①[黒本１章〜９章])

#はじめに
最近Java SE8 Silverの資格を取得しました。
このあとJava SE8 Goldも受験予定なので、諸々振り返りと今後の整理をするためメモにまとめます。

あくまで個人的な意見ですが参考になれば幸いです^^
また、間違いや異なった意見を持ってる方いらっしゃったら、コメントいただけると嬉しいです！

※本めもは、企業でしっかり研修などを受けて受験する方というより、個人的に資格取得を目指している初学者の方向けな感じです。（私がソンな感じ）

#受験者のバックグラウンド
十数年前に１ヶ月ほど、入社時研修としてJava研修を受けた事があります。
その後は、ほぼプログラミングに関わる事なく10年ほど金融系企業向けのアカウントSEをしておりました。そのため、プログラマーとしては下の下。現在駆け出し中です（笑）

※ちなみに、Androidエンジニアとして転職して２ヶ月半ほど経ちます。現在、Java,kotlin双方で開発を行なっています。

#Java Silver SE8 試験について
OracleのJavaSE８認定資格公式ページより概要を抜粋します。
>Oracle Certified Java Programmer, Silver SE 8 認定資格は、Javaアプリケーション開発に必要とされる基本的なプログラミング知識を有し、上級者の指導のもとで開発作業を行うことができる開発初心者向け資格です。日常的なプログラミング・スキルだけでなく、さまざまなプロジェクトで発生する状況への対応能力も評価することを目的としています。
出展：[Java SE 8 認定資格](https://www.oracle.com/jp/education/certification/jse8-2489021-ja.html)

記載のとおり、Silverでは「設計された状態」で「中上級者（GOLD保持者と同等程度）の指導のもと」**コーディングができるレベル**が求められています。
そのため、JavaSE8の「言語仕様（コンパイルも含む）」を正確に理解しているかどうかが重要であり、それらを問う問題が多く出題されています。このレベルは独立して業務遂行するには程遠いレベルである事を認識しておく必要がありそうです。

むしろ、かの有名な「リーダブルコード」で謳っている内容をガン無視した問題コードがたくさん出てくる印象です（笑）

総じて、私なりに考える「Java SE8 Silverを受ける意義」は以下３つかなと。

**【Java SE8 Silverを受ける意義】**
　・Java SE8の言語仕様を正しく理解しているかの確認
　・言語仕様を知っているだけではダメ（設計は大切）だなと気づく機会作り
　・Goldを受験するための権利獲得

ここからも分かるように、Silverを取得するなら学習開始直後が良いかと思います。
（私もJava学習開始１〜２ヶ月ほどで資格試験の学習をはじめました）

#勉強期間
　約１ヶ月程度、実質40〜50時間程度の学習時間を確保しました。

#勉強方法
　ここからは自身の学習を”振り返って”こうすれば効率よかったな。
　と、個人的に思った勉強方法をご紹介します。
　（私がこの通り勉強した訳ではありません(笑))

##　学習教材
　　私は以下２つの教科書を使用して学習を進めていきました。
　　言わずもがなな２大巨頭です^^
　　書籍のタイトルよりも「紫本」や「黒本」と言う呼び方の方が定着していそうですね。

　　**①[オラクル認定資格教科書 Javaプログラマ Silver SE 8(紫本)](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E-Silver-SE-8/dp/4798142735/ref=sxbs_sxwds-stvp?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&cv_ct_cx=java+silver&keywords=java+silver&pd_rd_i=4798142735&pd_rd_r=feb40bd8-d18e-4861-9b1d-b6b7d05ce4b7&pd_rd_w=YZZis&pd_rd_wg=8Im26&pf_rd_p=e29507e3-7937-4495-82f4-55b5d5ca8047&pf_rd_r=MRTJSW74JN2B7D9QKJ29&psc=1&qid=1581226354&s=books&sr=1-3-c03f761f-6f93-450c-9c1a-00281a3cf99c)**
　　　Java SE8 Silverの試験範囲を網羅した「教科書」です。
　　　各章ごとに言語解説・練習問題、最終章は模擬試験という構成になっています。
　　　内容としては、広く浅くと言う印象を受けました。

　　**②[徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応(黒本)](https://www.amazon.co.jp/%E5%BE%B9%E5%BA%95%E6%94%BB%E7%95%A5-Java-Silver-%E5%95%8F%E9%A1%8C%E9%9B%86-1Z0-808/dp/4844339931/ref=sxbs_sxwds-stvp?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&cv_ct_cx=java+silver&keywords=java+silver&pd_rd_i=4844339931&pd_rd_r=feb40bd8-d18e-4861-9b1d-b6b7d05ce4b7&pd_rd_w=YZZis&pd_rd_wg=8Im26&pf_rd_p=e29507e3-7937-4495-82f4-55b5d5ca8047&pf_rd_r=MRTJSW74JN2B7D9QKJ29&psc=1&qid=1581226354&s=books&sr=1-4-c03f761f-6f93-450c-9c1a-00281a3cf99c)**
　　　Java SE8 Silverの試験内容に沿った「問題集」です。
　　　教科書と似たような章立てになっており、最終２章が模擬試験という構成になっています。
　　　問題に対する解説に重点が置かれ、より深い理解を促してくれる印象でした。

###　紫本か黒本か問題(?)

　　どちらを買えば良いか？と言う話がたまに上がりますが、
　　個人的には「学習教材として一方選ベ」と言われたなら**「黒本」**一択だと考えています。
　
　　私が黒本を進める理由は大きく以下２つです。

　**【黒本一択な理由】**
　　① 実際の試験問題と、ほぼ同じ問題ばかりが掲載されている
　　② 問題に対する解説が、紫本より（かなり）丁寧

　　※紫本は「教科書」色が強いので、黒本と比較すると解説はそれほどで、
　　教科書自体をおさらいが必要なイメージでしょうか

　**＜注意点＞**
　黒本は”試験対策”に重きをおいた書籍だと思います。
　そのため、知識が網羅的な訳でも、体系化されている訳でもありません。
　黒本だけで学習を進めて資格試験に合格しても、その試験に合格できた**”だけ”**で肝心の言語仕様への理解が伴っていない可能性大です。

　受験の目的が「資格ホルダー」ではなく、純粋に「Javaの知識・技術向上」なのであれば、黒本だけ２周、３周して合格するだけではNGと考えましょう〜。

##　学習全体の流れ
　ここまでの説明を踏まえ、私はこんな感じで試験勉強を進めていくのが良いのかなと考えています。

　　⓪前提[Java初学本]

　　①[黒本１章〜９章]
　　　↓　(１章ずつ繰り返し)
　　　↓　　①-1 [黒本１章分]問題を解く
　　　↓　　↓
　　　↓　　①-2 答え合わせ／回答確認
　　　↓　　↓　＜補足学習＞
　　　↓　　↓　　①-2-1　[紫本(黒本の該当章に対応する内容)]又は、ネットで深堀
　　　↓　　↓　　　　　＋
　　　↓　　↓　　①-2-2　実機で挙動の確認
　　　↓　　↓
　　　↓　　①-3 [黒本１章分]2周目
　　　↓
　　②[黒本模擬試験①]
　　　↓
　　③[黒本模擬試験②]
　　　↓
　　④[紫本模擬試験]
　　　↓
　　⑤[黒本をもう一周やってみる]３週目（模擬試験だけもありかも）

##　各学習の補足説明
　そんなに中身ないですが、各学習の流れごとの補足説明です。

　ちなみに私は、[紫本]→[黒本]の順番、且つ全章通しで学習を進めました。
　ですが、紫本を何の観点や目的意識も持たずに読むと、読了後頭に何も残っていない自分に愕然とすること請け合いです。何せJava初学者本を読んだ後なら「これくらいは知ってるかな〜」ぐらいの軽い気持ちで流し読みしちゃうので^^
　Silverは重箱の隅をつつくような「言語仕様」を問う傾向がある事を念頭に置いて、粘着質に動きを追って行くくらいでなくちゃです！

　また、より粘着質になるなら１章ごとがお勧めかと（笑）

###　⓪ 前提[Java初学本]
　　全く無知識からの受験は「別の言語やってました」じゃない限り結構キツイのではないかと思います。まずは「スッキリわかるJava入門」あたりを眺めてみるのも良いかと^^
　（私はサラッと流し読みした程度ですが）

###　①[黒本１章〜９章]
　　最初に説明したとおりです！
　　ただ、黒本は体系的、網羅的ではありません。
　　問題で問われた挙動の周辺仕様や異なるパターンでの動きを確認しておく必要があります。

　　特に解説で「**何となく理解**したつもり」になっている可能性を考慮し、①-2であげたように紫本やネットで知識を補完しつつ、その理解が合っているかを実機で試しながら進めるのがオススメです。

　　※この段階でJava初学者本で知識を補おうとするのはオススメしません。
　　 なぜならJava SE8 Silverの知識体系と同期をとった章立てとなっていない場合、効率が上がらずストレスを感じる可能性が高いからです。（もちろん読むのは大切です。こちらは効率の観点からだけの意見です）

　**＜実機確認に便利なサイト＞**
　実機確認と言っても、環境準備が面倒とか思っちゃうかもしれません。
　ですが、今はクラウド実行環境を無償で提供してくれる素晴らしいサイトも存在するので、うまく活用してみてください^^

　**クラウド実行環境**：[paiza.io(https://paiza.io/ja)](https://paiza.io/ja)
>paiza.IOはオンラインですぐにプログラミングが始められる、 オンライン実行環境です。C,C++,Java,Ruby,Python,PHP,Perlなど 主要24言語に対応。ファイルアップ機能、外部apiへの接続や、 スクレイピングなども可能です。

　※ただ、紹介したクラウド実行環境ではデバッグ機能は無いので、痒いところに手が届く…とまでは行きません^^;

　**＜知識補完の役立ち情報＞**
　黒本作者の方が、YouTubeで分かり易い解説動画をアップされています。
　Silver向け、Gold向けなどのラベリングもしてくださっています。
　「今一理解できない・・・」と言う機能があれば、こちらを是非ご活用ください^^

　**黒本先生のやさしくない!?Java**：
　https://www.youtube.com/channel/UC42DlV-0RDb6fJ8A3IbAang

　また、定期的にオンラインもくもく会も開催されていたり、
　Twitterで「黒本 Java」などをキーワードに不明点呟くと神対応いただけたりします（笑）

　**(Java試験)オンラインもくもく会**：
　https://javakuro.connpass.com/event/

###　②〜⑤ [模擬試験]
　　最低１回分、模擬試験は試験前日まで残しておく事をオススメします。
　　その理由は簡単で、試験前日に**「区切り」**をつけやすくするためです。「？？」と思われるかもしれませんが、Java SE8 Silverは重箱の隅をつつくような問題が出題されます。
　　これは、受験時に知識と合わせて「集中力」や「慎重さ」が求められるという事です。
　　（特に私の集中力が弱いからかもしれませんが///）

　　そのため、試験前日に自分の到達度がわからず、無理して夜更かしする事の無いよう、少なくとも１回分の模擬試験を残しておきます。そして、前日にその模擬試験で到達度を確認し、合格点(正答率65%)に達しているなら無理せず早めに休むのです！これが意外と大事^^
※集中力切れて、引っ掛け問題などにまんまとハマったとか残念すぎます笑

　　ちなみに、残しておいた模擬試験の私の初回正答率は70%ほどでギリギリでした！
　　ですが、最後に模擬試験の振り返りをして、翌日受験した結果は以下の通り、無事合格できました。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/445937/34ee6e15-0a79-6297-a213-10dfeecdff56.png)

　※正答率としては、あまり高い方では無いです^^;
　 会社で研修などを受けて、受験される方は90%がほとんどだとか…？（知らないですが）

#試験当日について
あまり意味ないんですが補足です（・ω・）

##　え？写真撮るの？
　試験会場では、受付の後に資格者ライセンスに掲載される写真撮影があります！！！
　私は何も考えず、マスク・すっぴん・超ラフな格好で行ったので、若干後悔しました(笑)

　どこかに出るようなものでは無いと思いますが、何となく気になると言う方は、それを念頭に置いて準備してください。

##　問題はどこから確認する？
　私は試験問題を確認する際、頭から読むのではなく、``public static void main(String args[]){}``から確認するようにしていました。その方が「このコードが一体何をしようとしているか？」が把握しやすく、確認効率が上がります。
　ただし、その為に他のクラス確認を疎かにすると確実に引っ掛けにハマるので注意です^^;

#受験後にやりたいこと
　Silver受かったならGoldだ〜！
　と、なりそうですが、折角基礎を覚えたのですから少し横道に逸れてみる事をオススメします。特に受験後に「リーダブルコード」を読み返すと、すごく共感できると思います（笑）

　**【受験後に読もうとしている書籍】**
　　①[リーダブルコード](https://www.amazon.co.jp/%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89-%E2%80%95%E3%82%88%E3%82%8A%E8%89%AF%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E6%9B%B8%E3%81%8F%E3%81%9F%E3%82%81%E3%81%AE%E3%82%B7%E3%83%B3%E3%83%97%E3%83%AB%E3%81%A7%E5%AE%9F%E8%B7%B5%E7%9A%84%E3%81%AA%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-Theory-practice-Boswell/dp/4873115655/ref=sr_1_1?adgrpid=56076398369&gclid=CjwKCAiA1fnxBRBBEiwAVUouUh9mXfbSVXdTd42uiMK73RLUk-rFVg6eRPo5l9fw7cdSFUrbB_ss2BoCOYoQAvD_BwE&hvadid=338571512561&hvdev=c&hvlocphy=1009300&hvnetw=g&hvqmt=e&hvrand=17317945604576479049&hvtargid=kwd-334758528225&hydadcr=27298_11561624&jp-ad-ap=0&keywords=%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89&qid=1581227354&sr=8-1)　　 
　　②[リファクタリング](https://www.amazon.co.jp/%E6%96%B0%E8%A3%85%E7%89%88-%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0-%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%89%E5%85%A8%E3%81%AB%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B-%EF%BC%AD%EF%BD%81%EF%BD%92%EF%BD%94%EF%BD%89%EF%BD%8E%EF%BC%A6%EF%BD%8F%EF%BD%97%EF%BD%8C%EF%BD%85%EF%BD%92-ebook/dp/B01IGW5MG0/ref=sr_1_3?adgrpid=53410801196&gclid=CjwKCAiA1fnxBRBBEiwAVUouUgdQv3X5yUys1QP8GSdTtlP6igOF5HQ0nYSH4LvRv56vDr-Ne1UONBoCKrEQAvD_BwE&hvadid=338538888616&hvdev=c&hvlocphy=1009300&hvnetw=g&hvpos=1t1&hvqmt=e&hvrand=8672180262974052118&hvtargid=kwd-332457176306&hydadcr=27266_11561145&jp-ad-ap=0&keywords=java+%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0&qid=1581227392&sr=8-3)　　
　　③[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030/ref=sr_1_8?adgrpid=53410801196&gclid=CjwKCAiA1fnxBRBBEiwAVUouUgdQv3X5yUys1QP8GSdTtlP6igOF5HQ0nYSH4LvRv56vDr-Ne1UONBoCKrEQAvD_BwE&hvadid=338538888616&hvdev=c&hvlocphy=1009300&hvnetw=g&hvpos=1t1&hvqmt=e&hvrand=8672180262974052118&hvtargid=kwd-332457176306&hydadcr=27266_11561145&jp-ad-ap=0&keywords=java+%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0&qid=1581227392&sr=8-8)
#さいごに
　私も、Javaを勉強し始めたばかりの初心者なので、偉そうなことは言えません（言ってるけど（汗）
　そして、Goldに向け絶賛勉強中（上であげた書籍を再読中）です！

　今年中にGOLDも受けたいと思っているので、受験したらGOLD版もまとめようと思います。

# おまけ
　試験勉強時に色々調べた内容を別Qiitaとして整理していこうと考えています。
　よろしければ参考にしていただき、間違いなどあれば教えていただけると嬉しいです！！
　（今後、増やして行く予定…）

　**【試験対策用のまとめ】**
　　・[単項演算子(++,--)の前置や後置めも](https://qiita.com/ozackiee/items/c9df9797e4fc59889290)