[第5回] 達人出版会 高橋征義の ITエンジニア向けおすすめブックガイド
みなさん、あけましておめでとうございます。高橋征義です。
最初にちょっと宣伝をさせてください。1月9日(土)にジュンク堂書店池袋本店さんで開催されるトークセッション「新春座談会 このコンピュータ書がすごい!2016年版」に登壇する予定です。2015年に出たコンピュータ書をひたすら紹介するイベントで、こちらで紹介した本はもちろん、紹介しきれてないものも100冊くらいは出てくると思います。詳しくはジュンク堂さんのサイトをご覧ください。
お時間のある方はぜひお越しいただけるとありがたいです。よろしくお願いいたします。
『APIデザインケーススタディ(WEB+DB PRESS plusシリーズ)』田中哲 著(技術評論社)
APIデザインケーススタディ ~Rubyの実例から学ぶ。問題に即したデザインと普遍の考え方 (WEB+DB PRESS plus)
akrさんこと田中哲さんが書かれた初めての書籍です。
akrさんと言えばopen-uriやpp、tsortなどの、Rubyの重要なライブラリを書かれた作者としても有名ですが、Ruby本体というか、標準クラスのAPIについても様々な提案・修正を行っています。その成果を元にまとめられたのが本書です。
さて本の中身ですが、控えめに言ってもこれは必読でしょう。「API」と言っても、ふつうに他のアプリケーションやライブラリから利用されるクラスやメソッドの挙動はみんな本書で検討しているAPIと本質的に変わらないので、ほとんどあらゆるプログラマであれば本書を読む価値があります。ちなみに本書の題材はRubyのAPIですが、ぶっちゃけRubyはあまり関係ありません(むしろCやUnixの知識の方があるとより楽しめそうです)。
例えば本書末尾近くにある、「5.04 Interer#bit_lengthメソッド」の節を例に取ります。
(最初の方はI/OとかソケットとかはCやPOSIXに関連する話が多いので、そのあたりに馴染みのない人には詳しく説明しないと伝わらなさそうなので)。この節は、ある整数が与えられた時、その整数が何ビットなのかを返すメソッド、Integer#bit_lengthの仕様を考えるだけのものです。
Integer#bit_lengthの仕様は、リファレンスマニュアルを読めば書いてあります。
self の表すのに必要なビット数を返します。
「必要なビット数」とは符号ビットを除く最上位ビットの位置の事を意味しま す。2**n の場合は n+1 になります。self にそのようなビットがない(0 や -1 である)場合は 0 を返します。
この、たったの2行の仕様を説明するために、本書では7ページまるまる使っているのです。
なんでこんなに説明する必要があるのでしょうか?
それはまず、この「整数が何ビットなのかを返すメソッド」の名前はどうすればよいかから始まり、他の言語やライブラリでの同じメソッド・関数名を調べ、特殊な値(負の数や0)についての挙動を考察するため、このメソッドがどのような用途で使われるのかから検討し、さらにすでに存在するメソッドとの関係性も考えているからです。
このように言葉で書くのは簡単ですが、それを実際にやるとなると相当の経験とコストがかかるでしょう。本書を読めば、そのコストなしで(あるいはページをめくるコストだけで)、経験のみを得られることができるようになるのです。
書籍の構成としては、章はもちろん、細かい節単位でも独立して読めるようになっているので、気になるところから読み始めることができます。それでも内容としてはあらゆる章・節を読むべきなので、特にコダワリがなければ最初から一つ一つ読んでいって、このAPIに対する考え方を丹念に味わっていただきたいと思います。読み終えた頃には、きっとソフトウェアの作り方、設計指針が変わっていることでしょう。強くお勧めしたい一冊です。
『メタプログラミングRuby第2版』Paolo Perrotta 著、角 征典 訳(オライリー・ジャパン)
ちょっとお時間がたってしまいましたが、好評だった『メタプログラミングRuby』の第2版が出ました。
初版を知らない方に説明をしておくと、本書はそのタイトルの通り、Rubyでメタプログラミングをするための方法を教える本です。
Rubyが現在もなお好評を博しているのは、「RailsがRubyのメタプログラミングを駆使して作られていたから」というのが理由の一つに挙げられるでしょう。もっとも、その辺りはRailsのコードをいきなり読んでいくのは、規模からいっても複雑化さからいってもちょっと辛いところがあります。本書を読めば、Railsやその他のRubyのソースコードで使われているメタプログラミングについて、ある程度以上の理解が得られます。
ところでこの第2版、初版とはだいぶ印象が違うと思います。
訳者あとがきでも触れられているように、一番変わったところはその文体で、全編にわたり会話調だった文章が、ふつうの技術書っぽくなっているところです。訳者の角さんはそれを残念がっていますが、私は正直鬱陶しさを感じていたので、大変読みやすくなったと思います。というわけで、初版の文体に慣れなかった方にもぜひ第2版はお勧めしたいです。もちろん文体だけではなく、Ruby 2.0以降に取り入れらたRefinementやprependなどの使い方が紹介されたり、Railsの1.xから4.xでのメタプログラミングの使われ方の変遷なども紹介されているので、そこもお楽しみに。
『深層学習』人工知能学会監修(近代科学社)
2015年は深層学習が注目された1年でしたが、それを締めくくるのに相応しい1冊が出ました。
監修が「人工知能学会」となっているのはなんで??と思ったのですが、これは人工知能学会誌に連載された記事を書籍としてまとめたものだからだそうです。
読んでみると確かにその辺によくある縦書きの解説書や、機械学習について特に触ったことのない人が動かして試せる程度のプログラミング入門書とは雲泥の差があります。かといって、講談社の「機械学習プロフェッショナルシリーズ」のような、何十冊出てるのかわからない(最終的には全29巻だそうです)ボリュームの書籍群に比べると、一冊で基礎から応用(画像・音声・自然言語への応用)までコンパクトにまとまっているのはありがたいです。
とはいえさすがに学会誌を元にしただけはあって、ぶっちゃけ職業プログラマのひとであっても、アカデミックな文書を読み慣れてない人は相当読むのが大変そうです。そもそも詳しく理解するために参考文献が大量に用意されていて、それを読まないとイマイチ役に立たないのでは、という気もします。少なくとも本書以前に何かしら機械学習の知識をある程度は身につけておかないと何が書いてあるかさっぱりわからないと思います。
でも、個人的には本書のような書籍が一般書として出されたことはすごく良いことだと思っています。詳細はポインタの先にしかないとしても、現在のホットなトピックについて、英語の論文集やネットの信頼度が不明な記事を漁らなくてもその全体の見取り図を得られる、というのは素晴らしいことです。このような書籍が今後他の分野でも出てくるようになることを強く期待したいです。
情報処理学会会誌『情報処理』2015年12月号 (Vol.56 No.12)(情報処理学会)
人工知能学会に対抗して、というわけではないのですが、情報処理学会誌を紹介させてください。というのもの、手前味噌ですが私も企画に協力したからです(編集の方はほとんどお手伝いできなくてすみません…)。
今回の特集はRubyです(なんか今回はRuby関連の本ばかりですみません……)。
情報処理学会誌でRubyが取り上げられるのは12年ぶり2回めで、前回は12年ほど前、Ruby on Railsによる爆発的な人気が起きる前だったので、「とりあえず日本発のプログラミング言語で世界(の一部)に知られるようになったのはめでたい」くらいの温度感だったようです。それに比べると今回は、前回とは大きく状況が異なり、Rubyも「名実ともに世界に広く使われるプログラミング言語」くらいのビッグな扱いになりました。
特集の各記事も、ISO規格になったRubyの言語仕様と標準化についての話や、RailsやDSLやmrubyやその他もろもろの応用まで、幅広く取り上げられています。
なお、最初の記事「20年目のRubyの真実」は、まつもとさんとささださんのインタビューというか対談みたいなものが元になっていて、それを記事にしているのですが、ぶっちゃけ同じ記事とは思えない内容になっています。インタビューの元原稿の方はWebに掲載されているので、そちらだけでも読んでいただき、機会があればぜひ掲載記事と読み比べてみると面白いでしょう。
また、特集末尾を飾る座談会「Rubyの20年、Rubyのこれから」の元になった座談会もまつもとさんと大学の研究者の方々がRubyについて楽しく語っておられて、これも普段あまり接点のない「研究者から見たRuby」を興味深く楽しめました。
参考: 情報処理学会