実務に活かす観点から見た Ruby Silver 合格記

日常的に業務でRubyを書くようになって早3年。今さら感がありますが先日、Ruby Silverに合格しました。資格のレベルとしては簡単なほうと言われますが、実務に活かす視点で考えてみました。

概要

  • 実務でRubyを書いて3年になる僕が今さらRuby Silver合格しました
  • Ruby Silverの内容は実用的なのか、実務にどう役立つのか考えてみました
  • 勉強法、試験の感想

Ruby Silver is何?

正式にはRuby技術者認定試験と言い、現在は初級的なSilverと、中級的なGoldの2つがあります。

Ruby技術者認定試験について
Ruby技術者認定試験制度は、Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。認定者は、Ruby技術者としての技術力を公正に評価され、高い水準のRubyによるシステム開発能力を持つことを認定されます。

全50問で75点(38問)以上が合格、試験時間は90分です。

取得しようと思った動機

今回、とろうと思った理由は2つあります。
1. 資格取得駆動学習が自分にとってworkするかを検証したかった
2. とったほうがいいのか迷いつづけるならさっさととって楽になっちゃおう

です。レベル的にはまぁ取れるだろうぐらいには思ってました。実務をやりつづけるなかでも、知識はカバーしている必要はあるものの、資格として必要さを感じていませんでした。だからこそずっと「とっといておいたほうが良いのかなぁ」と迷っていたので、これからも考えつづけるくらいならさっさと取ってしまおうというわけです。

Ruby Silverは役に立つのか

レベルは基礎中の基礎

資格の効力的に言えば、あまり重要視されない資格でしょう。試験に求められる知識レベル自体は比較的簡単です。実務をしてたら自然と身につくレベルの内容ですが、試験という性質上、合格していないと仕事にならないとも言えません。

実務未経験者が持っていたら「ふーん、がんばってるね」程度には見てくれると思いますが、転職時の決定打になるほどの効力があるとは思えません

網羅性はGood

しかし、試験の内容的にはなにごとも基礎は大事ですし、便利なメソッドの再確認にもなります。普通は必要に迫られてメソッドの動作を確認、理解することが多います。試験というきっかけを通して普段使ってないものも合わせてひととおり学習しておくのはなかなか良い体験になるでしょう。

出題範囲は主に配列やハッシュに使えるメソッド、破壊的/非破壊的なメソッド、変数のスコープあたりに関する出題が多いです。これらは実務を行ううえでまず確実に正確に理解しておく必要があるものでしょう。

実務ではメソッドの名称や動きを暗記しておく必要はないため「あんなメソッドあったなあ」と思い出せれば十分です。また実務では自分以外の人が書いたコードを読む機会も多いです。つまり、頭の中にインデックスがあれば必要十分です。より多くのメソッドや書き方を知っておくとレビュー速度が上がったり、時にはより良いコードへのアドバイスもできるでしょう。

結局どうなの?

試験範囲の知識を着実に得るには試験勉強はとても良い

ここが残念だよRuby Silver

暗記が必要

まず試験という性質上、暗記が必要になるところ。実務ではドキュメントを見たりサっとirb(RubyのREPL)で確認したりできます。書いたコードの動作はテストコード担保されるのが必定です。つまり資格試験に必要な暗記力は実務ではあまり要求されません

ひっかけ問題

次にひっかけ問題が数多く出題されること。正しい理解を確認するためにひっかけ問題になってしまうのはわからなくもないですが、ひっかけ問題に相当するようなコードは実務では出てきません。むしろ出てきた場合はいちはやく修正の対象になります。そんなひっかかってしまうほど誤解しやすかったり、読みにくいコードは書いてはいけません。

例えばこんな問題が出てきます。

次のコードを実行したとき、出力されるものは次のうちどれか?

arr = [1, 2, 3, 4]
arr.reverse
p arr
  1. [4, 3, 2, 1]
  2. [1, 2, 3, 4]
  3. ["4", "3", "2", "1"]
  4. エラーになる

わかりますか? 答えは2です。1だと思いませんでした? reverseしてるのに、その後で使ってないんです。reverseは非破壊的(元のレシーバーの値を変更しない)メソッドです。1の答えになるとしたら2行目をarr.reverse!と破壊的メソッドにするか、arr = arr.reverseと代入するかしないといけません。

こんなコード実務じゃありえないです。2行目はまったくの無駄です。仮にうっかりしてしまったとしても、自分で実行結果を確かめて修正するか、テストが落ちるのでわかるのが当然です。ありえないので、reverseしてるからついついreverseされた前提で考えてしまいませんか。

精度を上げるための勉強時間

この試験に限定されたことではありませんが、試験内容の勉強とともに試験に合格するための勉強が求められます。ひっかけ問題にひっかからないよう精度を上げる必要があります。単に技術力を上げたいなら試験対策として精度を上げる勉強は不毛に思えてきます。

上のひっかけのような問題にひっかからないために、実務では見ないようなコードを読んでうっかりひっかからないように注意して答える。新しく勉強したメソッドの挙動ならまだしも、何度も何度もすでに知ったメソッドの挙動を読みにくいコードを読んで間違えないよう精度を上げるためだけの反復練習を行う。これのなんと不毛なとか。かといって精度を上げても実際合格するまでは心配なので油断できません。ちょっと楽しくない勉強ですね。

バージョンが古い

いまだにv2.1なのもいただけません。現行のサポートされる最低バージョンは2.4系です。最新版ではないのはしかたないとして、サポート期限をとうに過ぎた2.1なのはいかがなものかと思います。現行Rubyは2.7.0が最新、v3が今年の末にはリリース予定です。
(ちなみに現行バージョンと挙動が違う問題は出題されませんでした)

結局どうなの?

試験で合格点を確実に取るための勉強は不毛

合格のための試験勉強

  • 模試をやる
  • とにかく模試をやる
  • 模試で間違えた問題を見直す

です。

模試のバリエーション

合格目的でなくても模試を2、3周するのは良い勉強になります。
ただし、同じ模試だと答えそのものを覚えてしまって効果が薄れてしまいます。模試にはいくつかあるので紹介すると

合格教本とGistは固定の問題なので、期間を少し空けてやるほうが良いですね。RExは問題の順番はもちろん、内容も少し変わるので一番良くつかいました。
以前あったドリル型問題集のミニツクは今はアクセスできなくなってるようで残念です。

復習の方法

模試をやったらかならず復習する。間違えたところはなぜ間違えたのかを明らかにする。ひっかけにひっかかったのか、挙動を誤解していたのか、全然知らないコードだったのか。解説を読むだけではなくirbのようなREPLで実際にコードを書いてみて確認するのはとてもいいですね。

その他の教材

まず、そもそもRubyが全然わからない、基本がわからないというのであれば、Progateをやったり、プロを目指す人のためのRuby入門(通称チェリー本)がオススメです。

その他、精度を上げるのに助かったのは

が特に良かったです。これ以外に自分が間違えたところ、今イチ覚えられないところはテストの答え合わせをするたび、メモって見直すようにしていました。

実際の試験

実際の試験の申し込みはコチラから Ruby技術者認定試験
バウチャーとかは焦って準備しなくてOKです。Prometricのサイトで予約日を指定してからクレカ払いが可能です。

実際の試験は会場に行って、会場にあるPCからマウス操作で答えるタイプのテストです。持ちものは腕時計すら持ち込み禁止ですが、ホワイトボードとマーカーを貸し出してくれるのでメモをとったり、書いて整理してみたりは可能ですので安心してください。

僕の結果と感想

88点で合格しました。模試は90点以上確実に取れるようになってたので、ちょっと下がりました。原因としてはまったく模試で触れられてなかったような問題がいくつかでました。覚えてる限りだと、each_with_objectのようなeachの亜種は完全にノーマークでした。ブロック変数が複数ある場合、どちらに何が入るか覚えておいたほうが良いでしょう。

最初のほうでノーマークだった問題にあたって気持ちが焦せりました。試験はメンタルスポーツに近いですね。不安になると自信のある問題の解答も怪しく思えてきます。1周は20分ぐらいで終えれたので2回ほどみなおし、ケアレスミスを最低で3問は拾ったはずです。見直し大事ですね。

見直した結果、絶対間違えないだろう、と思える問題数が合格ライン以上だったので試験を終えました。そのぐらい不安になったので88点はまあ上出来ですかね。

最後に実用的かどうか、という観点でもう一度RubySilverを見ると、
試験範囲の知識を着実に得るには試験勉強はとても良く、しかし、試験で合格点を確実に取るための勉強は不毛と言わざるを得ない。なので

  • 合否は気にせず知識が欲しい -> 模試して間違えたところレビューすることを3回程度回す
  • 資格が欲しい -> 不毛だけど自信がつくまで解答精度あげるしかない

です。

動機を振りかえってみますと

  • 僕にとって資格取得駆動学習がworkするのか? -> する。が、それが学習の最善手とは言い切れない
  • RubySilverを取ろうか悩むことから開放された? -> された(Goldをどうするかはひとまず置いといて)

でした。合格という結果以外も含めるとなかなか学びのある良い経験でした。

Gridsomeでイチからブログを作る - 環境構築 with TyepeScriptMy ChangeLog[0.38.4] & Next Roadmap