はじめに
みなさん、こんにちは torihaziです。
rubyを学習するならこの本でしょ、という"チェリー本"を
読了してみたので忘れないうちのアウトプット回です。
読書レビューとして読んでいただければと思います。
目次
チェリー本とは
ruby学習者界隈では、下記の参考書を表紙のさくらんぼにちなんで
チェリー本と呼ぶそうです。
アフィリエイトとかは設定していません。 プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ) | 伊藤 淳一 |本 | 通販 | Amazon
★★★★☆
この本の評価は 星4つです。
ただ読者のレベルに応じて評価は変わると思います。
私は タイトル通りruby初心者であったため、
「これは良書だ、バイブルに相応しい」とまではなりませんでした。
(これからなるかもしれません。)
ではその★−1個分は何が原因だったのかも含めて
詳細なレビューを書いていこうと思います。
Bad Point
演習問題が少ない
こちらは同書籍の著者の方も懸念されている問題です。
実際にブログ上で問題を配信されています。
私はプログラミング未経験者が少しでもスキルアップするためには
知識を得るだけではなく、知識を使うことに重点をおいた方がいいと考えています。
もちろん"配列やハッシュはこのように書くことができる"ということを理解した
こと自体は初心者であれば拍手喝采であるかもしれません。
しかし、言語を学ぼうとする人間がそこをゴールとするかと言われたら
答えは否です。そこで終わるわけがありません。
ハッシュの書き方が知りたくてその言語を学ぼうと思ったわけではないはずです。
そのハッシュだの配列だのを使った先の"Webアプリ"を作るために
Rubyという言語の学習を志したはずです。
ハッシュなどは1手段にすぎません。クラスやオブジェクトについても同様です。
ただ初心者にとってはその1手段すらままならないと思います。
1手段に過ぎないと思えるレベルに達せられるようになるほどの
問題演習(基礎、複合応用)があればなお良いかと思いました。
以上が★1個分のマイナス原因についてです。
私がなぜそこまで演習問題にこだわるか
長くなりそうだったのでこちらで少し。
私は社会人になってから仕事を進めていく上で将来に対する漠然とした不安感から
プログラミング学習を行っていました。
当時は独学でProgate、Udemy等のインターネット上の学習コンテンツを利用し、
"入門!!Python!!" や "これであなたも Web開発マスター"のような講座(名称は適当です)を
受けては挫折して受けては挫折を繰り返していました。
なぜ挫折したかを今考えてみると次の問題がありました。
- そもそも問題が少ない。
- 知識の使い方がわからない。
- 問題のレベルが段階を踏んでいない。
- 仮にできたものでもレベルが低過ぎて使い物にならない。
私が試した学習教材の多くはすべて基礎は扱ってくれていました。
出力の仕方、if文の条件分岐、繰り返し処理などプログラミングの基礎部分を
どの講座も取り扱っていました
しかし、その講座のほとんどが最終チャプターで
さて、一通りこれで基礎は終えました。
ここからさらにレベルアップするためには自分でものを作ってみましょう。
というものでした。
最初こそはよし!じゃあ何か作ってみよう!
となるのですが、
途端に手が止まりました。
- そもそもあれを作るためにはどうしたらいいの?
- トランプゲーム作れって言われても。。
というように簡単なレベル1~5くらいの処理しか習っていないのに
そんな20レベくらいのことやれって言われても、、となるわけです。(実際20かは不明です)
そしてあれやこれや調べても結局ネット上の我流も混ざったようなコードのコピペを繰り返すだけで
知識が断片化し、やっとこさできたものもこれでいいの?
みたいな代物しかできず、
しょぼいなと思ってやめてしまっていました。
あのときレベル1から20まで1,2,3,4,5,6,7,8...19,20までの詳細な道のりがあれば
どんなに良かったかと今でも思います。
それがあれば多少なりとも現状は違ったのではないかと。
この問題は豊富な演習問題さえあれば解決できたのではないかと思います。
だから私は演習問題というものを大事にしています。
Good Point
網羅性が高い
公式リファレンスには劣るかもしれませんが、多くの読者から愛読されていることからわかるように
これさえもっておけばひとまず大丈夫だろうと思えるくらい情報量があります。
公式リファレンスに勝る箇所は書籍中に著者独自の観点から加えられた部分がある点です。
実際の開発では〜〜
など学習だけでは終わらせず、目標はあくまで学んだ先の開発にあることを
意識させてくれるような著者なりの配慮が要所要所に散りばめられています。
そのため、初学者であっても少しばかり実践のイメージをしながら読み進めることが可能です。
私が印象に残っているのはrubyにはfor文自体はあるが、私はforを使った経験がほぼない
という記載です。
私自身、本業でシェルスクリプトを書いている人間であり、繰り返し処理であるfor文は
多用する人間であるのでメジャーなプログラミング言語であるrubyがそうではなかったことに驚きました。
例題がユニークで面白みがある
プログラミングの醍醐味は何か面白いものを作れる
ということだと私は思っています。
なんかこれすごい、面白そう、作ってみたい
という感情こそが入り口であるはずです。
しかし、このような初心者を対象とした本の多くで扱っている例題の多くは
- for 文を2つ繰り返して、1.1, 1.2みたいに出力しましょう
- Fizzbuzz問題
で終わることがほとんどです。
もちろん勉強にはなるかと思いますが、全くもって面白くないしモチベーションが上がりません。
それに対して本書籍で扱っている問題はなんか面白そう
なものが多いです。
私は特にワードシンセサイザーに惹かれました。
なんかすごそうと思いませんか。
プログラミングを始めたきっかけはリモートでお金稼げるから
であり
多くの人がそのような理由で始めるかと思いますが、お金だけで学習は続けられません。
辛いだけなので。(少なくとも私はそう考えています。)
それであるならば少なくとも学習自体を楽しめた方が良くないでしょうか。
この本にはそんな 楽しい
という感情の根底にある知的好奇心をくすぐるような問題があります。
学ぶものが面白いと思えることは非常に大事なことだと思いますよ。
What I learned ( & difficult point)
私が学習したものの中で特に印象に残っているものおよび理解に苦しんだものは下記です。
- 式と文という概念
- if文の結果を そのまま 変数に代入できる
- moduleというもの
- シンボルというもの
式と文について + if文をそのまま変数へ
式とは 処理の結果を戻り値として変数に格納できるもの
文とは処理の結果を返さず、変数に格納できないもの
どういうことかというと a = {if の条件式 }
みたいなことができるということです。
私が去年学習したPHPでは同じことをする場合次のようにする必要がありました。
<?php if ( true ) { a = "真"; } else { a ="偽"; }
しかしrubyであると 次のようにかけます。
a = if true '真' else '偽' end
不思議でなりませんがそういうものだそうです。
moduleというもの
moduleは定義したクラスに追加したいちょこっとしたメソッドがまとまったもの
です。
拡張機能のようなものを随時提供してくれ、
継承を気にせず複数クラスに共通処理を持たせることができるものです。
rubyにおいて クラスを定義する際は大抵親クラスと子クラスが存在します。
子クラスを親クラスのメソッドなどを引き継いで作成する際は "継承"をする必要があるのですが、
rubyは子は1つの親からしか継承できない"単一継承"を推奨しています。
また継承する際には "is-a関係"と言って"OO(子クラス)はOO(親クラス)の1つである"という
関係が成立している必要があります。
例えばA と Bというクラスで似たような処理を作成する必要がある場合、
A is a B もしくは B is a Aという関係が成り立てば継承はできますが、そうでない場合もあります。
そのような時に両者に共通の処理を持たせるために moduleは使用されます。
シンボル
一見すると文字列のようであるが、Rubyの内部では整数として管理されるオブジェクトのことです。
同一名のシンボルを複数生成しても同じオブジェクトである、つまりメモリ上には同じものとして
管理されるためメモリの使用効率が良くなります。
終わりに
いかがだったでしょうか。
かなり物量が多いので、詰まったら見て、詰まったら見てを繰り返すことによって
少しづつものにしていきたいと思っています。
演習問題も数をこなすことによって
基礎から応用へ着実にレベルアップしていきたいです。
皆さんも頑張ってください。
僕も頑張ります!!