他言語プログラマがRuby技術者認定試験Silverに３週間で合格した話


**このtipsは2.1時点のモノです。今後改訂された場合、この内容が参考にならない可能性があります。**

##なんで書いたの？
先日、Ruby技術者認定試験ver2.1 Silver試験を受け、82点で合格しました。
他言語プログラマがRuby技術者認定試験を受ける上で勉強方法やコツなどを書いていけば
俺もRubyをやってみようかな・・と思う他言語プログラマが増える！Rubyがますます活発になる！万歳！
なんて理由です。

##参考にさせていただいたもの
[Ruby技術者認定試験Silver version 2.1 必勝合格法](http://qiita.com/5t111111/items/9c50013f1a91b7dd702a)
[Ruby Association Certified Ruby Programmer Gold version 2.1合格体験記](http://qiita.com/kyoshidajp/items/6268fbc9add7d8dda6f5)
[初心者でもほぼ無料で楽しくRubyを学べるコンテンツ12選](http://paiza.hatenablog.com/entry/2015/02/12/%E5%88%9D%E5%BF%83%E8%80%85%E3%81%A7%E3%82%82%E3%81%BB%E3%81%BC%E7%84%A1%E6%96%99%E3%81%A7%E6%A5%BD%E3%81%97%E3%81%8FRuby%E3%82%92%E5%AD%A6%E3%81%B9%E3%82%8B%E3%82%B3%E3%83%B3%E3%83%86%E3%83%B3%E3%83%8411)
##自分のプログラミング経験について
* 経験言語はC/C++がメインで他にC#,VB.netを少々
* スクリプト言語はろくに経験なし(バッチファイルを作ったことがある程度)
* Rubyは日本人が作った言語でWebでよく使われてるんでしょ？ぐらいの知識レベル

##受験申し込み方法について　
**なぜかこんなところでハマりました。**
**泣きたい**

~~Ruby技術者認定試験制度のHPに申し込みがあったり、プロメトリックのHPがバウチャーチケットをやたらアピールしてたのが悪いんや！(言い訳)~~

プロメトリックに登録して、試験予約ページからクレジットカード払いやコンビニ振り込み払いを選択しましょう・・・

**試験会場が小さい・少ない地域だと、３日前に予約しようと思っても埋まっている可能性があります。**
**２週間程前に予約することをオススメします。**




##自分の勉強方法

###1週間目 : Rubyの世界へようこそ

####1. まずはRubyに触れてみよう
みんな大好きドットインストール。
まずはこれでRubyの雰囲気を掴みました。
http://dotinstall.com/lessons/basic_ruby_v2


####2. 入門本を読んでみよう

![41WMC2+5rfL._SX351_BO1,204,203,200_.jpg](https://qiita-image-store.s3.amazonaws.com/0/58546/c12073a3-c747-7fed-eafa-93e9b6673c47.jpeg "41WMC2+5rfL._SX351_BO1,204,203,200_.jpg")
[**たのしいRuby 第４版**](http://www.amazon.co.jp/dp/4797372273)


非常にわかりやすく、入門には最適な一冊です。
また、各章の最後に確認問題があるので、そこでコードをガリガリ書いて覚えることができます。

###2週間目：Rubyに慣れることで深く知る
####3. とにかく書いてみよう

[**paiza**]( http://paiza.jp/) スキルチェックで様々な問題を解くことができます。
文字列・配列・ハッシュを活用してリファレンスを見ながら問題を解くことで、より理解が深まります。

[プログラミングスレまとめ in VIP](http://vipprog.net/wiki/) の練習問題
アルゴリズムの実装等も理解の助けになります。
~~なお、変態的な実装はいい子は真似しないでください~~

####4.試験対策本を読んでみよう
**Ruby技術者認定試験合格教本 Silver/Gold対応**
![9k=.jpg](https://qiita-image-store.s3.amazonaws.com/0/58546/7ecf3af9-1dda-1369-deed-97d92f419252.jpeg "9k=.jpg")
http://www.amazon.co.jp/dp/4774175676

2015年に改訂されましたが、「完全に」2.1に対応しているわけではありません。
(具体的には第５章・組み込みクラスの説明が1.8時代のものでした。)
**この本を読む場合、他に2.1以降に対応した書籍を読むことを推奨します。(楽しいRubyでOK)**


模擬試験・演習問題は2.1に対応しているので、それを目的として買うのもアリな選択肢です。
**現に類似した問題が多数試験に出ました!**


###3週間目：試験対策の仕上げ
####5. 模擬試験を受けてみよう
* Ruby技術者認定試験公式でSilverの模擬試験が出されています。
* Ruby技術者認定試験合格教本の模擬試験はかなり本番に近い問題なのでやる価値は高いです。
* [ミニツク](http://www.minituku.net/ "ミニツク")のドリルもやってしまいましょう。
<br>(※ミニツクはVer2.1に対応していないのでirbで実行結果を確認しておきましょう。)

模擬試験を解く上でのコツは
**正解がなぜ正解なのか説明できるように、間違っているものがなぜ間違っているか説明できるようになるまで繰り返す**
理由が説明できれば、かなり理解が進んでいる証拠になります。

####6. 自分の弱点を見なおしてみよう
* 模擬試験で自分が弱い部分を明確になればそこを重心的に勉強しなおし、再度模擬試験を解く、を繰り返します。
* 5.で上げた模擬試験が全部満点取れるようになれば試験合格は目の前です！


##コツ
###インターネット・書籍を読む上で注意!
Ruby技術者認定試験は2014年10月に改訂され、ver1.8からver2.1となりました。
そのため、改訂以前に作成された試験対策Tipsなどは2.1では実行結果が異なることがあります。
irb等で挙動をしっかり確認しましょう。
**バージョンの違いに関連する問題は少ないですが、点数を稼ぐためにもしっかり2.1での挙動を覚えましょう。**
###破壊的・非破壊的メソッドをしっかり覚えよう
他言語から来た人はここでつまづく事があります。
破壊的メソッドは必ず!を付けなければならないというわけではないことに注意してください。

```ruby
a = "abc"
b = "def"

a.chop
a.chop
a.concat(b)
p b #=>bの出力値は?
```

この場合、chopは非破壊的メソッドになるため、aの値は変更されません。
しかし、concatは破壊的メソッドになるため、aの値が変更されます。
よってbの出力値は"abcdef"になります。
もしchopではなくchop!メソッドであれば、破壊的メソッドになるためaの値が変更され、bの値は"adef"になります。
試験では破壊的メソッドバージョンが有るメソッドで破壊しているか？してないか？という問題がよく出ます。
!があるかないかに注意してください。

###同じ機能のメソッド・似た機能のメソッドを覚えよう
Rubyでは同じ機能をもつメソッドが複数ある場合があります。
「同じ結果になるメソッドはどれか？」という問題をよく見ます。

例として、以下のようなメソッドがあります。
Hash# has_key?, key?, include?, member?
Array# map,collect

また、似ているけどちょっと結果が異なるメソッドに関する問題が出されることもあります。
例として、
File#gets,readline (EOFだった場合の処理が異なる)
というものが有ります。
リファレンスをよく読んで見ましょう！

###String,Array,Hashクラスを重心的に覚えよう
試験問題は全部で50問。
**そのうち15問程度が配列、約5問程度がハッシュ、約10問程度が文字列です。**
合計で30問です。
組み込みクラスの問題としては他にIO,Time,Regexpの問題が有りますが全部合わせても7~8問程度です。
この３つのクラスをしっかり覚えることで得点数アップは間違いありません。


###明らかに違う選択肢は切り捨てよう
例えば、こういう問題があります。

```ruby
	問:以下の__(A)__に入るものを１つ選択してください。
	File.open( "foo.txt", __(A)__ ) { |file| puts file.readlines }
```

選択肢として、1."r" 2.r 3.w 4."w" の４つが用意されていて、どれが正解かわからない時は
まず間違いなく違う回答を切り捨てます。

この場合、間違いなく違う回答として 2.r 3.w があります。（文字列クラスを渡す必要があるため）
これだけで選択肢が2つだけになります。勘で当てても50%で当たります。

明確にわかるのがベストですが、どうしてもわからない時は切り捨てながら最終候補を探すのも大切です。
殆どの問題に「あきらかに違う選択肢」があるので、ある程度絞れます。



###わからない問題は切り捨てよう
2、３問程度Rubyのコミッターでもわからないレベルの問題が入っていることがあります。
わからない・解決方法が見えないものは勘で当てましょう。
ちなみに僕はこんな問題が出ました。普通にハッシュとして出力されるんですね、コレ・・

```ruby
	p a:1,b:2	   #=>?
```

##最後に
次はGoldを取るか、PHP技術者認定試験　初級を取るか・・・
そういえばRoRの資格試験もはじまりましたね。コレを目指してみようかな。再受験無料キャンペーンしてるし・・
[Rails技術者認定試験運営委員会](http://www.railscp.com/silver/)