#Ruby超入門 という超良本があるから「Rubyをはじめよう」は一生書かない
五十嵐さん(@igaiga555)の書いたRuby超入門を読んだけど、これ以上ないくらい「プログラミングをこれから始める初心者」に寄り添った超良本だった!以下その理由を詳しく述べるよー。
ページをめくるとまず普段は殆ど使わないけどプログラミングをするときにはよく使う文字のキーボードレイアウトが最初に示されています。恐らく幾度となく「この縦長のやつってどれを打ったら出ますか?」「それは|(パイプ)だね、ここですよ」というやり取りをしたのであろう著者のガチ初心者に向き合ってきた時間の長さが感じられます。
ターミナルやコマンドプロンプトを毎回フルパスでたどって起動しなくて済むようDockやタスクバーに追加しておく方法も最初に案内されており親切です。さらに「Visual Studio Codeを日本語化する」など、どうしても英語を見ると目が滑る初心者に寄り添うやさしさ!
またコードを書いている途中、元に戻したくなったらctrl+z、戻しすぎてやり直したくなったらctrl+yなど、Rubyでのプログラミングを学ぶ以前のパソコンの使い方まで教えてくれます。
道具の使い方について丁寧に書いてあることで初心者だけでなく経験者にとっても学びがあります。ctrl+pであいまいなファイル検索ができること!VSCodeの中でターミナル操作ができること!コマンドプロンプトでexplorer .ってたたくと今のディレクトリのエクスプローラを開くこと!いずれも私は知りませんでした。
初心者向けの技術本でさらっと省略されがちなWindowsだとファイルの拡張子が表示されないのがデフォルトという問題にも真っ向から向き合っています。ちゃんと写真付きでやり方を説明していて素晴らしい・・・。
上下カーソルでコマンド履歴を表示して以前に実行したコマンドを再実行できるとか、途中まで入力した状態でTabキーを押すと補完してくれるとか、そういう細かなところまでちゃんとサポートしてくれて、読めば読むほど「これを書いた人は初心者の気持ちがほんとによく分かってる!」となる超良本です。
何より素晴らしいのが「エラーが出てもパソコンが壊れることはない」というくだり。これ経験者は「あったりまえだろ」と思うかもしれませんが、初心者はちょっとエラー出ただけで「なんか壊した?!こわい!やっちまった!」とめっちゃ焦るのです。
「エラーになると悲しくなるけど、エラーメッセージはRubyから僕たちへの思いやりあふれるヒント」という一文から始まり、エラーメッセージをひとつずつ解説して、おびえる初心者をエラーメッセージを読めるところまで手を取って連れていく配慮がほんと素晴らしい・・・。
初心者はエラーメッセージ出ても読めないから読まないのでこういうのほんと大事なのです・・・尊い・・・。
そんな訳で「ゼロからわかる Ruby超入門」は初心者はもちろん、初心者向けのコンテンツを作る人にたくさんの知見を与えてくれる一冊です。
新卒の教育担当になった、勉強会の講師をやることになった、チームに後輩が入ってきた、など誰かに教える立場になった人にRuby超入門はおすすめです!教え方のコツや気づきがいっぱい詰まってますよー。
過去、初心者向けに「DNSをはじめよう」と「AWSをはじめよう」を書いた私ですが今後恐らく「Rubyをはじめよう」を書くことはないと思います。だってRubyのプログラミングを学びたい初心者の皆さんにはこんな素晴らしい「Ruby超入門」があるんだもん!わーい!
BOOTHだと五十嵐さんの著者サインと缶バッジが付いてくるセットもあるので、自分宛てに「〇〇さんへ」と書いてほしい皆さんはそちらでどうぞ。
とにかく言いたいことは超良本なので読んで!
ほんっとに超良本だから!!読んで!!!!!
------------------------------------------------------------
あんまりだらだら書いてもアレなので以下は省略した私のRuby超入門を褒めちぎる文章ですw
Ruby超入門を購入された皆さんはお手元で本を開いて「わかるわかる」となってください。
P55のベンティアドエクストラソイエクストラキャラメルエクストラヘーゼルナッツエクストラホイップエクストラローストエクストラトッピングダークモカチップクリームフラペチーノが・・・。
「慣習的には変数は小文字で_でつなぐよ」とか「先頭を大文字にすると定数になって、定数に2回代入しようとするとwarningだしながらしぶしぶ実行してくれるよ」とか大変分かりやすい。
getsで取った値は文字列として扱われて、かつ末尾に\nが入るからhoge.to_iしたりhoge.chompで改行取り除いたりして使うのかー。chompってなんだろ、直訳は「むしゃむしゃ食べる・・・?」
空行は無視されるから区切りとして入れていいんだよ、みたいな「当たり前のこと」も解説してあるのが素晴らしい。初心者には「当たり前」だって分からないんだ。
なるほど!コードの途中でbinding.irbすればそこでirbを起動できるからif文の途中とかでぶっこめば変数の中身確認したりとかできるんだ!便利ー。
こう書くとこの機能が使える、と言われても「はーへーふーん」という感じなので、そのあとに「この機能はこういう場面で便利だ!」が続けて書いてあるRuby超入門は素晴らしい。
「pとputsはどっちも画面出力できるメソッドだけど、pメソッドはデバッグ用なんだよー」がめっちゃ分かりやすい。
「財布の残金が少ないときも寂しくないプログラム」というパワーワード。
P90の「if "abc" (必ずtrueになるif文)」を試してみたら「warning: string literal in condition」って警告出た。条件文が入るべきところに単なる文字列入ってるけどいいんか?ってことだね。なるほど。
order = gets.chompみたいに取得時点で\n取っておいてもいいのか。
P55のフラペチーノがP97でまた出てきたw
「n.timesはdoとendでも書けるし{}でも書ける」まではどの解説本もよく書いてあるんだけど、「ブロックを複数行で書くときはdoとendで書いて、1行で書くときは{}で書く」みたいな「慣習的にどうする」って話は書いてなかったりするので、やっぱりRuby超入門は最高。
あれこれ勉強しているうちにするっと忘れてしまったことを、練習問題で「ほらほら、どうやるんだっけ?」と問われて思い出し、記憶に定着する。Ruby超入門は最高。(2回目)
P103の配列さん、足がいっぱいでちょっとアレ・・・。
Rubyって配列のkeyに-1とか-2ってつけると後ろから1番目、後ろから2番目って取れるの?!あと配列オブジェクトに.firstとか.lastで最初とか最後の取れるのか・・・length-1とかせんでいいのね・・・。
P123でリファレンスマニュアルの話出てきたー!「調べ方」を教えることの大切さよ。「Aの問題はBの解法で解けるよ!」だけじゃなくて、「Aの問題にぶち当たったときはリファレンスマニュアルをこうたどっていけばBの解法で解けるって分かるんだよ」的な。お腹空かしてる人にパン渡すんじゃなくて小麦の作り方から教える、的な。
uniq!みたいな破壊的変更をするメソッドの話、元の配列を残しておきたいかどうかで使い分けるといいよ、とあるけど、「そういうケース」の想像がつかないのでさらにもう一歩例があったらいいなーと思った。
P129のブロック・・・急に難しい感じだ。p [1,3,2,"2","3",2].uniq { |n| n.to_s }で比較したときに、数字の1,3,2が残るのはなんでなんだろ?to_sして比較したなら文字列が残るんでないの?と思ったけど、比較時だけto_sで比較するってだけなのか。なるほど。
mapメソッド、さっき出てきたeachと似てない?と思ったけど、P140でしっかり「eachは各ブロックで処理を行う」のが目的で、「mapは各要素を変換した新しい配列を得る」のが目的って書いてあった。理解ー。