新しいRuby技術者認定試験Gold 3.1を受けた
最初に
先日10/3からRuby技術者認定試験が2.1から3.1にようやくバージョンアップしたとのこと。
2.1で合格しててたぶん簡単に合格できると思いましたが、
その感じで落ちたら最悪なのもあって受験するか迷いましたが、
今はバージョンアップのキャンペーンで落ちたらタダで再受験できるらしいので(スゴイ!)、
「もし落ちても痛みは少ない」とさっさと受験してみることにしました。
勉強
自分の場合、2.1の頃に1回合格済みなので、忘れかけてるのを定着させ直す感じでした。
ただ、基本は次の問題を解いて、ほぼ解けるように理解していくって感じになると思います。
本番は75%合格なので、練習で90%以上を安定して取れるのがベストかなって思います。
2.1から3.1の試験の変化は
version3の模擬問題と本番を踏まえて、
新機能・新文法のさほど比重は大きくなかった印象です。
version3の模擬問題にある新しい問題
- Gold Q5:  転送引数(forwarding parameter) 
... - Gold Q19: 半無限区間
x.. - Gold Q20: 
filter_map, ぼっち演算子&. - Gold Q23: ナンバードパラメータ
_1 - Gold Q44: パターンマッチ
in 
他にもあるかもしれませんが、自分が気づいたのは50問中この5問ぐらいです。
自分が受けた本番ではfilter_map・ナンパラ_1・ぼっち演算子・Hash#digぐらいでした。
パターンマッチの難しいのが出たら困ると直前で読んでましたが、本番では1問もなかったです。
パターンマッチは出題されても、簡単な問題な気がします。
filter_map・ナンパラ_1・ぼっち演算子は使いやすく使用頻度も高めで、
バージョンアップで試験問題に入るのはわかりますが、
難易度的にはSilverクラスぽい感じがしました。
よく使われる重要性が高い機能が試験問題に入って、先進的な機能は試験問題に入らなかった印象です。
増えたものがある一方で、2.1の頃から減ってるんじゃないかと予想する分野もあります。
例えば、ThreadやFiberは模擬問題になかったし重要性が下がってると考えてます。
あと、元から出題頻度の低かった標準添付ライブラリは、新試験でもっと出題なさそうです。
そういえば、本番でrequire&load, JSON, YAMLの問題を見た記憶が薄いような?
現バージョン3.1と旧バージョン2.1の差異
2.1時代の古い問題を解くと「あれ?」ってなるかもしれない差異です。
- 
FixnumとBignumはRuby 2.4でIntegerに統合。- 2.3以前では、
Integerの子クラスにFixnumとBignumがあった。
2.3以降はInteger#+を再定義すると、当然1 + 1に影響がある。
対して、2.1ではInteger#+を定義しても、Fixnumに別に+が定義されており1 + 1に影響がない。 
 - 2.3以前では、
 - 
Arrayでsumメソッドが使えるようになったのは、Ruby 2.4。- Ruby 2.3以前は、
injectメソッドで対処されていた。 - Ruby 2.4で、
Enumerable#sumが追加。 
 - Ruby 2.3以前は、
 - 
open-uriライブラリは、Kernelのopenを再定義しなくなっている。- 2.1時代は
openを再定義していたが、今はURI.openを使う。 
 - 2.1時代は
 - privateメソッドはレシーバを絶対につけれなかったが、Ruby 2.7から
selfをつけれる。 - Rubyのinitializeのprotectedの可視性の変更(Qiita記事)
 - 継承関係
- 後から行った Module#include が無視されなくなった
「プロと読み解く Ruby 3.0 NEWS - クックパッド開発者ブログ」の真ん中よりいくらか下。 - Rubyのprependによる定数探索バグ(Qiita記事) …… Ruby 3.1で修正されたバグ。
 
 - 後から行った Module#include が無視されなくなった
 
試験本番で難しく感じた自信のない問題
50問の中で4問ほどわからなかったり自信のない問題がありました。
- 
timeライブラリのTime#iso8601の表示形式 - ヒアドキュメントの
<<-EOSと<<EOSの違い - 正規表現の判定方法: 
=~,match?- 「
=~って正しい順番だよな?(いつも自信ない)」<- 正しい順番 - 「もしかして
String#include?は正規表現を引数に取れる?」<- 取れない 
 - 「
 - メソッド内の多重ループの脱出。
- 
returnでメソッドを脱出することで、多重ループを脱出できる。 - 多重ループの内側にある
breakが抜けれるのは、内側のループだけ。 - これは問題文がゴチャゴチャしてて、論点が見えてこなくて、面倒くさくなっちゃった気がします。
早めに退出しましたが、この問題にあと5分〜10分費やせば解けたと思います。 
 - 
 
上2つは完全に知識が抜け落ちてて不正解。
下2つは自信がなかったものの正解できました。
ということは、本番46問正解だったので、自信があった46問の中で2問間違えてますね……。
最後に
Ruby技術者認定試験の受験者・Rubyを勉強してる人の参考になったら、幸いです!
Discussion