💎

未経験がRuby Silverを92点で合格した話

に公開

はじめに

はじめまして!エンジニア未経験で、現在オンラインのプログラミングスクールでRubyを学んでいる「あーく」と申します。Ruby Silver試験を力試しとして受験したところ、92点で合格することができました。この記事では私の体験談をお伝えします。Ruby Silver取得を目指す方のお役に立てれば幸いです!

動機・モチベーション

日々のプログラミング学習の中で、自分が生成AIに依存しすぎていることに気づきました。「簡単なコードでもAI任せ」「自力でエラーを解決できない」など、自身の基礎力不足に直面していました。

技術を徹底的に理解し、理解した情報の整理をして、すぐに取り出せるレベル1の状態( 何もググらずに即実装できるもの)にしてこそ、長い目で見たさいの生産性は上がる。だからアウトカムを急いではいけない。[1](牛尾剛『世界一流エンジニアの思考法』文藝春秋 2023)

調べればすぐ情報にアクセスできるから、自分の脳内にストックしておく必要はないんじゃないかと思っていましたが、長期的に見て、牛尾さんの言うように、「初歩の学習を馬鹿にせず、理解に時間がかかるものとして、急がず徹底的に理解する習慣をつけること」が大切であると考え直しました。

これは一種の逆説ですが、外付けメモリーが大きく便利になればなるほど、外付け装置に頼らないで運用できる人間が強くなります。(佐藤優・伊賀賀一『いっきに学び直す 教養としての西洋哲学・思想』朝日新聞出版社 2024)

この逆説には、痺れました。自分に受肉させた知識で運用できる領域を、広げていこうと決心しました。

基本を押さえるまでは諦めないこと。(Paolo Perotta著 角征典訳『メタプログラミングRuby』オライリー・ジャパン 2015)

粘り強くコツコツ勉強するには、一人だけで頑張るよりも誰かに応援されるほうが励みになります。受験すると決めたら周囲の人に宣言することもおすすめです。

また、睡眠時間や栄養補給、運動や自由な時間など、自分自身へのケアも大切です。無理を続けていると徐々にモチベーションは下がってしまいます。自分のできる範囲内でベストを尽くしていきましょう!

学習計画

まずは、受験の申込みを先にしてしまい試験日から逆算して学習計画を立てました。そしてノートに勉強ログを取って、進捗を確認しながら学習していました。書籍は、目安のページ数を決めて戦略的に読みつつ、よくわからないところはゆっくり丁寧に読解することに努めました。ただ時間に限りがあるので、ログと計画を突き合わせて、試験日までにしっかりと準備できるようにスピードを調整しました。

学習時間は、トータルで60時間でした。平均して1日2〜3時間程度を試験勉強に当てていました。まず一度模擬試験を受けてみて自分の実力をチェックします。それから公式テキストを読み、再度模擬試験を受けてみて、自分の苦手な分野を重点的に入門書や公式リファレンスで勉強します。問題とテキストを行ったり来たりしていました。

ちなみに学生やプログラミングスクールに通っている方は、受験料が半額になる可能性があるので、申請を忘れずに!

学習ツール

書籍(紙でも電子でも)

『最短突破 Ruby技術者認定試験(Silver/Gold対応) 公式テキスト』(技術評論社 2024)

サンプルコードはすべてirbで手打ちして、きちんと教科書通り動くか自分で確認しながら読み進めていきました。この書籍の中でよくわからない箇所があれば、以下の入門書を参照するのもおすすめです。

おすすめ入門書 3冊

Ruby公式リファレンス

「公式リファレンスを読む癖をつけたほうがいい。」ともよく言われますね。入門書のような優しい語り口ではないので、理解するのに困難なときもあります。そんなときは、該当箇所を入門書で確認したり、生成AIに読み込ませて噛み砕いて説明してもらうことを通して、知解に努めました。

Rex(GitHubアカウントとの連携が必要)

はじめて受けたときは、48点だったのですが、合計20回受けてようやく100点を取れるようになりました。9割程度をコンスタントに取れるようになれると安心だと思います。何回かやると、自分の苦手な箇所やよく間違うところがわかってくるのでそこに狙いを定めて重点的に学習します。

※ 問題は毎回すこしずつ変わります。同じに見えて、微妙に違ったりもします。破壊と非破壊メソッドが逆になって出題されたりして、単に答えを暗記しただけでは、正解できないような工夫もなされていて、よくできています。そして複数選択と明記されていないで、複数選択しなくてはならない問題もあります。あとは試験特有の意地悪さはあるので、めげずにやっていきましょう。

GitHubの模擬試験

https://github.com/ruby-association/prep-test/blob/version3/silver_ja.md

https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0

一度だけでなく、何回か解いてみることをおすすめします。解けなかった箇所を復習して、時間を置いて3周くらいしたら身についてきます。


試験当日

9割型は、上記の方法で得点できましたが、あまり見かけなかったメソッドに関する出題もありました。以下参考までに紹介します。

lstripメソッド

a = "   Hello, world.  "
a.lstrip!
p a
結果・解説はこちら
"Hello, world.  "

stripstrip!はよく遭遇したのですが、lstripは、あまり模擬試験では見かけなかったです。 lstripは、文字列の先頭にある、つまり左側の空白文字を削除します。対になるメソッド rstripは、文字列の末尾にある、つまり右側の空白文字を削除します。それぞれ!をつけた破壊的メソッド(元の文字列を変更する)が用意されています。

メソッド名 破壊的か非破壊的か 動作内容 備考
strip 非破壊的 文字列の前後(左右両側)の空白文字を削除する 模擬試験でよく出題される
strip! 破壊的 文字列の前後(左右両側)の空白文字を削除する 模擬試験でよく出題される
lstrip 非破壊的 文字列の先頭(左側)の空白文字のみ削除する leftのl
lstrip! 破壊的 文字列の先頭(左側)の空白文字のみ削除する(元の文字列を変更) leftのl
rstrip 非破壊的 文字列の末尾(右側)の空白文字のみ削除する rightのr
rstrip! 破壊的 文字列の末尾(右側)の空白文字のみ削除する(元の文字列を変更) rightのr

each_lineメソッド

lines = "hello\nworld!\nwhat's\nup?\n"

puts lines.each_line.map(&:capitalize)
結果・解説はこちら
Hello
World!
What's
Up?
=> nil

文字列の各行に対して繰り返し処理をします。ここでは、mapメソッドのブロック内でcapitalizeメソッドを使用して、頭文字を大きくしています。


combination・permutationメソッド

combination(n)で、n個の組み合わせを生成して返します。

a = [1, 2, 3, 4]
a.combination(1).to_a  #=> [[1],[2],[3],[4]]
a.combination(2).to_a  #=> [[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]
a.combination(3).to_a  #=> [[1,2,3],[1,2,4],[1,3,4],[2,3,4]]
a.combination(4).to_a  #=> [[1,2,3,4]]
a.combination(0).to_a  #=> [[]]: one combination of length 0
a.combination(5).to_a  #=> []  : no combinations of length 5

permutation(n)で、n個の順列をすべて生成して返します。

a = [1, 2, 3]
a.permutation.to_a     #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
a.permutation(1).to_a  #=> [[1],[2],[3]]
a.permutation(2).to_a  #=> [[1,2],[1,3],[2,1],[2,3],[3,1],[3,2]]
a.permutation(3).to_a  #=> [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
a.permutation(0).to_a  #=> [[]]: one permutation of length 0
a.permutation(4).to_a  #=> []  : no permutations of length 4

https://docs.ruby-lang.org/ja/latest/method/Array.htmlより


Hashのキーの書き方

入門書によく紹介される{ key => value, …}{ key: value }の書き方がありますが、もう一つ

{ “key+” : value }{ :"key+" => value }

のような形で keyに記号や空白を含めた形で定義することもできるのでした。キーは普通、 “” を使わないので、すこし戸惑います。空白や記号を含めたキー値にしたい場合は、 “” で囲います。

まとめ

試験勉強自体は楽しくて、Rubyに対する基礎理解が深まりました。さらに、プログラミング自体をもっと好きになり、ささやかな自信にもつながりました。Ruby Silverを受験して良かったと思っています。次は、Ruby Goldに挑戦する予定です!

この記事が、これからRuby Silver合格を目指す方々のお役に立てれば幸いです!

私が参考にしていた記事はこちらです

https://zenn.dev/peraichi_blog/articles/01gzw86zydc386477bk9644wtn

脚注
  1. ※括弧内は筆者による追記 ↩︎

Discussion