Header Ads

Javaゴールド(Java SE 7 Programmer II: 1Z0-804)合格体験記

どうも、とらです(๑´∀`) JavaゴールドSE 7に合格したので、その体験記です。取得にかかった時間は1ヶ月半でした。




試験概要


名称: Java SE 7 Programmer II(ゴールド)
対象Javaバージョン:  Java SE 7
試験番号: 1Z0-804

認定資格: Oracle Certified Java Professional(OCJP), Gold SE 7
試験料(税抜き): 26,600円
試験時間: 150分
出題数: 90問
合格ライン: 63%

前提資格:  Oracle Certified Java Associate(OCJA), Silver SE 7

Java SE 7 認定資格の詳細ページ
1Z0-804の詳細ページ



とらのバックグラウンド


Javaの知識レベル:
 独学で
JavaアソシエイツSE 5/SE 6とJavaシルバーSE 7まで取ったレベル
IT業界での業務経験:5ヶ月
Javaの業務経験:3ヶ月
プログラミングの知識: Cを最初にやり、PHPの簡単なDB連携するWebアプリと、簡単なJava EE Webアプリが作れるレベル

ぼくのJavaとの出会いはやさしいJavaでした。とらは以前ゲームプログラミングの学校に通っていて、そこでの指定テキストだったのです。他にも使った本には基礎からのサーブレット/JSPやさしいAndroidプログラミングがありました。


学校では本のコードを打ち込んで、解説を聞いて、ある程度進んだら問題集をやる、の繰り返しでした。サーブレットまではちゃんとやっていたのですが、特に作りたいゲームがなかったぼくはAndroidの授業は寝てるか好きなことをやっていたので(Cで焼き芋作りのプログラムを書くとか)、Androidについてはほとんど覚えていません。

学校を出た後、自分で勉強してJavaアソシエイツを取得しました(合格体験記)。その後続けて勉強し、JavaシルバーSE7を取得しました(
合格体験記)。



なぜ受験しようとしたのか


ぼくの中でJavaの資格ではゴールドが最低限の目標だったからです。仕事でJavaに関わるなら自分で勉強してゴールドぐらい持っている状態でスタート地点に立たないと将来立派なエンジニアになれないと思っていました。

それから将来優秀なプログラマにチームに加わってもらう際、ぼく自身がゴールドぐらい持っていないと相手にされないのではないか、という懸念もありました。

あと、Javaゴールドの上の資格を取りたくなっていたというのもあります。ゴールドを取得済みであることが受験条件になっているJava EEの資格がいくつかあって、勉強を進めるにつれ目はそっちを向くようになり、ゴールドは通過地点のように感じるようになっていきました。



使った教材


まずは以下の2冊です。

    

紫本と白本(スピードマスター)
は王道だと思います。ただしゴールドに関してはAmazonのレビュー及びみんなの受験記を見て総合的に判断した結果、シルバーのように紫・白の2冊だけでは心もとないと感じました。紫本は誤記の多さ、問題の難易度の低さ、説明不足、筆者批判などが展開されていましたし、白本は問題の難易度が本試験に比べて低い、という指摘がされていました。


そこでとらがみつけたのが以下のOCA/OCP Java SE 7 Programmer I & II Study Guide (Exams 1Z0-803 & 1Z0-804) (Certification Press) 1st Editionです。



英語で書かれていますが以前OracleでJavaの認定試験を作っていた人たちが執筆した本ですしAmazon.comの評判を見る限りなかなかいいなとの印象を受けました。実際よく書かれていて、試験に出るところ出ないところが明確に線引きされていましたし、実用的にはこう、というようなコラムもあって読むのが楽しかったです。

この本1冊で1Z0-803と1Z0-804、つまりSE7のシルバーとゴールドの両試験に対応しているので、ゴールドまで目指すなら早めに買っておくのがいいと思います。なお、章末問題はかなり難しいものが載っていました。




上記の3冊は教科書的な感じで使えていいのですが、模擬試験の数となると紫本1つ、白本1つで合計2つしかありません。本番で確実に合格するには試験形式で膨大な数の練習問題をこなし、試験のスタイルに慣れる必要があると思いました。

そこで Enthuwareの模擬試験集です。EnthuwareはJava資格試験の模擬試験をネット販売しているインドにある会社です。模擬試験は.etsファイルとしてダウンロードでき、専用のETS Viewerで開いて購入したライセンスキーを入力することでローカル環境で模擬試験を受けられます。有効期限はありません。値段は約1,200円で9個の模擬試験(それぞれの問題数は65)が含まれています。解答やスコア管理を自動でやってくれるのでとても便利でした。支払いはPayPalを使いました。



この教材の模擬試験の平均スコア(Average Mock Exam Score)は約70%だそうです。また模擬試験を受けた人のこれまでの本番試験での平均点(Average Real Exam Score)は78%だと公開されていました。つまりこのEnthuwareの模擬試験で7割とれれば本試験で8割とれて合格できる、そう思ったので購入しました。





勉強の進め方

 

まずは紫本の模擬試験   


まずは紫本の模擬試験を受けました。結果はたったの30%。シルバーに合格してから4日後に何の準備もなく受けてみたのですが、何をしようとしているのかさっぱり分からない問題ばかりでした。AtomicInteger何それ怖そう。。。という感じです。



アソシエイツ、シルバーの時と同じように、点数がすぐ分かるスプレッドシートで自動採点できるものを作って使いました。これまで模擬試験は間違った問題を見返さず、2回目以降に受ける時に記憶で解答できないように解きっぱなしにしていたのですが、この時はさすがに解説を読みました。でもよく分からないのです。さすがゴールドの範囲ですね。実務でJavaを使った経験がほとんどなかったので仕方のないことだとは思いましたが、最初に模擬試験を受けたことでモチベーションがかなり下がってしまいました。




紫本の読み込みと章末問題 


模擬試験の後、紫本を最初から読んでいきました。章の終わりに問題集があるのでそれも含めてやります。この時もスプレッドシートで章末問題のどこを間違えたか分かるようにしておいたのですが、あまり使うことはありませんでした。


代わりに章末問題の直前ページの空きスペースに自分の選択を記入し、そこで解答の管理をやりました。



しかし、そのうち紫本でもスピードマスターのように1問ずつ合っていたか間違っていたか分かるようにしたいと思うようになり、問題番号の左に直接×を書き込むようになりました。これなら間違えた問題が本だけで分かるので便利です。



こんな調子で紫本は一通り読んで章末問題もやりましたが、かなり速いスピードで進めたため理解したというよりはとりあえず読み終えた、という感じでほとんど頭に入っていませんでした。というのは、新しい概念に加え、メソッドがとても多いので頭に入りきらなかったのです。それでも1回目はこんなもんだ、と割り切ってひと通りやりました。 



白本(スピードマスター)の問題 


次に白本の問題をやっていきました。模擬試験はおそらくかなり低いスコアになると思ったので手を出しませんでした。白本は問題の右上にチェックを入れる欄があるので、正解なら黒でチェック、間違ったら赤の×をつけて、間違ったもののみ後日見返せるようにしました。白本はうっかりするとページ下部や次のページに書いてある正解の選択肢が見えてしまうことがあるので、解き進める際は答えがありそうな部分を意識的に見ないようにするなどのちょっとしたコツが必要です。




白本は紫本のように解答と解説が数ページ先にまとまってあるのではないのでスプレッドシートは不要でしたし、問題を解く→正誤チェック→解説読み込み、が家でも外出先でもスムーズにできるのでおすすめです。





勉強の中断 


しかしここで問題が発生しました。ゴールドの勉強は5月下旬からほぼ毎日取り組んで進めていたのですが、ピザメンバー増員の面接やら友人とのごはんやら、遠方でのIoTワークショップ参加やら自作炭酸水作りにはまる、などの諸事情が相次ぎ、ゴールドの勉強がとぎれとぎれになり、内容も難しいのでモチベーションが下がり、その後ピザに全リソースを投入してイタリアに行ったりしてしまったので6月上旬から勉強は完全にストップしてしまいました。

そして9月になってからようやく勉強を再開しました。ですので3ヶ月間は勉強がストップしたことになります。仕事でJavaのコードにはちらほら触れていたので完全にJavaから離れていた訳ではなかったのですが、細かい部分はだいぶ忘れてしまっていました。




OCJP Gold SE 7 認定資格試験 ポイント解説セミナー


勉強を中断している時期ではあったのですが、6/23にOracleでセミナーがあったので行って来ました。内容はJava資格の案内、試験のポイント解説、補足情報、でした。





気になる認定パスですが、SE 7 で進んでいくと

SE 7 シルバー → SE 7 ゴールド

となります。当然ですがSE 8 の場合は

SE 8 シルバー → SE 8 ゴールド 

となります。「SE 8ゴールドの試験はまだ米国でもリリースされておらず、日本でのリリースはその後になるので今はSE 7の認定パスに乗ってゴールドSE 7まで取得し、その上の Java EEの資格を目指すのがよい」というお話を講師の方がしていました。とらはSE 7シルバーを取得済みだったのでそうすることにしました。

なお

SE 7 ゴールド → SE 8 ゴールド 

のアップグレードも可能だそうで、これには 1Z0-810 Upgrade to Java SE 8 を受ければいいとのことでした。この試験のリリースは SE 8 ゴールドの後なのでおそらく2015年の年末ぎりぎりぐらいでしょうか?



ポイント解説については以下の説明がありました。

・シルバーの内容も出るので復習する
・OOをやるにあたってのデザインパターンとそれを反映したコーディングを押さえる
・abstractメソッドはシルバーで聞かれないことを突っ込んで聞かれる
・printfと書式化を押さえる
・RowSetProvider、RowSetFactory、RoseSetインターフェースは通常のプログラミングではあまりやらないが試験には出る
・同期と排他を押さえる
・スレッド以外の並列処理を押さえる(SE 6の内容だが)
・ローカライズの出題分布は4%ぐらい(その他の出題分布も公開された)
・20〜30行のコードの結果を問う問題が多い
・SE 6 までの問題も出る
・equals()とhashCode()のオーバーライドは必ず出る
・匿名クラスがよく出る
・is-a&has-a、コンポジション、シングルトン、DAO、ファクトリの5つを押さえる(何を意味する、いつ使う、Javaで書くとどうなる)
・イニシャライザも出る
・getInstanceが現れたら9割はファクトリメソッドについて聞いている
・is-a(継承)、has-a(参照)がよく出る
・バイトストリームはあまり聞かれない
・ファイルやディレクトリ操作用のPathクラス、Falesクラスを仕様したファイルやディレクトリの確認・削除・コピー・移動、ファイル属性やディレクトリ属性の読み込み・変更はよく出る
・JDBC4.0でClass.forNameの呼び出しが不要なことは必ず出る
・ResultSetの更新系の出題はない
・スレッドはよく出る。問題が長い
・スレッド2〜3本作ってfor文でまわす問題がよく出る
・Thread.join()がよく出る
・java.util.concurrentコレクションがよく出る
・fork/joinの意味を聞かれることがある
・マージソートとフィボナッチのコードを覚えておくと吉
・リソースバンドルの作成(書き方、置き場所、使い方)とロードをおさえる
・ロケールのフランス語、中国語、スペイン語を押さえる。日本語は出ない
・採点されない問題もある。全部最後まで解くこと


実際に上記のポイントをまとめたのはこのブログを書いている時点ですので、セミナー参加から試験終了後まで上記のポイントは「おさえていなかった」とらだったのでした。。。



勉強再開 → 紫本と白本の同時進行 


勉強を再開するにあたり、1日に取り組む内容を「紫本1章と章末問題+白本の該当部分の問題全部」にしました。紫本は11章あり、スレッドと平行処理は2日に分けたので12日で終わりました。この時は時間をおしまず、よく分かるまで読み込みました。以前のように1日に2章3章とかよくばらずに丁寧にやりました。

やった順番は以下の通りです。入出力やNIO.2、スレッドは早めにつぶしておいたほうがいいので最初に、並列処理にはスレッドセーフなコレクションが出てくるのでコレクションとジェネリクスを先にやってからやることにしました。

第8章 入出力
第9章 NIO.2
第11章 スレッド
第10章 JDBC
第6章 コレクションとジェネリクス
第11章 並列処理
第4章 オブジェクト指向の設計
第5章 Java API
第1章 Javaクラス設計
第2章 ポリモフィズム
第3章 ネストクラス
第7章 例外処理

前回は軽く読み流していたNIO2(PathやPathsとか)、スレッド、平行処理などについてこの時はよく理解しました。




紫本の模擬試験(2回目) 


紫本の模試試験の2回目を受けました。今度は63%でギリギリ合格です。紫本の模擬試験の難易度は易しいという情報がネットにあったので全く安心できませんでしたが、前回の30%から大幅アップしたのでひとまずよかったです。




OCA/OCP Java SE 7 Programmer I  II Study Guide 


ここまでで紫本と白本が白本の模擬試験を除いて終わったわけですが、なんというか手応えがないというか、今本試験を受けても受からない気がしていました。そこでもう1冊本を読み込む必要があると思って見つけたのがOCA/OCP Java SE 7 Programmer I & II Study Guide だったのです。



英語の本なのでこんな感じで説明はすべて英語です。ちょっとくだけすぎ&くどいところもありますが、さすがローコンテクスト文化の国の本です。読めば素人でもちゃんと分かるように書いてあります。読む量は多くなりますが、これが英語の技術書のいいところですね。


よかったのは試験ではこれをおさえておけばおk、ここに注意、という説明がされたexam watch というコーナーが随所にあって、気をつけなければいけないポイントがよく把握できたことです。


さらに試験とは関係ありませんが、仕事でプログラムを書く時はこういう点に注意、という on the job というコーナーもあり、とても勉強になりました。




しかし問題はページ数の多さです。これが目次ですが1章1章が長いです。



結局とらは以下の章を読みました。全部で700ページぐらいです。1日1章進めたので、1日につき70ページです。

1.  Declarations and Access Control
2.  Object Orientation
7.  Assertions and Java 7 Exceptions
8. String Processing, Data Formatting, Resource Bundles
9. I/O and NIO
10. Advanced OO and Design Patterns
11. Generics and Collections
12. Inner Classes
13. Threads
14. Concurrency
15. JDBC


ただ単に読んでいただけではなく、後から見返せるようにはがき用紙を使ってインデックスカードを作りながら読み進めました。でも実際このインデックスカードはあまり見返しませんでした。。。






  実はOCA/OCP Java SE 7 Programmer I & II Study Guideに取り組んでいる途中にとらの台湾旅行に行くことになり、帰国後はブログを書いていたので1週間勉強が中断しました。とらはひとつのことしかやりたくない人なので、旅行中及びブログを書いている間は一切Javaゴールドの勉強しませんでした。ブログを書き終わってから勉強を再開し、OCA/OCP Java SE 7 Programmer I & II Study Guideを終わらせました。



白本(スピードマスター)の模擬試験 


次に白本の模擬試験をやりました。結果は69%でした。正答率から言えば合格ですが、紫本と同じく白本は実際の試験問題より易しいとの口コミがあったので、素直に喜ぶ訳にはいきません。解説を一通り読んで分かったことは、試験対象の膨大なコンストラクタ・メソッドが覚えきれていないことでした。一通り勉強したものの、とらは復習をしないので最初の頃にやったことをどんどん忘れていっていたのでした。



コンストラクタ・メソッドの暗記 


ですので次に取り組んだのはAPIの暗記です。一通り各章は理解したつもりではいるものの、あやふやなものが多かったので紫本からノートに書き出すことにしました。これまでとらはノートを作らずに勉強していたのです(インデックスカードは作りましたが、作りっぱなしでした)。

気をつけたのは、

Path subPath(int beginIndex, int endIndex)

などと書かないことでした。return valueを先に書くとメソッド名が記憶に残りにくいし、parameterもご丁寧に文法通りに書くと意味は取りやすいですが長ったらしくなるので、

subPath(int, int): Path

のように書くことにしました。最初にメソッド名を書いて、後ろにreturn valueをくっつけます。クラス図のメソッドのような感じですね。これならintのparameterを2つ取るというのが一目瞭然で、return valueとしてPathオブジェクトが返るんだな、ということもわかります。とにかくメソッド名とシグネチャを覚えることを重視しました。StringはStと略したりもしました。ノートに書くのでコンパイルエラーもクソも何もないので自分で分かれば何でもいいと思います。

コンストラクタだとこんな感じです。これは極端な例だと思いますが、中に日本語を入れたって構いません。横に並べてもおkです。

Locale(言語)(言語、国)(言語、国、St)


この時分かったのですが、紫本はよくまとまっているな、ということでした。英語の本は解説は丁寧だったもののメソッドがよくまとまってはいなかったので、紫本のコンストラクタ・メソッドのリストが重宝しました。ただし紫本には載っていないメソッドやコンストラクタもわずかながらあったので、そこは公式APIを参照しました。たとえばこれです。

Locale(String language, String country, String variant)

この引数を3つとるLocaleクラスのコンストラクタは紫本には記載がありませんでした。試験対策本はなぜかあの変なサイズの小さな分厚い本ですが、英語の本のようにA4サイズとかで堂々と1000ページで全部網羅するように作ってくれたらいいのにと思ったのでした。なお、上記のコンストラクタをとらは、

Locale(言語、国、St)

と覚えた、ということになります。



白本のやりこみ 


メソッド暗記に平行し、白本の問題を空き時間に解きました。前半はそれほどやり込んでいませんが、後半の章は合計3周はやりました。




JQ+ V7 For OCP-JP-II SE7(Enthuware模擬試験集) 


最後の追い込みはEnthuwareの模擬試験集です。Viewerと試験問題集は無料でダウンロードでき、ライセンスのみを購入することになります。認証が終わると以下の画面が開きます。


左がメニューになっていて、Test ViewからはStndard Testsとして模擬試験が9こあるのがわかります(Test 1 〜 Test 8 、Last Day Test)。あとはObjective-wise Testsとして分野別の試験もありますが、Test 1〜Test 8の問題からランダムに出るのでぼくはやりませんでした。あとTest 1〜Test 8の問題すべてがユニークな問題という訳ではなく、テスト間でいくつか同じ問題が出て来ます。Last Day Test だけはユニークな問題(他のTestと問題がかぶらない)になっています。



Study Viewでは便利なリンクなどがあります。英語の言語仕様や公式ドキュメントを読んで勉強しろ、とのことでしょう。さすがインドの会社です。


OCPJP/SCJP JavaRanch FAQ

Java Language Specification
Java Basics
Certification Books


実際の模擬試験ですが、まずTest 1を受けてみました。結果は49%で不合格。。。


間違った問題は見返します。解説はもちろん英語ですが、1問1問詳しく書いてあるのでとても勉強になりました。選択肢ごとに解説がついている問題もありました。
以上のような感じで模擬試験を受けては復習し、苦手なところを少しずつつぶしていきました。そして4回目でついに66%取れて合格しました。約7割取れたということで合格は間違いないと判断したのでこの直後に本試験の申込をしました。





ところが本試験前日に受けた模擬試験ではまさかの46%。不安がよぎりましたがもう後に引けないので、できる限り復習して次の日の本試験に備えました。結局模擬試験9このうちやったのは5こでした。試験直前の1週間は脳内コンパイラがあっぷあっぷになってしまい、1日に複数回はおろか1日おきに模試を受けるのも嫌になっていました。






本試験 


試験は週末の午後3時半からでした。昼ご飯をちゃんと食べ、脳内コンパイラがちゃんと動くようにコーラを飲んでいちごチョコを食べてから試験会場入りしました。会場内の席はドア付近ではなく一番奥だったのでうるさくなくていいなと思ったのですが、エアコンの風があたって寒く、一時はどうなることかと思いました。


試験前の1週間に5回受けた模試は65問が1セットで、それに慣れてしまっていたからか、やはり本試験の90問は多く感じました。直前に紫本か白本の90問の模試をやって時間配分の感覚を戻しておけばよかったと思いましたね。

アソシエイツ、シルバーとこれまで2回本試験を受けているので、テスト受験スキルみたいなものは身につけていると思っているつもりです。分からない問題はいくら考えても正解できるかは確率になってしまうので、それらしい選択肢を選んで画面右上にチェックを付けて次に進み、全部終わって時間があれば戻って時間をかけて考える、というやり方です。

30問(1/3終了)、45問(1/2終了)、60問(2/3終了)ときりのいいタイミングで、あと2/3だ、あと半分だ、とほっと一息はつくのですが、もし急に脳内コンパイラが動かなくなったら!? もし何も考えられななったらどうしよう! そういう不安にかられました。そんな時は家族のことを思ったりして自分を奮い立たせました。

問題はけっこう丁寧に解いていったので最後に余った時間は15分ほどでした。この時点でチェックを付けて戻れるようにしておいた自信のない問題が30問あり、そのうち何割かは合っているだろうから正答率は(60+α)/90 > 63% で合格はするだろうな、と思いました。でも何点取れているかの手応えは全くといいほど感じず、もし落ちていたらどうしよう、という不安を試験終了後に感じました。




受験結果 


試験終了後すぐにOracleのCertViewにログインして結果を確認できます。手応えはあまりなく、どれぐらい取れているか全く想像できなかったのですが、80%で無事合格しているのを確認できたときはほっとしました。やはりEnthuwareで7割取れれば本試験で8割取れて合格できるというぼくのもくろみは当たったのでした。




数日すると以下のPDFの資格証がダウンロードできました。





ゴールドの認定証もダウンロードできました。でもどうやらゴールドは日本だけのもののようです。国際的に通用するのは上の金の枠の証書だそうです。




なお紙の資格証は届いたメールのリンクから申込をしたので、約1ヶ月でアメリカから郵送されてくる予定です。



おまけ



ひとまず一発で合格できたのでほっとしました。1ヶ月半(5月後半に少しと9月から1ヶ月ちょっと)の勉強期間がむくわれてよかったです。人間やればできるもんだと今回改めて思いました。ただ間が3ヶ月空いてしまったので、どうにかモチベーションを保ってやっていたら7月中には取れたのかな、と思っています。

アソシエイツやシルバーと違い、ゴールドではそれなりにコードをタイプしてコンパイルして確認しました。ソース数で言うと50ぐらいです。また、APIドキュメントをよく確認するようになりました。知らないメソッドやオーバーロードされているメソッドを調べたり、コンストラクタを確認するのにAPIドキュメントは必須ですね。

今後ですが、Java EEの資格の勉強をしつつ、Java SE 8の内容も抑え、Javaの知識をより深くしていこうと思っています。そしてプログラミング教育に関われたらいいなと思ったとらなのでした。

最後までお読みいただきありがとうございました。本記事がJavaプログラミングを勉強している方の参考になれば幸いです。


おわり


0 件のコメント:

Powered by Blogger.