こんにちは、takaです!
2019年2月に、念願の「Java Gold SE8」に合格しました!
「Java Gold」は、Javaプログラマ認定資格の最難関資格として位置づけられています。
私が合格するまでに勉強した時間は≪約1か月≫。
今回は、
・私が試験対策に使った参考書(一冊で合格)
・1か月で合格することができた勉強法
・試験を終えた今だからこその実践的なアドバイス
について紹介していきたいと思います!
Contents
Oracle認定資格「Java Gold」とは
まず「Java Gold」とは通称で、
正式には「Oracle Certified Java Programmer, Gold SE 8」という資格名称です。
「1Z0-808-JPN Java SE 8 Programmer Ⅱ」という試験に合格することで、
Oracle社から「Java Gold認定者」として認められることになります。
「Java Gold」の難易度は?
Oracle社が実施しているJavaプログラマ認定資格には3種類の試験があります。
認定資格の種類は、
- Java Gold
- Java Silver
- Java Bronze
の3種類あり、難易度はGoldが一番高いです。
概要は以下の通りです。
【Java SE8 認定資格の種類】
資格名称 | 前提資格 | 試験名称 | 難易度 | 対象者 |
---|---|---|---|---|
Java Gold | 「1Z0-808-JPN Java SE 8 Programmer I」に合格 | 1Z0-809-JPN Java SE 8 Programmer II | ★★★ | 中上級者 |
Java Silver | - | 1Z0-808-JPN Java SE 8 Programmer I | ★★ | 開発初心者 |
Java Bronze | - | 1Z0-814-JPN Java SE 7/8 Bronze | ★ | 言語未経験者 |
上記の通り「Java Gold」について、Oracle社が受験対象にしているのは「開発中上級者向け」となります。
また、「Java Gold」を受験するためには、前提資格として「Java Silver」に合格している必要があります。
Oracle Certified Java Programmer, Gold SE 8 認定資格は、設計者の意図を正しく理解して独力で機能実装が行える中上級者向け資格です。Javaアプリケーション開発に必要とされる汎用的なプログラミング知識を有し、設計者の意図を正しく理解して独力で機能実装が行える能力評価することを目的としています。(http://www.oracle.com/jp/education/certification/jse8-2489021-ja.html)
「Java Gold」は「開発中上級者向け」の資格というだけあり、「Java Silver」に比べ合格者数が少ないです。また、「Java Silver」の合格体験談に比べて「Java Gold」の合格体験談はネットの記事数が多くありません。
そこで、今回は「Java Gold」合格取得までに使った参考書・模擬試験・勉強法について詳細に記載していきたいと思います!
「Java Gold」の試験概要は?
「Java Gold」の試験概要は以下の通りです。
■試験概要
・試験名:Java SE 8 Programmer Ⅱ
・試験時間:150分
・問題数:85問
・合格ライン:65%
・受験料:26600円(税抜き)
・試験方法:選択式
・試験時期:年中受験可能(テストセンターを予約して受験)
上述の通り、単純計算で「1問あたり約1分40秒」で問題を解かなければいけません。「Java Silver」は150分の試験時間で「77問」であるため、「Java Silver」よりも試験時間がタイトになっています。また、問題の内容については、「Silver」同様ソースコードを読解する問題が多く、試験でじっくり考えながら問題を解く時間はありません。そのため、試験対策で「問題の特徴&試験問題の傾向」をしっかり把握しておく必要があります。(試験対策は後述します!)
「Java Gold」の試験範囲は?
「Java Gold」の試験範囲については以下の通りです。(公式「試験内容」より)
■試験範囲
Java
- カプセル化を実装する
- アクセス修飾子やコンポジションを含む継承を実装する
- ポリモーフィズムを実装する
- オブジェクト・クラスの hashCode、equals および toString メソッドをオーバーライドする
- シングルトン・クラスと不変クラスを作成および使用する
- 初期化ブロック、変数、メソッドおよびクラスでキーワード static を使用する
高度なJavaクラスの設計
- 抽象クラスおよびメソッドを使用するコードを作成する
- キーワード final を使用するコードを作成する
- 静的な内部クラス、ローカル・クラス、ネストしたクラス、無名内部クラスなどの内部クラスを作成する
- メソッドやコンストラクタが列挙型内にあるものを含めて、列挙型を使用する。
- インタフェースを宣言、実装、拡張するコードを作成する。@Override 注釈を使用する
- ラムダ式を作成および使用する
ジェネリクスとコレクション
- ジェネリクスクラスを作成および使用する
- ArrayList、TreeSet、TreeMap および ArrayDeque オブジェクトを作成および使用する
- java.util.Comparator およびjava.lang.Comparable インタフェースを使用する
ラムダ組込み関数型インタフェース
- Predicate、Consumer、Function、Supplier など、java.util.function パッケージに含まれている組込みインタフェースを使用する
- プリミティブ型を扱う関数型インタフェースを使用する
- 2つの引数を扱う関数型インタフェースを使用する
- UnaryOperator インタフェースを使用するコードを作成する
コレクション、ストリームおよびフィルタ
- コレクション、ストリームおよびフィルタ
- ストリームのインタフェースとパイプラインについて説明する
- ラムダ式を使用してコレクションをフィルタリングする
- ストリームとともにメソッド参照を使用する
JavaストリームAPI
- 基本バージョンの map() メソッドを含む peek() および map() メソッドを使用してオブジェクトからデータを抽出する
- findFirst、findAny、anyMatch、allMatch、noneMatch などの検索メソッドを使用してデータを検索する
- Optional クラスを使用する
- ストリームのデータ・メソッドと計算メソッドを使用するコードを作成する
- ストリーム API を使用してコレクションをソートする
- collect メソッドを使用してコレクションに結果を保存する。Collectors クラスを使用してデータをグループ化/パーティション化する
- flatMap() メソッドを使用する
例外とアサーション
- try-catch および throw 文を使用する
- catch、multi-catch および finally 句を使用する
- try-with-resources 文とともにAutoclose リソースを使用する
- カスタムな例外と自動クローズ可能なリソースを作成する
- アサーションを使用して不変量をテストする
Java SE8の日付/時刻APIを使用する
- LocalDate、LocalTime、LocalDateTime、Instant、Period および Duration を使用して日付と時刻を単一オブジェクトに結合するなど、日付に基づくイベントと時刻に基づくイベントを作成および管理する
- 複数のタイムゾーン間で日付と時刻を操作する。日付と時刻の値の書式設定など、夏時間による変更を管理する
- Instant、Period、Duration および TemporalUnit を使用して、日付に基づくイベントと時刻に基づくイベントを定義、作成および管理する
JavaのI/Oの基本
- コンソールに対してデータの読取り/書込みを行う
- java.iopackage の BufferedReader、BufferedWriter、File、FileReader、FileWriter、FileInputStream、FileOutputStream、ObjectOutputStream、ObjectInputStream および PrintWriter を使用する
JavaのファイルI/O(NIO2)
- Path インタフェースを使用してファイルおよびディレクトリ・パスを操作する
- カプセル化を実装する
- NIO.2 とともにストリーム API を使用する
Javaの同時実行性
- Runnable と Callable を使用してワーカー・スレッドを作成する。 ExecutorService を使用してタスクを同時に実行する
- スレッド化の潜在的な問題であるデッドロック、スタベーション、ライブロックおよび競合状態を識別する
- キーワード synchronized と java.util.concurrent.atomic パッケージを使用してスレッドの実行順序を制御する
- CyclicBarrier や CopyOnWriteArrayList など、java.util.concurrent のコレクションとクラスを使用する
- 並列 Fork/Join フレームワークを使用する
- リダクション、分解、マージ・プロセス、パイプライン、パフォーマンスなど、並列ストリームを使用する
JDBCによるデータベース・アプリケーションの作成
- Driver、Connection、Statement および ResultSet インタフェースと、プロバイダの実装に対するこれらの関係など、JDBC API の中核を構成するインタフェースについて説明する
- JDBC URLなど、DriverManager クラスを使用してデータベースに接続するために必要なコンポーネントを識別する
- ステートメントの作成、結果セットの取得、結果の反復、結果セット/ステートメント/接続の適切なクローズを含め、問合せを発行しデータベースから結果を読み込む
ローカライズ
- アプリケーションをローカライズするメリットについて説明する
- Locale オブジェクトを使用してロケールを読み取り設定する
- Properties ファイルの作成と読取りを行う
- 各ロケールについてリソース・バンドルを作成し、アプリケーションでリソース・バンドルをロードする
試験範囲は上記の通りです。「Java Silver」では、「開発初学者」向けの試験として、単純な構文仕様の基本知識が問われる試験となっていましたが、「Java Gold」については「関数型プログラミング」という新しい視点を取り入れており、「Java Silver」では数問しか出題されなかった「ラムダ式」や「ストリームAPI」という新しい構文仕様やライブラリについても理解することが求められる試験になっています。
また、「Java Gold」は「Java Silver」で出題される問題については全て理解していることが前提条件となっているため、基本知識を理解した上で試験対策に臨むことになります。
「Java Gold」を受験する価値は?役に立つのか?
「Java Gold」については上述したように、「Oracle Javaプログラマ認定資格」の最難関資格として位置づけられています。またOracleという世界的にメジャーであるベンダーの認定資格であるため、世界的に見ても価値のある資格として認知されています。「Java Gold」を取得するメリットは以下の通りです。
Javaの知識を有しているアピールになる
「Java Gold」は、実務経験が豊富な人でも、試験に合格することは難しいとされています。そのため、「Java Gold」を取得すると、客観的に「Javaの知識を有しているプログラマである」という証明になります。また、Javaという言語は公共システムや金融システムなど、あらゆる大規模システムで採用されている言語のため、転職をする際にも「Java Gold」という資格が有利に働くこともあるでしょう。
Java SE8の構文仕様を理解しているという証明になる
「Java Gold SE8」は、「関数型プログラミング」という新しいパラダイムが取り入れられ、「ラムダ式」「ストリームAPI」等の新しい構文仕様が取り入れられています。
多くの開発現場では、「Java SE8」を使用したことがないプログラマが大多数です。しかし、Java SEは定期的に最新版が公開されており(最新:Java SE 12(2019/05/26現在))、今後は「Java SE8」をシステム開発の現場で使用することもどんどん増えていくでしょう。「Java SE8」に準拠した「Java Gold」所持しているというのは、その知識を証明するものになります。もちろん、転職市場においても「SE7以前の仕様しか分からない人」よりも、「SE8の仕様している人」の方が、SE8を開発の取り入れている現場では即戦力になるため、有利に働くでしょう。
今後もJavaは開発言語の主流として需要がある
新しい言語が台頭してくる中でも、Javaは今後も主流言語として使用されるというのが大方の予想になっています。理由は3点。
- 既存システムがJavaで作られている場合、システムへの機能追加や保守・運用はJavaで行われる点。大規模なシステムでは、多言語へのコンバートは膨大な費用がかかる、また、高リスクであることから、大きな不都合が生じない限りはJavaで行われると考えられます。
- Javaという言語は、長年の実績がある点。新しい言語を利用することになるとリスク調査に時間がかかりますが、Javaなら既に実績が証明されているため、企業からしたらJavaという言語は採用しやすい。
- Javaプログラマの人口が多い点。新規に大規模システムを開発する場合、企業は自社メンバだけでなく、Javaが使える人材をビジネスパートナー企業からアサインすることが多いです。Javaを採用すれば、IT人材不足と言われている現在でも、人集めに困らないと考えられます。
以上の3点から、「Java Gold」を取得する価値は大いにあると考えられます。
「Java Gold」で使用した参考書
それでは、私が「Java Gold」の受験で使った参考書について書いていきます。
前提知識
2018年7月に「Java Silver」取得。会社での開発経験は少しだけ。(受験当時:約4Kstep)
JavaSE8の実務経験はゼロ。
使用したテキストはこれ!
私が「Java Gold」の資格勉強で使用した参考書は
一冊です!
この本は、通称「黒本」と呼ばれています。
以下で「黒本」がおすすめな理由について書いていきます。
▼「徹底攻略Java SE 8 Gold問題集」
「Java Gold」の参考書で「黒本」がおすすめな理由
「黒本」がおすすめな理由は2つあります。
「1つ目」は、解説がとにかく丁寧な点です。黒本の解説は、他の参考書に比べて1問あたりの解説が長いです。でも、冗長という訳ではなく、基礎的なことを省略せずに丁寧に説明しています。また、解説ページには多くの「図解」が掲載されています。「Java Gold」の問題は複雑な処理が多いため、文字だけを読んで一度で理解することはなかなか難しいです。その際に処理を図解して説明してくれるのは、理解の助けになります。(私は分かりやすい図解にかなり助けられました。)
「2つ目」は、黒本に載っている問題に類似した問題が試験で出題されるからです。「Java Silver」の参考書でも解説しましたが、「黒本」は試験対策に特化した参考書です。そのため、黒本に載っている問題と類似した問題が試験で多く出題されます。
私の所感ですが、「Gold」の場合は「Silver」ほど、試験で参考書と類似した問題が出題されているとは感じませんでした。とはいえ、「3割くらい」は類似した問題が出題されていたと思うので、解いておく価値は十分にあると思います!
私は「Java Gold」に関しては、「黒本」一冊&1か月の勉強期間で合格することができたため、社会人で勉強時間があまり確保できない人、最短で合格したい人、スキマ時間の勉強で合格したい人には、この参考書をおすすめします。
「Java Gold」でおすすめの勉強法
「徹底攻略Java SE 8 Gold問題集」を使った学習法を紹介していきます。
まず、「Java Silver」の時と同様に、参考書は「Kindle版」を購入しました。理由は、スキマ時間を最大限に活用して勉強するため。「Kindle版」なら往復の通勤時間・昼休憩の時など、スキマ時間を見つけてスマホで問題を解く事ができます。
また、「Kindle版」だと、間違えた問題と解説についてはスクショして保存しておくことができ、自分専用の間違えた問題リストを作成することができます。これなら、間違えた問題を超効率的に復習することができます。「Kindle版」を活用した超効率的な勉強法は、以下の記事を参照いただければと思います。
Java Silver SE8に《2週間》で合格!参考書と超効率的な勉強法を紹介!【合格体験談】「Java Gold」の試験の特性
「Java Gold」については、とにかく暗記することが多いです。「Java Silver」では、基本構文を理解することで問題を解くことができました。しかし、「Java Gold」については、メソッドや戻り値について暗記していなければ解けない問題がほとんどです。そのため、試験合格までのステップとしては、「複雑な処理について理解する」&「暗記事項をしっかり覚え、すぐに頭から取り出せるようにしておく」という2つの作業が必要になります。
「複雑な処理について理解する」については、「黒本」の解説を熟読し、問題数をこなしていくことで理解できるようになると思います。「暗記事項をしっかり覚え、すぐに頭から取り出せるようにしておく」については、問題を解いていく中で、「暗記事項」を別途でノートに一覧としてまとめ、写真を撮って保存しておき、スキマ時間に見直すという方法が効果的だと思います。
私が行った勉強内容については以下の通りです。
- 黒本の1~10章
- 黒本の総仕上げ問題
- 黒本の模擬問題(ダウンロード版)
- Oracle公式サンプル問題&解説
以上が1か月で行った勉強内容になります。「上記4つ」についてそれぞれ詳しく解説していきます!
◆時系列
黒本の1~10章
試験本番までに、4周しました。スキマ時間と帰宅してからの勉強時間を利用して、問題を進めていきました。
1周目
一日のノルマを決めて、その問題数を淡々とこなしていくというスタイルで勉強していました。また、間違えた問題については、スクショして保存しておき、基本的にはスキマ時間で復習をして、帰宅してから新規の問題に取り掛かるという流れでした。問題の解説には、関連するメソッドがたくさん記載されているのですが、1周目では「処理を理解する」ということを目的に置いていたため、関連メソッドの暗記はせずに、どんどん問題をこなしていきました。理解に時間を要したため、1周目が一番時間がかかりました。
2周目
すべての問題をもう一度解きなおしました。1周目で処理の内容については理解していたため、2周目では、「メソッドや戻り値の暗記」にフォーカスして、問題を解いていきました。この時、暗記するべき内容をノートにまとめながら、問題を進めていきました。また、暗記事項をまとめたノートのページを写真にとって保存しておき、スキマ時間があるたびに眺めていました。
3周目
「黒本の総仕上げ問題」の1回目を解いた後に実施。総仕上げ問題で間違えた問題については、関連のある章問題についてもチェックしていたため、その問題だけを再度解き直しました。「何を理解していたら総仕上げ問題で間違わなかったのか」ということを意識しながら問題を解いていきました。
4周目
試験直前に、すべての問題に目を通しました。試験時間を「15時開始」にしていたため、朝からカフェに行き、問題を一気に復習しました。問題を解きなおすというよりも、問題を見た瞬間に「この問題のポイントは○○だから、本番でも気をつけよう」といったような感じで、すべての問題に目を通すことを重視していました。
章問題については、一番時間がかかるのが1周目だと思います。処理内容がシルバーと比べて複雑であるため、しっかりソースと解説を熟読しなければ理解できません。また、解説を読んでも理解が浅いと感じた時は、ググって調べていました。2周目以降は暗記が多くなるため、ここを乗り切れるかどうかがポイントかもしれません!
黒本の総仕上げ問題
試験本番までに、3周しました。
1周目
章問題同様に、問題を解きながら、間違えた問題についてはスクショして保存しておき、スキマ時間で復習をしていました。また、間違えた問題については、関連する章問題についても合わせて解説を読み直していきました。
2周目
1周目で間違えた問題だけを解きなおしました。
3周目
章問題同様、試験前にすべての問題をサッと復習しました。
黒本の模擬問題(ダウンロード版)
「黒本の総仕上げ問題」同様に、試験本番までに3周しました。
Oracle公式サンプル問題&解説
Oracleの公式サイトに記載されているサンプル問題です。以下のリンクから参照できます。
結論を先に言うと、このサンプル問題は絶対に解いた方がいいです!サンプル問題は「20問」掲載されていますが、この問題のうち「5問」くらいはかなり類似した問題が試験に出題されました。公式サイトに掲載されているので、それもそのはずといった感じですね。特に、サマータイムの問題は、「黒本」には掲載がないですが、試験では出題されたのでしっかり理解しておくといいと思います!
試験本番までに、3周しました。内容は他の問題と同様です。
試験を受けるなら午後が良い理由
私は、「Java Silver」同様に「15時」からの試験開始にしました。
理由は、すべての問題を総復習する時間を確保するため。「Java Silver」では、「黒本」と類似した問題が多数出題されたため、「Java Gold」でも、試験前に今まで解いたすべての問題を総復習しました。問題を解くというよりも、問題を見た瞬間に「処理内容&暗記事項」がパッと頭に思い浮かぶかという確認です。
試験本番
試験問題は、黒本と類似した問題が「全体の3割」くらいでした。また、前評判通り、「ラムダ式」「ストリームAPI」「I/O」「NIO.2」に関する問題が多かったです。時間については、見直しが終わって、残り10分くらいだったので、結構タイトでした。類似問題については時間をかけずに解けたので、時間が少し余ったという印象。
試験直後の感想
正直試験が終わった後は「これは落ちたかもしれない」という印象でした。
初見の問題も多数出題されていたし、関連メソッドにちょろっと記載されていた内容も出題されたため、自信を持って回答できたのは、ぎりぎり65%くらい。結果が出るまではとても不安でした。
結果は、73/100%で合格!(かなりぎりぎり)
ぎりぎりでしたが、合格という結果を見たときは本当にうれしかったですね!「努力がちゃんと報われた!」という達成感に包まれたことを覚えています。
ですが、試験を終えた今だからこそ見えてきた勉強内容の反省点があります。
試験を終えた今、これから「Java Gold」を受験する方に向けて
「Java Gold」を実際に受験して見えた反省点について。これから「Java Gold」を受験する人にお伝えできればと思います。
自分が実際に受験して、「こうすればよかったな」と思った反省は2つあります。
もっと問題数をこなすべきだった
私は上述した通り、「黒本」と公式のサンプル問題だけを繰り返し学習していました。それは様々な理由から、「1か月しか勉強時間を確保できなかった」ため。「紫本」にも手を出したい気持ちはありましたが、どちらも理解がおろそかになることを避けるため「黒本」だけにしました。
しかし、試験を解いていて感じたことは「もっと多くの問題を解いておくべきだった」ということです。試験では、初見と思われる問題が多数出題されました。知らないメソッドがソースに出てくるというものもありましたが、一番多かったのは、メソッドは知っているのに解けないという問題です。
どういうことかというと、メソッドとしては知っているものの、「こういう使い方(組み合わせ)をしたら結果はどうなるのか?」という問題です。
ちょっと言語化するのが難しいのですが、「A,B,C,D」というメソッドについては理解していました。そして、「A⇒B⇒C」という処理については理解できていたけど、「A⇒B⇒D⇒C」というパターンは理解できていなかったという感じです。
試験が終わってから「紫本」を書店で確認してみると、試験で悩んだ問題と類似した問題が多く掲載されていました。もし、その「紫本」も解いていたら、8割~9割の点数を取得できたかもしれません。
なので、私と同じように限られた勉強時間しか確保できないという人は「黒本」だけを徹底的に勉強するのでもいいと思いますが、時間に少し余裕があるという人は、「紫本」も解くことをおすすめします。
▼「オラクル認定資格教科書 Javaプログラマ Gold SE 8」(この本もGoldの王道です)
「黒本」に載っていないメソッドが出題されるため
「黒本」は、試験範囲については網羅していますが、試験問題では、黒本には載っていないメソッドが数問出題されていたという感触です。何冊参考書を使用しても、「試験で出題されるすべてのメソッドを網羅する」というのは無理かもしれませんが、その確率を減らすことはできます。なので、時間がある人は「黒本」に加えて、上記の「紫本」についても問題を解いておくといいかもしれません。
さらに念を押したいという人は以下の本も定番です。
▼「オラクル認定資格教科書 Javaプログラマ Gold SE 8 スピードマスター問題集」
オラクル認定資格教科書 Javaプログラマ Gold SE 8 スピードマスター問題集
▼「OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide」
※英語で記載された問題集ですが、「Oracle社」が出版している公式問題集です。試験対策に非常に優れていると評判なので、英語ができる方はいいかもしれません。
結論、「Java Gold」を受験して良かった
「Java Gold」は、正直「java Silver」とは比べものにならないくらい、頭を使って、時間を使って試験に臨みました。そのおかげで、Javaプログラマとしての力は確実に上がったと実感しています!「Java Goldホルダー」だと名乗れるようになったのも、うれしいです。笑
そして、勉強で心が折れそうになっている人に一言!
これから「Java Gold」を受験する方は、おそらく社会人でSEの方が多いかと思いますが、「Java Gold」を取得すると割と周りから称賛されます!笑 「Silver」の時は「へぇ~」くらいだったのが、「Gold」になると、「えっ!すごいじゃん!頑張ったね!!」くらいになります。(私が社会人2年目だったからかもですが)
とにかく、資格取得へのプロセスは確実に力になるし、無駄にはなりません。転職する際にも、客観的な実力の証明になります。
勉強中に心が折れそうになる瞬間はたくさんあるかと思いますが、合格した先にある姿を思い浮かべて、なんとか合格を掴み取って欲しいと思います!
合格したら、ツイッターで教えてください!笑
応援しています^^
======紹介した参考書のまとめ======
▼「徹底攻略Java SE 8 Gold問題集」
▼「オラクル認定資格教科書 Javaプログラマ Gold SE 8」
▼「オラクル認定資格教科書 Javaプログラマ Gold SE 8 スピードマスター問題集」
オラクル認定資格教科書 Javaプログラマ Gold SE 8 スピードマスター問題集
▼「OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide」
taka