nekoTheShadow’s diary

技術ブログとして始めたはずが、読書&愚痴ブログになりました(´・ω・`)

伊藤淳一『プロを目指す人のためのRuby入門:言語仕様からテスト駆動開発・デバッグ技法まで』(技術評論社)

Twitterはてなブックマークでみんながほめていたから」というたいへん"みーはー"な動機で買ったのですが――超よかった(´・ω・`) なお本書に割いた時間は1日1.5-2時間×1週間弱。読みながら例題をすべて写経したあと、もう1回通読しました。

まず断っておきたいのは、これを書いている人はRubyのプロではないということです。Ruby歴は3-4年程度、本業はSIer勤務のシステムエンジニアですが、お仕事としてRubyを書いたことはありません。Rubyに関連するOSSに関与しているわけでもなく、複数人によるRuby開発の経験はほとんどなし。書籍やネット上の情報を頼りに独立独歩/孤立無援/徒手空拳Rubyを学んできました。ちなみに競技プログラミングシェルスクリプトの代用がわたしのRuby利用の大半になります。

要は日曜大工ならぬ日曜Rubyistの立場でしか本書を判定できないということです。たとえば「本書を読めば、本当に"プロ"になれるのか」あるいは「本書の記述は"プロ"としてやっていくに十分か」というような判断はわたしにはできかねます。ただ無手勝流ながら結構な時間を投資してきたという自負はありますし、事実本書で紹介されるRubyの機能や書き方で「まったくもって初見」というものはありませんでした。その程度の人間がこの記事を書いていると思って読んでいただけると幸いです(´・ω・`)

前置きが長くなりましたが、わたしが思うに本書のよいところは4点挙げられます。まずはRubyの基本文法を網羅的ながら、ほどよく学べること。あるプログラミング言語の機能を紹介するにあたって、「どこをどれだけ取り上げるべきか」「どこを泣く泣く捨てるべきか」というのはさじ加減の難しい問題だと想像しますが、本書はその点において過不足のない分量だったように思います。とくにSymbolやRegexpなど「多言語ではなじみが薄いが、Rubyでは多用される機能」「Rubyではとりわけサポートの手厚い機能」について、しっかりとページを割いており、「誰に向けての本であるか」を筆者が強く意識しながら執筆したことを感じさせます。

次にRubyらしい書き方が学べる点。Rubyは「やりかたはひとつじゃない」言語として知られていますが、いくら多様な書き方を許容するとはいえ、パフォーマンスや可読性や慣習の観点から「推奨される書き方」「推奨されない書き方」が存在します。ただこの「推奨される/されない」はRubyプログラマやコミュニティの中で暗黙的に了解されているだけであり、新規参入者は非常に学習しづらい。本書はそのような暗黙的「Rubyらしさ」を体系的網羅的かつ平易に解説しています。本書の中では「Rubyではこのような書き方が好まれる」「Rubyの機能としては存在するが、推奨されない」という類の表現が頻出するのですが、これこそまさに「読者にRubyらしいコーディングを身に着けてほしい」という筆者の意思の現れであると思います。

3つ目の長所として手を動かしやすいつくりになっていることも見逃せない点です。本書は「その章を読み進めることで、章の冒頭に提示された例題が解けるようになる」という構成を採用しているのですが、まずユニークなのは「例題を冒頭に提示する」点。IT計技術書だと「省の最後にクイズが添えられている」というものはよく見かけますが、冒頭というのは珍しいのではないでしょうか。ただこのような構成だと、読者はその問題に解答することを意識して章を読み進めることになるので、読むことに対する身の入り方が変わってきます。

また例題の解答も「単にソースコードを教えて終わり」ではなく、「プログラマがその例題をどのように解決していくのか」の過程が詳細に示されます。本書ではテスト駆動開発(TDD)という開発手法が採用されているのですが、この例題の解説に沿ってソースコードを写経していくと、まるでTDDにたけたシニアデベロッパペアプログラミングをしているかのような錯覚に陥ります。Rubyプログラミングだけではなく、TDDの初歩まで学べるなんて、一石二鳥ですねー。

最後に本書はプロとしての立ち振る舞いまで教えてくれる1冊です。「エラーメッセージはきちんと読む」「英語にひるまない」「Dont't Repeat Yourselfを忘れない」などなど、プログラマであれば当然知っておくべき原理原則や心構えを本書は随所で訴えており、タイトルにわざわざ「プロを目指す人のための」という文言を冠した筆者のメッセージが伝わってきます。個人的には「9.4 例外処理のベストプラクティス」「11.5 汎用的なトラブルシューティング方法」あたりは、Ruby以外でも十分通用する内容だと思いました。今の職場(保守開発)の壁という壁にコピーを張って回りたいぐらい(切実)

以上4点、ちょっとほめすぎかしらん(´・ω・`) ただそれだけ学びの多い1冊でした。Rubyをお仕事にしていないわたしですら、これだけ勉強になったということは、Rubyをお仕事にしている人、これからお仕事にしたい人にとっては、きわめて役立つのではないでしょうか。