niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

RubyでつくるRubyをゼロから学びなおすプログラミング言語入門を読んだので感想。

初心者にも、プログラミング言語の実装に興味がある層にもおすすめ

読んでからすこし日が空いてしまいましたが、RubyでつくるRubyを読み終わったので感想を投下しておきます。この本を読んで初心者向けの本はどうするのが良いのか?を考えていたのでそれについての私の考えがダラダラ書かれていますが、ご容赦を…。

対象読者など

本書のはじめににも結構書いてあるのですが、結論から言えば初心者に特におすすめだし、ある程度プログラムを書いたことがあってもプログラミング言語の実装について良く知らない、といった人におススメです。

私がPandocのことばかりやってるので特にそう思うのかもしれませんが、木構造がたくさん出てきて楽しかった?です。データ構造としての木の構造はそこらじゅうで出てくるので、この本を通して慣れることが出来ると良いのではと思います。

この本を読んで、初心者向けに良いな、と思ったもののうち、構成に関係する部分は主に次の通りです。まだあるかも。

  1. 最後まで読み通せる分量になってるのでとりあえずやってみる、が出来る。
  2. カラー印刷や可愛いキャラクタの絵などで見た目のハードルが低い
  3. 目的(この本の場合はインタプリタを作る)に沿って、道が1本に繋がっている(全体でストーリーがある、という意味)ので迷いにくい
  4. これに関連して、初心者向けに必要十分な情報のレベルまで絞り込んでいる(逆にいえば、情報量を多くした本は中級者向けとしての価値がありますね。上級者向けの場合は内容のレベルがより深いものになるのでトピックとしてはまた絞ったものになっていきますが…)
  5. 各章にまとめの節があり、演習問題がある(初心者は自分の理解が正しいかを確認するのが必要なので。私は演習問題やってないですが…)
  6. 注目しているコード片が本文に随時再掲されるのでページをめくって確認する手間がない(究極的には見開きで見える範囲内の情報+そこまでで理解していること、で十分な状態が初心者に易しい)
  7. 索引が充実しているので困ったら索引を引けば良さそう(pdf版はリンクで飛べるのでさらに便利)

あと細かい点としては、フォントの使い分けとか章の始まりが必ず右ページになってるとか、カバーを外した時に出てくるイラストの間違い探し?とか色々仕込まれまくってるのですが、これは実際に見てみてもらうのがよいかな。電子書籍版はカバーの表紙は見れますが、裏表紙、内側は見れないので物理+電子で買うとお得ですね(宣伝)

本題?の感想

パッと見たときの感想から書いてきますね。上にも書いてますが。

本書は130ページ程の、比較的薄め(物理的な意味で)の本なのですが、この一冊でRubyインタプリタを作ってしまうという本です。この分量で、しかもパラパラとめくっていくと図が多いように見えるのに本当に出来上がるのか…?と途中まで不安というか、疑問に思うわけですが、最終的にRubyでつくるRubyインタプリタが出来ます。すごい。

本文の文章も難しいところは多分ないんじゃないかな…と。読みやすいので独学で進める分にも問題ないんじゃないかなと思います。もちろん、近くに分かる人がいて聞けるのがベストですが。そういう意味では教材として使って、わかる人が要所要所で教えてくれるのが最高…ってそりゃそうか。

この本はRuby言語で書かれていますが、実際に必要なRubyの文法規則はあまりないです。扱う範囲もプログラムの基本的な内容、表示、四則演算、変数の代入、変数の参照、条件分岐、ループ、関数、再帰…といったものなので、特定の言語をよらずに応用できる内容です。

ただ、初心者の場合はそのあたりを抽象的にとらえるのは難しいところがあると思います。が、Rubyの実行できる環境さえあれば実際に動かして確認しながら進められるので、まずはこういう風に書くんだな、という形で進めていくと良いと思います。

そう考えると、よく言われることですが、Python版が欲しいなぁ~という気もしますね。内容的にはもちろん、Pythonでも通じるんですが、あとで書くようにパーサ部分が準備されていないと同じことを実行して確認する、が出来ないのが難点ですね(逆にいえばそこさえあれば…)

ここまで初心者向け~と書いてきましたが、実際のところ、中盤~後半は結構難しい内容を扱ってます。変数を定義したりそれを評価したり、関数を定義したり環境を作ってスコープを実現したり、普段何気なく?使ってるプログラミング言語の裏でどういうことが行なわれているのか?の一端を見ることが出来ます。その観点で、これらの内容に興味があるがよくわかってない(私のような)人にもおススメできる内容です。初心者の人もここまで進めることで、いずれコレはRubyでつくるRubyに書いてあったやつか…!となる日がくるかもしれません。

本題以外の難しい部分の隠蔽の潔さ

本来?インタプリタやらコンパイラを作る上で障壁になるのが字句解析/構文解析…つまりパーサの作成に関する部分なのですが、それが本書ではあらかじめ準備されていて、読者はそれを使うだけで良かったりします。そしてそれについての説明は本書では全くされていない、というかなり潔いことをしています。

しかし、結果として最初から最後まで一貫してインタプリタを作っていく、ということにフォーカス出来ているのが良いですね。パーサ部分の解説本も出ないかなぁ…とか思ったり。

おわりに

なんだか終始べた褒め記事になってしまいましたが、この本も自分にとって必要な本だったので…。はじめは、「Rubyかぁ…」とか、「これは初心者向けの本だからまぁ自分には…」とか思っていたんですが、良い意味で裏切られたのでその反動もありますが。本を読んだ感想は、実際に本を読まないと出てこないんだなぁ…という。そして、いつ何が自分にとって必要になる情報なのか、読めませんねぇ…(そらそうだ

追記

ここから余談なんですが(上に書いたことも余談みたいなもんでは?)、ここ数日はプログラミング言語の基礎概念という本を読んでます。

www.saiensu.co.jp

コレを読んでると、「お。これはRubyでつくるRubyのアレか…」みたいになってつながる部分が出てきます。インタプリタを作る=Rubyの言語仕様を実装しているわけで、それはプログラミング言語の基礎概念にもつながるよね…と。

このプログラミング言語の基礎概念は、型システム入門 プログラミング言語と型の理論という本を読もうと挑戦したものの難しくてもうちょっと入門者向けのがないかな…?ということで手を出したのでした。プログラミング言語の基礎概念は最後に型システムの話があるので、これを読み切れば全体をとりあえず俯瞰できて、それぞれの関連が少しはわかるはず…。

www.ohmsha.co.jp

で、この本の翻訳者の方の一人がRubyでつくるRubyの著者さんで、編集者さんが同じ、という。先回りして全部先に置いておきますね~ってやられている感…。

あと思ったのは、型システムみたいに高度な内容を理解しているから入門書で大事なところが押さえられて書けるんだなぁ…という。もちろん、初心者が実際に手を動かしてハマったところをまとめたもの、とかも価値があるんですが、1つの線に沿って導いていくタイプの入門書はやはり内容の理解が出来ている方が良いんだなぁ…という素朴な感想がありました。

あ、あとすっかり忘れてましたが、RubyでつくるRubyの出版社さんのページへのリンクをぺたりしておきます。完全に忘れてた。

紙+pdf版はこちら。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門(紙書籍+PDF版)www.lambdanote.com

pdf版のみはこちら。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門(PDF版のみ)www.lambdanote.com

私は紙の本が好きなので常にそちらを推していますが、ラムダノートのサイトで購入すると紙+pdfなのでよりお得では?と思いまする。

Twitterではちゃんとサムネイル出るのに…なぜはてなブログでは文字だけになってしまうのか…謎だ…。