💎

新しいRuby技術者認定試験Gold 3.1を受けた

2022/10/11に公開

最初に

先日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の頃から減ってるんじゃないかと予想する分野もあります。
例えば、ThreadFiberは模擬問題になかったし重要性が下がってると考えてます。
あと、元から出題頻度の低かった標準添付ライブラリは、新試験でもっと出題なさそうです。

そういえば、本番でrequire&load, JSON, YAMLの問題を見た記憶が薄いような?

現バージョン3.1と旧バージョン2.1の差異

2.1時代の古い問題を解くと「あれ?」ってなるかもしれない差異です。

  • FixnumBignumはRuby 2.4でIntegerに統合。
    • 2.3以前では、Integerの子クラスにFixnumBignumがあった。
      2.3以降はInteger#+を再定義すると、当然1 + 1に影響がある。
      対して、2.1ではInteger#+を定義しても、Fixnumに別に+が定義されており1 + 1に影響がない。
  • Arraysumメソッドが使えるようになったのは、Ruby 2.4。
    • Ruby 2.3以前は、injectメソッドで対処されていた。
    • Ruby 2.4で、Enumerable#sumが追加。
  • open-uriライブラリは、Kernelopenを再定義しなくなっている。
    • 2.1時代はopenを再定義していたが、今はURI.openを使う。
  • privateメソッドはレシーバを絶対につけれなかったが、Ruby 2.7からselfをつけれる。
  • Rubyのinitializeのprotectedの可視性の変更(Qiita記事)
  • 継承関係

試験本番で難しく感じた自信のない問題

50問の中で4問ほどわからなかったり自信のない問題がありました。

  • timeライブラリのTime#iso8601の表示形式
  • ヒアドキュメントの<<-EOS<<EOSの違い
  • 正規表現の判定方法: =~, match?
    • =~って正しい順番だよな?(いつも自信ない)」<- 正しい順番
    • 「もしかしてString#include?は正規表現を引数に取れる?」<- 取れない
  • メソッド内の多重ループの脱出。
    • returnでメソッドを脱出することで、多重ループを脱出できる。
    • 多重ループの内側にあるbreakが抜けれるのは、内側のループだけ。
    • これは問題文がゴチャゴチャしてて、論点が見えてこなくて、面倒くさくなっちゃった気がします。
      早めに退出しましたが、この問題にあと5分〜10分費やせば解けたと思います。

上2つは完全に知識が抜け落ちてて不正解。
下2つは自信がなかったものの正解できました。

ということは、本番46問正解だったので、自信があった46問の中で2問間違えてますね……。

最後に

Ruby技術者認定試験の受験者・Rubyを勉強してる人の参考になったら、幸いです!

Discussion