4年目プログラマの Ruby Association Gold 合格体験記
はじめに
2017年5月にRuby Gold 合格しました。
結果は80 / 100 と、合格点が75点である中、なかなかギリギリのところでした。
Ruby Goldの合格体験記はSilverに比べて少ないイメージなので、私も残しておこうかなと思います。
なんで受けたの?
ほぼ、モチベーション的にはSilverと同じです。
一人のプログラマとして、なんでもいいから一つの言語としっかり向き合ってみたかったからです。
Ruby Gold までくれば、メタプログラミングの知識も必要だったので、より深くRubyを勉強できるかなと思ったので挑戦させていただきました。
勉強方法
公式教科書
私は古いのを持っていました。
Silverの時と同じく、試験範囲を把握するために利用。
この教科書だけでは、試験範囲の内容としては心許ないです。
添付ライブラリやメソッドチェインなどは、後述のパーフェクトRubyやメタプログラミングRubyなどで、補填しました。
パーフェクト Ruby
Rubyistであれば、持っていて損はない一冊。 公式の教科書だけでは足りない深い部分の理解をしたいときはこっちで調べました。
メタプログラミングRuby
メソッドの継承の仕組みなどのRuby Goldの試験範囲を勉強するには最適の一冊。 公式の教科書やパーフェクトRubyにも継承に関することは書かれているのですが、この一冊で勉強した方がより実践的に学べます。
オブジェクト指向設計実践ガイド
Ruby Goldの資格勉強とは離れるのですが、Rubyの理解を深めるために購入。
初めてオブジェクト指向を本格的に学びました。
そもそもオブジェクト指向言語であるRubyなのに、オブジェクト指向を理解していない時点で負け。 Rubyのクラス定義やらが曖昧なままでは、太刀打ちできないということで勉強させていただきました。
問題集
Ruby技術者認定試験【Gold】模擬問題(1~10)|CTC教育サービス 研修/トレーニング
100点取れるまでひたすらやりました。
他の方の受験記
Google先生に、「Ruby Gold 合格」聞いてみて出てくるブログ記事を読み漁る作業。
勉強時間
勉強期間は1ヶ月くらいですかね。 受験日が5月末日だったので、GWは全てRuby の勉強に当てていました。
GW後は、朝(出社前)、会社の昼休みを利用して1日、2時間は勉強時間を確保しました。
個人的に試験のここがポイント!
継承チェーン
Ruby Goldはこの継承チェーンが6割くらいなので、ここをどれだけ極めるかが肝です。
extend()
した時の挙動、extend()
をフックするメソッドは何か?など。
メソッド | 動き | 前フック | 後フック |
---|---|---|---|
include | moduleをクラスの後の継承チェーンにMix-inする | append_features() | included() |
prepend | moduleをクラスの前の継承チェーンにMix-inする | prepend_features() | prepended() |
extend | オブジェクトの特異クラスにmoduleを取り込む | extende_object() | extended() |
super()の挙動
super()
って、()
のあるなしで挙動が変わるって知らんがな。
メソッド呼び出し(super・ブロック付き・yield) (Ruby 2.4.0)
class Foo def foo(arg='default') p arg end end class Bar < Foo def foo(arg) super(5) # 5を引数にして呼び出す・・・(1) super(arg) # argを引数にして呼び出す・・・(2) super() # 引数なしで呼び出す・・・・(3) super # 3を引数にして呼び出す・・・(4) arg = 1 super # 1を引数にして呼び出す・・・(5) super() # 引数なしで呼び出す・・・(6) end end Bar.new.foo(3)
実行結果
5 # (1)の出力結果 3 # (2)の出力結果 "default" # (3)の出力結果 3 # (4)の出力結果 1 # (5)の出力結果 "default" # (6)の出力結果
勉強するために工夫したこと
説明できるように!
他のRuby Gold受験者やRuby初心者に説明することを意識して自分の中に落とし込みました。
まとめ
Ruby Gold取得して、少し自信が持てるようになりました。
昔、会社の上司に「一個の言語に深く潜ってみろ!」と言われたのですが、その言葉を胸にひたすら言語を勉強してみる半年だったかなと思います。
今回のRuby Goldを取得するために勉強したRubyにおける継承チェーンやオブジェクト指向的な書き方。 じゃあ他の言語(JavaやPHP)の時はどんな風に書くのかなと言ったところを考えながら、他の言語も勉強していこうと思いました!!