新しい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