Roll With IT

tamakiのIT日記

Rubyリファレンスマニュアル(公式ドキュメント)を読み解く

f:id:shirotamaki:20210301143833j:plain
出典:photoAC

目次

はじめに

フィヨルドブートキャンプに参加し早いもので2ヶ月が経ちました。
FJORD BOOT CAMP(フィヨルドブートキャンプ)

bootcamp.fjord.jp

現在はRubyの学習に取り組んでいます。
そんな中、今回はRubyを扱う上では避けては通れない「Rubyリファレンスマニュアル」について書きたいと思い、久しぶりにブログを開きました。 今回テーマに取り上げたのは、私自身が公式ドキュメントの内容を読み解く力が弱く、苦手意識(理解が難しい…😓)があるのが理由です。アウトプットをすることで少しでもRubyリファレンスマニュアルと仲良くなれればと思い書いてみることにしました✍️

リファレンスマニュアルとは

リファレンスマニュアルとは - コトバンク
リファレンスとは - IT用語辞典 e-Words

一次情報の重要性

Rubyに限らずプログラミング言語には、公式ドキュメントが存在します。プログラミング学習において調べ物をするとき、まずは「一次情報」を確認するように言われます。

「一次情報を死守せよ」というのは、私の大先輩であり、師匠の一人が私にかつて授けてくれた教えの一つだが、これは実に正しく、真実にたどり着くための道の入り口であり、出口でもある。 安宅和人
引用:噛みしめることを大切にしよう - ニューロサイエンスとマーケティングの間 - Between Neuroscience and Marketing

学習当初(独学時)は、Qiitaやブログ記事など、取っつきやすい情報に触れ、そこから知りたい情報を得ていました。公式ドキュメントの存在は知っていましたが、難しさから避けていました。簡単に手っ取り早く理解できる、安易で分かりやすい記事に飛びつき、そこから情報を得て理解していた気になっていたと思います。
もちろん、正確で有益な情報も多くあると思いますが、初学者の私にとってはその判断が難しく、不正確な情報を掴まされることも多くあったと思います。

その後、フィヨルドブートキャンプで学習を進めることで、公式ドキュメントの重要性を理解し、何よりもまずは「一次情報」から確認する習慣を付けるようにしました。

Ruby公式ドキュメント

以下、公式ドキュメントとRubyリファレンスマニュアルは同義として書いています。

Rubyの公式ドキュメント

Rubyのバージョンごとに選択が可能になっています。 全て日本語であります。他の言語だと英語しかないものもあり、英語が苦手な私に取ってはとてもありがたいです😆

docs.ruby-lang.org

検索サーチサイト

Rubyリファレンスマニュアルには検索機能が付いていません。下記のサイトから調べたい用語等を入力し検索をかけ、リファレンスマニュアルに飛ぶことができます。

docs.ruby-lang.org

検索のTips

下記のサイトを参考に、chromeの検索バーからショートカットで飛べるように設定しました。 るりまを開く手間が省け時短になります。他のサイトでも応用がきくため活用しています。

既定の検索エンジンを設定する - パソコン - Google Chrome ヘルプ
ChromeでRuby関連の検索を楽にする - Re: 醤油の一升瓶じゃあ戦えない

なぜ難しいのか?

ここからが本題。

なぜ難しいのか?私なりの見解は以下です。

  • 分からない用語、記号が多すぎる。
  • 技術書独特の言い回し(文章構造が理解しづらい)
  • そもそもRubyの基本を理解していない

大きくこの3つが要因かと思っています。(あくまでも個人的な見解です)

まずは、分からない用語、記号が多すぎる。

公式ドキュメントは初学者を対象にしているわけではないため、Rubyで使う専門用語がバンバン出てきます。また、独自の表現方法である記号等もあります。Rubyを書籍等で一通り学んだレベルでは、なかなか理解できない用語も多いです。それが読み解く上で障害になっており、気づけばヤックシェービング状態に陥り抜け出せないでいることが多くあります...🐐

yak shaving(ヤックシェービング / ヤクの毛を刈る
これは「ある問題を解こうと思ったら別の問題が出てきて、それを解こうと思ったらさらに別の問題が出てきて…」ということが延々と続く状況を表しています。
yak shaving - ウィクショナリー日本語版

まさに蟻地獄にハマっていくかのごとく、どんどん深いところまで引きずられ、気づいたら全然別のところにいた(別のことをやっていた)なんて事も多く、時間が溶けていきます💦
個人的にはWikipediaのリンクを辿り、思考の旅に出ている感覚が嫌いではないので、ヤックシェービングで刈りまくろ〜とかなってしまいますが、いかんせん目的が「放浪」ではなく、たどり着きたい場所が明確に存在する「旅」なので、あまりフラフラしてばかりもいられないのが現実です。また、目的のない放浪になると、好きな方向に逃げがちなので、公式ドキュメントの難解さからつい外れて違うことをしてしまっていることが多くあります🧳

次に、技術書独特の言い回し(文章構造が理解しづらい)

技術書独特の言い回しが、普段、小説などの平易な簡単な文章にしか触れていない私にとっては難解で、理解するのが難しい要因にもなっています。現代に出された本なら読み解けますが、古典など何十年、何百年前の本を読み、「結局、何が言いたいんだ?」となるのと似た感覚に陥ります。 普段から、やわらかなソフトな食べ物ばかりよく噛まずに食べてきたツケが、今ここで歯と顎の退化として現れているのを感じます🦷

最後に、そもそもRubyの基本を理解していない

これを言ってしまうと、「イチから出直して来い!」となりますが、 インスタンス、クラス、モジュール、メソッド、変数やブロックや、その他いろいろ。Rubyの基本を理解していないことには、公式ドキュメントに書かれたものは、理解できないのは当たり前です📚 

どう立ち向かうのか?(読み解くのか?)

一言でいうと「真正面からぶつかって取り組んでいくしかない。」そう考えます。 裏技、テクニック的なこと、近道はあるのかもしれませんが、結局は遠回りが一番の近道だと思いました。また、一度に全部を理解しようとする。この考えもよくなく、少しづつ、一歩づつ理解に努めることで、「忘れた、理解できない。」そうなればまた立ち返って見直す。この繰り返し(反復)しかないと思います。この反復行動を習慣化することで、数カ月先、数年先の自分自身の成長に大きく影響すると思いました。

具体的な対応策

分からない用語、記号が多すぎる

まずは、公式ドキュメントで使われている記号を理解する。
このマニュアルのヘルプ (Ruby 3.0.0 リファレンスマニュアル)
「->」、「.#」、「#」など、公式ドキュメント独特の表現方法があります。何より一番始めに理解したい項目です。

ヘルプの読み方については以下が参考になりました。
Rubyリファレンスマニュアルの読み方をやさしく解説 - Qiita

その後、公式ドキュメントを読み進める上で、分からない用語に出くわしたら以下を確認。Ruby関連の技術書やソースが信用できるWeb情報等でも構わないと思います。
Ruby用語集 (Ruby 3.0.0 リファレンスマニュアル)
Rubyで使われる記号の意味(正規表現の複雑な記号は除く) (Ruby 3.0.0 リファレンスマニュアル)

上述した、ヤックシェービングにハマり倒して目的を失わないように注意しながら、公式ドキュメントを読み解くことに集中します。目的は、公式ドキュメントにあるメソッドやモジュールなどを自分のやりたいことに当てはめ、問題を解決したり、作りたいものを作ることです。

技術書独特の言い回し(文章構造が理解しづらい)

小さく分ける。
単語だったり、コードの一文だったり、分かる範囲で小さく切り分けて考えます。 全体で何を言っているのか分からない場合、小さく切り分けて、何言っているか分かるところまで分解していくしかないと思います。 また、これは言い回しとは違いますが、記載されているコードを実際に手元で確認し動きを見ることも大事だと思います。コードだけ見てても何が何だか分からないものも多いです。読み解く上で、コードを実際に打ち込んでみて、どんな動きをするのか?確認するようにしています。それから、「自分の言葉で言い換えてみる。」これも実践するように心がけています。難しい言い回しなら自分で言い換えてみる。理解するひとつの助けになっています。

そして、最終的にはやはり「慣れ」しかない。 こればっかりは、数をこなすしかないと思っています。

慣れない分野の文献は、誰にとっても難しい
Amazon.co.jp: 独学大全――絶対に「学ぶこと」をあきらめたくない人のための55の技法 eBook: 読書猿: Kindleストア

そもそもRubyの基本を理解していない

技術書を活用する。
体系的に学ぶのには一番適していると思います。
私は、以下の順で難易度を上げRubyの学習をしてきました。 まだまだ理解が十分ではなく、身につけられていない事も多いので、分からないことに出くわすたびに読み返しています。

book.impress.co.jp

gihyo.jp

gihyo.jp

こちらは、最近購入した技術書です。
同じ受講生の@eatplaynap329 さんから教えていただき、メソッド等の概要を掴む助けとして活用したいと思います。

tanoshiiruby.github.io

その他

アウトプットする。

誰かに説明する。自分に説明する。
上述した、自分の言葉で言い換えると同じですが、これも理解を深める上ではとても大切だと感じます。 ノートに書き出す、日報、ブログ、Twitterなどを活用して行うよう意識します。

質問する。助けを求める。

ひとりで悩んでても答えが出ないのなら、諦めることも大事。 必ず誰かが救いの手を差し伸べてくれると思います。

時間をあける

寝る。ご飯を食べる。散歩する。全然別のことをする…
意外にも原因はそこにあるもしれません。 人間休まず働き続けるのは困難です。時間をあけることで、頭の中が整理され、パッと答えが出ることもあります。自然の摂理に従います。

心持ち

ここまで、どのように立ち向かい、乗り越え、理解していくか書きましたが、 とは言っても「心折れる瞬間」は度々訪れます。

  • 何度読み返しても分からない。
  • 何が分からないかが分からない。
  • 何をすればいいかすら分からない。
  • 思考停止…😭

これまで幾度となく、このような気持ちになり心折れ、自分がどこにいるのか、どっちを向いているのか分からなくなることが多々ありました。今でもこの感じが消えることはなく、最近は慣れてきましたが、分からないことと共存している感じを覚えます。しかし、ずっと分からないことが同じではなく、つねにアップデートしているので、今日分からないことは明日分かっているし、明日分からないことは3日後には分かっている感じで、分からないことと共に成長している感じです。

この「何がわからないのかもわからない」というやつ。これはすごくツラいですが、プログラマーにとっては非常によくある状態です。
わからないときの心持ちについて - komagataのブログ

フィヨルドブートキャンプのメンターであるkomagataさんや、他のメンターの方も仰っていましたが、何十年もプログラマとして活躍されてきた方ですら、「分からない」はなくならいと言っていました。

まだまだ修行の身で、その境地に行き着くまでには長い年月がかかりそうですが、

「はいはい、わからないわからない、ワロスワロス

このような境地に辿り着けるように努力を続けたいと思います💪

さいごに

冒頭で一次情報を確認することに触れていながら、Qiita、ブログ記事等を載せていますが、あくまで参考資料(補助教材)として確認する意識を忘れないようにしたいと思います。 ルーツは公式ドキュメントであること。そしてルーツ以外の情報に触れる際は信用できるソースであるかを確認すること。
これからも、公式ドキュメントとは長い付き合いになり、ここから多くの学びを得ていくことと思います。今回ブログに書くことで、少しは仲良くなれた気がしています。今後も継続して読み解き、使い倒せるように努力したいと思います😆

「わかったつもり」は一種の安定状態であり、この状態を壊すことはもちろん、今の自分の理解が不十分であると自覚すること自体、ひどく難しい。逆に言えば、矛盾や齟齬に行き当たり苦しむことは、この安定状態を脱する絶好の機会であり、自分の理解を一段進めるリソースですらある。
Amazon.co.jp: わかったつもり~読解力がつかない本当の原因~ (光文社新書) eBook: 西林 克彦: Kindleストア