生きづらいぼくたちが生き抜くために
ひとつでも多くの知識を
知恵にできますように
はじまり

Java Silver に合格した!ので、勉強時間・勉強法・使った参考書とか難易度感とか書きます。

f:id:HrkPPOI:20170820181359j:plain

おかげさまで無事に Java Silver の試験に合格することができました(85点得点。合格点は63点)

やったぜ!

※ ガチめに解説しているので、お目当の箇所に合わせて移動してくださいね。

Java Silver 試験とは?

Java Silver 試験がそもそも何なのかと言うところから書きますね。

資格の名称

まず Java Silver とは、Oracle Certified Java Programmer, Silver SE 8 認定資格 の通称です。1Z0-808-JPN Java SE 8 Programmer I 試験 に合格することで、Oracle から認定してもらえます。ちなみに、似た資格で Java Bronze と Java Gold もあります。Bronze が一番カンタンで、Silver が中間で、 Gold が難しい。

認定資格名 前提資格 合格すべき試験
Oracle Certified Java Programmer, Bronze SE 7 / 8 認定資格 なし 1Z0-814-JPN Java SE 7 / 8 Bronze 試験
Oracle Certified Java Programmer, Silver SE 8 認定資格 なし 1Z0-808-JPN Java SE 8 Programmer I 試験
Oracle Certified Java Programmer, Gold SE 8 認定資格 Oracle Certified Java Programmer, Silver SE 8 認定資格 など(※) 1Z0-809-JPN Java SE 8 Programmer II 試験

Java 8 よりも前のヴァージョンで Gold と同等の試験に合格している人は、移行試験を受けることができます。詳しくはこちら

資格の概要

公式によると、資格概要は↓。

Oracle Certified Java Programmer, Silver SE 8 認定資格は、Javaアプリケーション開発に必要とされる基本的なプログラミング知識を有し、上級者の指導のもとで開発作業を行うことができる開発初心者向け資格です。

── Java SE 8 認定資格 | オラクル認定資格制度 | Oracle University

ミソなのは「基本的なプログラミング知識」というところです。内容はあくまでも基本的なところに限定されています。研修でひととおり勉強して、業務で触ったことあるとかなら、内容面では苦労しないでしょう。オブジェクト指向分けわからんって人はちょっと苦労します。

ただ、資格試験は実機でのコーディングとは勝手が違います。

実機でのコーディングなら検索し放題(ただし、現場による)だしコンパイルエラー確認し放題(ただし、現場による)。「趣味でプログラミングやってました、Java 使ってました」とといったタイプの人は試験形式に困惑するはずです。ぼくは Bronze 受けた時に「紙で考えるのむずい!!」って思った記憶があります。 資格試験は「1回目で正しい答えを出す」チカラが求められます。その点は対策必要です。

Java Silver はネットで「ほとんど対策しないで受かった」的な記事もありますが、「ほとんど対策しなかったら落ちた」という人は基本的にわざわざ時間を割いてブログなんか書きません。注意しましょう。

試験範囲

以下は公式ページ「トピック」より。

Javaの基本

  • 変数のスコープを定義する
  • Javaクラスの構造を定義する
  • mainメソッドを含む実行可能なJavaアプリケーションを作成する、コンソール出力など、コマンド・ラインからJavaプログラムを実行する
  • 他のJavaパッケージをインポートしてコードでアクセスできるようにする
  • プラットフォームの非依存性、オブジェクト指向カプセル化などのJavaの機能やコンポーネントを比較対比する。

Javaのデータ型の操作

  • 変数を宣言および初期化する(プリミティブ・データ型のキャストを含む)
  • オブジェクト参照変数とプリミティブ変数を区別する
  • オブジェクトのフィールドに対する読取りと書込みの方法を理解する
  • オブジェクトのライフサイクル(作成、再代入による間接参照、ガベージ・コレクション)について説明する
  • Boolean、Double、Integerなどのラッパー・クラスを使用するコードを開発する

演算子と判定構造の使用

  • 演算子の優先順位を変更するカッコを含む、Java演算子を使用する =- =とequals()を使用して文字列と他のオブジェクトが等しいかどうかをテストする
  • ifおよびif/else構造や3項構造を作成する
  • switch文を使用する

配列の作成と使用

ループ構造の使用

  • whileループを作成および使用する
  • 拡張forループを含むforループを作成および使用する
  • do/whileループを作成および使用する
  • ループの構造を比較する
  • breakとcontinueを使用する

メソッドとカプセル化の操作

  • 引数と戻り値があるメソッド(オーバーロードされたメソッドを含む)を作成する
  • staticキーワードをメソッドとフィールドに適用する
  • コンストラクタを作成およびオーバーロードする(デフォルト・コンストラクタへの影響を含む)
  • アクセス修飾子を適用する
  • カプセル化の原則をクラスに適用する
  • 値を変更するメソッドに渡した場合のオブジェクト参照とプリミティブ値に対する影響を判断する

継承の操作

  • 継承とそのメリットについて説明する
  • 多態性の使用方法(オーバーライドおよびオブジェクト型と参照型など)を示すコードを開発する
  • キャストが必要なタイミングを判断する
  • superとthisを使用してオブジェクトとコンストラクタにアクセスする
  • 抽象クラスとインタフェースを使用する

例外の処理

  • チェック例外、非チェック例外およびエラーを区別する
  • try/catchブロックを作成し、通常のプログラム・フローが例外によってどのように変更されるかを判断する
  • 例外処理の利点について説明する
  • 例外をスローするメソッドを作成して呼び出す
  • 一般的な例外クラス(NullPointerException、ArithmeticExcpetion、ArrayIndexOutOfBoundsException、ClassCastExceptionなど)を見分ける

Java APIの主要なクラスの操作

  • StringBuilderクラスおよびそのメソッドを使用してデータを操作する
  • 文字列の作成と操作
  • java.time.LocalDateTime、java.time.LocalDate、java.time.LocalTime、java.time.format.DateTimeFormatter、java.time.Period の各クラスを使用してカレンダーのデータを作成および操作する
  • 特定の型をもつArrayListを宣言および使用する
  • Predicate式を返す簡単なラムダ式を記述する(→後記「ラムダ式は割り切れ」参照)

合格体験記っぽいやつ

以下はぼくの合格体験記っぽい内容です。

前提知識

今年の5月に、会社に命じられて、Java Bronze に合格しています。仕事で Java の基本を教えることもあるので、「基本レベルに限定すれば」割とまんべんなく知っているほうだと思います(教えるためにがんばって調べた)。JSP&Servletもちょっぴり分かります。

反面、試験受験時では開発経験がまだないので、「現場に出て入れば当たり前に知っていること」で知らないこともいっぱいあります。フレームワークとか使ったことないです。

また、手を動かすことに抵抗はないですし、デバッガも最低限動かせます。Java Silver では「このプログラムを実行すると結果はどうなるか?」的な問題が結構出ますので、挙動に疑問が出た時は1行ずつ動かして確認しました。

使ったテキスト

使ったのは以下の2冊です。

オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問題集

オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問題集

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応

スピードマスターの方をまず1周解いて、分からないところをネットで調べたり自分で動かして確認したりしました。その後、巻末の模擬試験を解いたら、77問中61問正答で正答率は79%でした。

時間に余裕があったので徹底攻略問題集も模擬試験だけ実施。2回分ついてましたが、両方とも77問中65問正答で73%でした。

最後に、徹底攻略問題集の模擬試験の1回目についてだけ、解説を読んで、なるべく自分でサンプルコードを書いたりしました。

勉強時間

試験対策そのものにかけた時間は、およそ25〜30時間くらいです。

最初は受験日を決めずにダラダラと電車の中で勉強していました。が、最近、ちょっとまとまった時間が取れそうだったので、一気に3日半ほど勉強し、そのままその日の夕方に受験してきました。

ただ、前述のように、ぼくは Java プログラミングの未経験者ではありません。もし完全初学者だったらどのくらい時間がかかるのかはまったく謎です。

感想・反省

正直、徹底攻略問題集は要らなかったと反省しています。

要らないというよりかは、その時間でスピードマスターの復習した方が良かったです。結局、徹底攻略問題集は、3000円以上払って買って、模擬試験2個解いて、そのうちの1個を復習しただけ……。

ただ、徹底攻略問題集は、「模擬試験を解いてダメそうだったら、一番正答率の低い分野の単元別問題をしらみつぶす」と決めて買ったものなので、要らなかったというのは結果論だとも言えます。

ぼくのかんがたさいきょうのべんきょうほうほう

平均的な Java Silver 受験者層に最も効率の良い勉強法は、以下の通りです。

なお、平均的な Java Silver 受験者層とは「Java でのプログラミング経験または研修経験があるが、胸を張って『開発経験がある』とは言えない」層です。本買って読んだことあるとか、見よう見まねで Android アプリ作ったとかも含みます。

勉強法

  1. スピードマスターを解く
  2. 間違えたところはコードを書いて確かめる
  3. 分からないところはネットで調べる。そしてコードを書いて確かめる。

世間では「問題集を◯集して合格する」というのが資格試験の王道です。

でも、プログラミングの王道ではありません(DRY*1原則!)。

3回読むよりも、1回書いて動かしてみるほうが覚えます(書くだけじゃダメ)。3回解くよりも、1回デバッグして1行ずつ動きを追うほうが理解できます。大事なことは「経験してみる」ことです。

あとこれはぼくだけかもしれませんが、「本を読み続ける」という行為には大量の MP を消費します。ぼくは非常に気移りしやすいので、「ただ黙々と読む」のはキツイ。でも、せっせと手を動かすのはそれほど苦ではありません。

平均的な Java Silver 受験層は、このあと Gold を受ける予定で、まあそこそこプログラム好きだよってところだと思います。仕事の合間に、どれだけ効率よく、どれだけ楽しく勉強できるかです。どれだけ「資格のお勉強」に陥らないかの勝負だと思います。

試験時間内に解くために模試をいっぱい解く必要があるのか?

ぼくが模擬試験を3回もやったのは「試験形式に慣れることで、時間切れを防ぐ」ためでした。

というのも、ぼくは短期記憶力が低めで、頭の中で複数の物事を覚えていられません。そのため、日常生活から普通の人と比べるとメモの量が多いです。試験で言えば、ほかの人が暗算するところをチマチマ筆算する必要があるってことなので、その分時間が足りなくなりそうだと思ったのです。

しかし実際に試験は、2時間半の試験時間に対して30分以上余りました。

もちろんメモしまくりです。試験監督のお姉さんにメモ用紙の交換を4回も頼みました(本当にありがとうございました)。 なので、基本的に時間配分だの時間切れだのは意識する必要はありません。むしろ時間切れになる人がいるとしたら、基本制御文の流れを理解できていなくてウンウン悩むとかだと思います。それこそデバッグして動きを確かめようぜって感じです。

ラムダ式は割り切れ

平均的な Java Silver 受験者層だと、結構なかたが「ラムダあんまりわかんないんだよね」ってなるかと思います。

でもね。割り切りましょう。

ラムダ式はちょっとしか出ませんし、出るのも「Predicate式を返す簡単なラムダ式」に限定されています。Stream API も出ません。

ラムダ式は真面目にやると鼻血が出ます(ぼくは以前真面目にやって鼻血出た)。そして、試験問題には問題集とほとんど同じ形式の問題が出ます(出ました)。

対策は最低限に絞ります。

ラムダ式を知っている人のところに行きましょう。ビールとノートPCを持っていくか、1回ビールを奢るといいでしょう。

問題集のコードを見せて、「このコードについて教えて」と聞きましょう。Predicate って何とか、この謎の矢印何とかいろいろ聞きましょう。Stream って言葉が出たら「あっ、そういうのは今はいいです」って言いましょう。関数型インターフェイスって言葉が出ても「あっ、そういうのは今はいいです」って言いましょう。匿名内部クラスって言葉が出ても同様です。

「それじゃ説明できないよ」と言われるかもしれませんが、そこはコミュ力を発揮して粘ってください。

ビールでも飲みながら2時間くらいあーだこーだ話して、その場でコードを書いて動かしましょう。で、問題集に載ってるコードが分かったら、そこで学習を止めましょう。続きは Silver 合格後にしましょうね。

Java8ではじめる「ラムダ式」 (I・O BOOKS)

Java8ではじめる「ラムダ式」 (I・O BOOKS)

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

Javaによる関数型プログラミング ―Java 8ラムダ式とStream

これで試験問題は得点できますし、得点できなくても多分1問なのでその時は諦めてください。

繰り返すけど、スピードマスターで足りるよ。でも、徹底攻略問題集やってもいいと思う。

ネットだと「スピードマスターは易しすぎる」といった意見もあります。ぼくも「そうかも!」と思って徹底攻略問題集書いました。

まあ実際、スピードマスターは易しいです。

易しいですが、理解してれば試験は十分受かります。分からなかった問題を実装してセコセコ動作確認していれば受かります。解説読んで分からなかった問題をネットで調べれば受かります。

徹底攻略問題集を買う3000円があったら、ビールでも飲んだいほうがいいですよ。余計な模試を2回解くくらいならその時間で寝たほうがいいですよ。

……とまあ、散々言ったわけですが。

それでも徹底攻略問題集をやるって気持ちはよく分かります。

だってこの試験、受験料3万円弱しますからね。Gold ならまだしも、Silver で再受験食らったら泣くほどキツイです。3万円あったら技術書が10冊買えます。

なので「これは保険なんだ。万全を期したいんだ!」というのは大いにアリだと思います。僕がそうでしたから。

次は Gold だ!

偉そうなことを言いましたが、所詮は Gold へと至る途中の資格です。お互いこのくそったれな業界を生き抜きましょう!

▼この記事が参考になった方はビール奢ってください!!(非リア男性尚可、彼氏募集中の女性尚可)

オラクル認定資格教科書 Javaプログラマ Silver SE 8

オラクル認定資格教科書 Javaプログラマ Silver SE 8

オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問題集

オラクル認定資格教科書 Javaプログラマ Silver SE 8 スピードマスター問題集

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応

徹底攻略 Java SE 8 Silver 問題集[1Z0-808]対応

スッキリわかるJava入門 第2版 (スッキリシリーズ)

スッキリわかるJava入門 第2版 (スッキリシリーズ)

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

*1:Dont Repeat Yourself