Ruby技術者認定試験Gold合格しました。

#### 前書き

Rubyの試験は、昨年11月にsilver取得済み。
2ヶ月たった1月30日にGold試験合格致しました。

このエントリでは、参考になったサイト様(神々)のご紹介を致します。(ご存知の方も多いはず。)
ほぼ自分メモですのでご承知おきくださいませ…。
(神々よ、本当にありがとう…お陰様で私も合格出来ました:relaxed:)

[実際に受けた試験内容を追記しました](#試験対策おまけ)

#### 中の人の遍歴(というかポリテクの授業内容紹介では:sweat_smile:？な何か)

<details><summary>見たい方だけクリックでどうぞʕฅ•ᴥ•ฅʔ</summary><div>

  - **開発経験なし。**プログラミングのプの字もない。
  - 何なら前職は機械設計なので、自称3Dモデラーとでも言うべきかも。
  - 生後3ヶ月の娘がいる状態でのスタートなので、**勉強出来るのは学校に居る間だけ。**
  - 昨年8月からポリテクに通い始め、最初のひと月はマナー講習とWord、Excelの授業。
  - 9月からようやっと1ヶ月Javaの授業開始。
  - **自己学習でたのしいRubyを読み始める。**
  - 10月にはじめてLinuxを触る。2週間ほどAccessを用いたDBの授業。最終週からRuby基本の授業が2週間ほど。(内容はたのしいRuby7章まで程度)
  - `この頃、余りにも自己学習の邪魔をしてくるクラスメイトがおり、1ヶ月ほどRubyの学習を中断。その間Pythonの自己学習をする。なお、その方は他の人にもやらかしたらしく先生から注意を受けたとか何とか… `
  - 11月にLAN等のネットワーク構築基本の授業。
  - **試験2週間前から合格教本を用いて試験傾向対策実施。Ruby silver試験合格。**
  - 12月の前半までネットワーク構築、後半からRailsの授業が始まる。
  - **この月の中頃にITパスポート試験を受験し、1月18日の合格発表を持って合格確定。なお勉強時間は3週間ほど集中して行った。**
  - 1月半ばまでRailsの授業、後半からはJava言語にてAndroidStudioでアプリ開発実習(←今ココ。)
  - **正月すぎから試験傾向対策し、1月30日にRuby Gold試験合格。**

経歴の方が長いぜよ…:expressionless:
1日1時間も勉強出来てない計算なので、本気で集中して(集中力が持続すればだけれど)3ヶ月でも取れる人は居るのではないか？疑惑。。。

</div></details>

## 参考にさせて頂いたページ(神々)のご紹介
- silverの学習からお世話になった神ブログ様。幅広く学習後、試験対策の情報絞込みに最適かと存じます:smile:
[Ruby Gold 試験範囲を一気に見直す](
https://tamata78.hatenablog.com/entry/2015/11/03/101002)
この方の凄いところは、勉強の仕方の参考になる方針までしっかり纏めてらっしゃることではないでしょうか。
[Ruby Gold勉強方法のまとめのまとめ](https://tamata78.hatenablog.com/entry/2015/08/17/215136)
無事合格なさった時の振り返りに、私が受験した時とほぼ同等の問題が何問か出ておりました。有難い…！
[Ruby Gold合格できました。感想と振り返り](https://tamata78.hatenablog.com/entry/2015/11/20/232429)

- 定数まわりが理解しきれなかった時に拝見して、物凄く納得したうえ、良く作ってくださったなと関心した神エントリ様:smiley:
[Rubyの定数が怖いなんて言わせない](https://qiita.com/fursich/items/a1b742795cf10eebc73f)

- 試験直前に発見したサイト様。私が受験した時も何問か同様のものが出ました。自信持って回答出来たので感謝しかない:hugging:
[Ruby技術者認定試験-Goldを受験したお話](https://media.growth-and.com/ruby%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93-gold/)

- YAML公式サイトから持ってきたのかな？と思しき文言(YAMLは人間にとって読みやすい～等)が複数選択問題に出てきたので、こちらのリンクも置いておきますね。
[YAML公式サイト](https://yaml.org/)

## 学習に利用した問題集

- 公式教本の問題集は簡単なので全問解けるようになっておくと良いです。(実際の試験で同じ問題は2問出ました。)

- CTC教育サービス様の問題集。私の場合、公式教本より簡単と感じたので、学習前半の定期的な理解度チェックに向いているかもしれません。(似たような問題は出ます。)
[Ruby技術者認定試験【Gold】模擬問題](https://www.school.ctc-g.co.jp/ruby/training_ruby_gold_01_10.html)

- silver.mdと同じ方のGithubにあがっているGold.mdです。実際の試験と問題の雰囲気が1番近く感じました。こちらも全問解けるようになっておくと良いです。
[Gold.md](https://gist.github.com/sean2121/0969a089fc5cdf02dfba7b14ba331c64)

- やはり最終的に問題集マラソンすべきはRExでしょうか。解説がすぐに見れない分、考えたり調べたりするので、1番力がつくと感じます。
[REx - Ruby Examination](https://rex.libertyfish.co.jp/)

#### 個人的な学習のコツ

あくまで個人の主観ですが、

- るりまを一通り全て目を通してみる(無理に覚えなくて良い)
- 触ったことのあるもの(クラス、メソッド等)と無いものを仕分けておく。
- 触ったことの無いものを一通り触ってみる＆雰囲気だけでも理解できるまで調べてみる。
- 教本等の問題集で不正解のところをチェックしてピックアップする。
- 重点的に調べてみる＆挙動の確認をしてみる。
- るりまをまた一通り眺めて「これ何だったかな？」が発生していればキチンと調べる。(Qiitaに丁寧に書いてくださってる神々に感謝しながら読むと幸せになれる。多分。)
- 再度問題集へ…のルーティンを行う。

この時「これ何だったかな？」となりやすいところの傾向を自己分析出来ると、格段に対策がしやすくなります。

苦手なところにマーク(付箋でもメモでも)をつけるようにすると良いです。
3つ以上マークが着いたら、そこが苦手分野なので対策をしっかり行いましょう。

## 試験対策おまけ

私が受験した時の問題はこんな感じでしたよ報告を兼ねて、押さえるべきポイントをいくつか。
(とはいえ、1/3以上複数選択問題なので、覚えている限り書き出しておきます。)

- superは何処のメソッドを呼ぶか？(継承関係)
- selfは何処指すか？(カレントはどこか)

- extendするとancestorsには入らない。
- クラス変数の値は、サブクラスでも共有されているため、参照すると同じ値を返却する。

- メソッドの可視性は、後から変更可能。(サブクラスで再定義でも実現)
- メソッド内で、SyntaxErrorにならずに定数更新できるのは << (シフト)。

- 定数の::Fooは、暗黙でObject::Fooになる。Object部分で構文を遡り、無ければ継承チェーン探索へ移行。
- Math呼び出し同様、クラス名::メソッド名で呼び出せる。

- const_missingは、任意クラスでObjectをレシーバに出来る。(class Foo内で、self.const_missing/Object.const_missing)

- cloneとdup(Kernelについて)複数選択が複数出題。
- append_featuresは、再定義する時superを記述しないとinclude出来なくなる。
- ensure節は実行されるが、評価されない。最後に評価された文が、begin式全体の評価として返却される。
- 捕捉する例外を明示しないとき、暗黙的にStandardErrorを捕捉。全ての例外のスーパークラスはException。
- 可変長引数について複数出題。デフォルト値指定不可、各メソッドに1つのみ。
- マルチスレッドの例外発生時挙動。rescueされないと例外発生スレッドのみ警告無しで終了、デバッグモードはメッセージ出力してインタプリタ全体が中断。
- Socketクラスに存在するクラスを全て選択。
- StringIOの説明で正しいものを全て選択。


ナントカ先生のクレバー方式(もどき)

- Fiber.new⇔Fiber.yield/resume
- Proc.new⇔call
- lambda⇔call
- &block⇔yield/block.call
- refine⇔using
- (YAML,Marshal等)dump⇔load
- Thread作成⇒new/fork/start
- 制御構文(for等)⇒スコープを作らない
- メソッド(each等)⇒スコープを作る
- Date(DateTime)で+1⇒1日後
- Date(DateTime)で>>1⇒1ヶ月後
- Date(DateTime)同士で引き算⇒Rationalオブジェクト
- Time同士で引き算⇒Floatオブジェクト
- RationalとFloatの演算⇒Float優位
- FloatとComplexの演算⇒Complex優位

Gold試験をこれから受けられる方が、無事合格出来ることを祈って…:clap_tone1: