Edited at

技術系資格試験は受ける意味があるのか?〜Ruby Gold編〜


前書き

技術系資格試験は受ける意味があるのか?〜Ruby Silver編〜 の続きです。

学習期間は3週間ほどで、一発合格だったものの100点満点中76点でギリギリ合格でした。


結論

まず私はRuby歴1年半で、OSS活動をバリバリやってる人間ではない(OSSの恩恵にあやかってアプリを作る方が好き)ということが前提にあります。

その上で、

「一般的なアプリ開発に役立つかを重視する人にとっては、勉強するのはとても有益だけど、合格は目指さなくていいのでは?」と思いました。

Silverとはうってかわって、試験にすることによる嫌な感じが出ていたように感じました。

まとめると、

Silver -> Rubyで1アプリ作り終わったくらいの人には是非合格を薦めたい

Gold -> 特異クラスやメタプロについて理解したい、組み込みクラスや添付ライブラリについてさらっと知りたい人には勉強を薦めたい。言語としてのRubyを極めたい人には合格を薦めたい。

という感じです。


動機

・class_eval等メタプロについて、業務ではそんなに使わずあやふやな理解できているのでちゃんと勉強したい

↑のせいでライブラリを読む時に分からなくて諦めてしまう時があるが、それで痛い目にあった

・FiberとかStringIOとかよくわかってないクラスやライブラリがあるの気持ち悪い

・Ruby歴1年半だし、Silverで止まらずGoldまでとってみよう


良かったと思うポイント

先に良かった点。

まず、この試験を受けるにあたり、積読になっていたメタプログラミングRubyを読みました。

そのおかげで動機の一つであった


class_eval等メタプロについて、業務ではそんなに使わずあやふやな理解できているのでちゃんと勉強したい


は達成することができました。

実際にRailsやgemでメタプロがどう使われているかも説明されていたため、今後ライブラリも多少読めていくのではないかと期待。

もう一つは業務ではまだ使ったことはないが、いつか使うかもしれない組み込みクラスや添付ライブラリについて一通りさらっと学べたのも良かったです。

いつか機会があった時に使える候補が増えたりするので、一通り知ってはいるというのは実はすごく意味があると思っています。

今年のRuby会議でも発表がありましたが、Fiberとか使ってみたいと思うようになりました。


悪かったと思うポイント

「これ普通に開発してて必要になるケースある!?!?」という問題が多かったです。

例えばこんな問題とか

module M

@@val = 75

class Parent
@@val = 100
end

class Child < Parent
@@val += 50
end

if Child < Parent
@@val += 25
else
@@val += 30
end
end

p M::Child.class_variable_get(:@@val)

class S

@@val = 0
def initialize
@@val += 1
end
end

class C < S
class << C
@@val += 1
end

def initialize
@@val += 1
super
end
end

C.new
C.new
S.new
S.new

p C.class_variable_get(:@@val)

複雑な状況に置けるクラス変数について必ず数問出るのですが、誤解を恐れずに言うと、そもそもwebアプリ作る時にクラス変数とか使わなくない?という気持ちでいっぱいでした。

もちろんRubyの理解を試したいのは重々承知なのですが、こんな状況あります?という気持ちが拭えなかったです。

他にも定数やらeval、Refinementに関して、意図はわかるけど現実的じゃないなと感じてしまう問題がありました。

なのでアプリ開発に役立てたい人は、勉強するのは有益ですが、合格を目指す必要はない、と思いました。


最後に

とはいえテストをすることにより人間の記憶は定着するらしいので(使える脳の鍛え方)、合格するための勉強にも意味があると思います。

しかし1万6千円と高いので、合格をゴールにして2度3度と受ける必要はないんじゃないかなあと。

そしてもう1年くらい開発を続けたら、合格して良かったと思う日がくるかもしれません。

その時は編集します。


おまけ:勉強方法

Silverはほぼ暗記型の試験ですが、Goldは3割は知ってるだけで正解できる暗記系、残りは知識を使って考える系でした。

なのでしっかりとRubyにおける特異クラスとは?オープンクラスとは?などを理解する必要があります。

・メタプロフラミングRubyの1~5章を読む。4~5章は3回くらい読みました。良書。

Ruby 技術者認定試験合格教本のGoldの試験範囲を一通り読む。

・Ruby 技術者認定試験合格教本の模擬試験をとく。同じような問題がたくさんでました。

・Rexの模擬試験をとく×3

https://rex.libertyfish.co.jp/

をやりました。