2015年も残すところあとわずかです。
そんな今年1年のおさらいに、僕が実際に買って読んだ中でも特に琴線に触れた本を、独断と偏見で10冊ほどピックアップしました。
※ 2015/12/29追記: 『SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)』を仲間に入れました。
居酒屋ハムスターの銀次
世界一有名なハムスター・銀次の写真集。素の愛くるしさは言うに及ばず、精巧な居酒屋のミニチュアセットも相まって味わい深い独特の世界観が漂っている。
各写真には、場末の居酒屋店主がいかにも思いつきで言いそうな名言・迷言が添えられており(「人生はなるようにしかならへん」「世界中がアンタを否定したら 俺は世界中を否定したる」など)、疲れたときに開くとほのぼの癒される。
C#実践開発手法 (マイクロソフト公式解説書)
久々に歯応えのある C# 本が出た。
流動性の高いプロダクトに対して適応力のあるコードを追求したストイックな技術書であり、巷に氾濫するアジャイル入門書とは一線を画す。例として、本書の5章では「単一責務の原則」に遵うための効果的なデザインパターンとして GoF の Decorator を挙げている。これには正直目から鱗が落ちた。このような観点でデザインパターンを捉えた書籍など今まで存在しただろうか。
ただしそこそこ難易度が高く、入社直後の新人に与えたら心を打ち砕きかねない。ひとつの目安として、本書の第2章に登場するEntourageアンチパターンの弊害を理解できないうちは本書から得られるものは少ないだろう。正直なところ僕もこの難解な本のすべてを理解できてはいない。
プログラミング ASP.NET SignalR (マイクロソフト公式解説書)
今時の Web アプリケーションでプッシュ通知を実現するには、SocketIO や SignalR などの技術を利用することになる。本書は国内で発刊されている唯一の SignalR 解説本であり、しかも Microsoft 公式というお墨付き。.NET 使いがリアルタイム Web という新たな武器を手にするならば必携の一冊だろう。
Web アプリだけでなく、デスクトップアプリへの適用や AngularJS との連携、スケールアウトの際に留意すべき点なども取りこぼしなく書かれている。惜しむらくは中盤の解説が少々簡約すぎるきらいがあり、通読中に何度も引っかかった。ついに僕の脳も衰えたか。
ASP.NET MVC5実践プログラミング
これまで ASP.NET MVCは未経験であったが、この一冊をひととおり押さえたお陰で仕事で使い物になる知識が手に入った。カスタムデータバインディングの実装など、実務で間違いなく必要となる応用トピックが嬉しい。加えて特筆すべきは EntityFramework の解説が載っている点。
従来、.NET アプリがデータベースとやりとりするには NHibernate などサードパーティ製の OR マッパを使うことが(主に僕の脳内では)一般的であった。最近になってようやく EntityFramework という公式の仕組みが用意されたものの、日本語で読める平易なドキュメントは依然として不足しており、そういった意味でも本書は貴重な一冊である。
AngularJS アプリケーションプログラミング
Google 謹製の JavaScript フレームワークである AngularJS の入門書。著者は『ASP.NET MVC5実践プログラミング』と同じ山田祥寛氏。徹頭徹尾 読者目線で書かれており、初心者であっても躓くことなくステップバイステップで AngularJS を理解できる。
著者の拘りなのか、本書の中で、読者に対してしばしば「テスタビリティ」を意識づけしている(一昔前の入門書では考えられなかったことである)。さらに応用編では1章丸ごとテストに割いている。フィルタ・サービス・コントローラ・ディレクティブそれぞれにおけるテストコードの書き方、モックの使い方など、内容は実践的である。
TypeScriptリファレンス Ver.1.0対応
Microsoft 謹製の altJS である TypeScript の解説書。なぜかAmazonでの評価は高くないものの、他書はもっとダメ(特に川俣本*1)なので、TypeScript 初学者が最初の一冊を選ぶならば本書がほぼ唯一の選択肢だと思っている。
さすがに内容が旧くなっているため、サンプルコードが動かなかったときに自己解決できないような人には残念ながらお勧めできないが、少なくとも最低限知っておくべきことは網羅されており、資料的価値は高い。
Effective Modern C++ ―C++11/14プログラムを進化させる42項目
ここ数年、C++は殆ど書いていないが、知的好奇心から手にした一冊。C++の新たな規格であるC++11 / 14 仕様をキャッチアップしつつ、ベターな書き方を知ることができる。
内容の質も折り紙つきで、 Effective の名に恥じない鋭い洞察に満ちている。読み物としても非常におもしろい。また日本語版では、原著の正誤表*2が本文中に適宜註記されており、より正確性を期したものとなっている。
よつばと! (13) (電撃コミックス)
ついに出た よつばと!13巻。もはやこのためだけに仕事をしてきたと言っても過言ではないほど発売を心待ちにしていた。
「そろそろよつばも ひとりで寝られるように ならなあかんかもな」 「ああ 小学校入ったらと 思ってたけど そろそろでもいいな」
大人たちの会話を聞いて、よつばは不安げな表情を浮かべる——。この本の中でも印象的なワンシーンである。
おっとこれ以上はネタバレになるので自粛。まだ買ってない人は書店に急げ!
DEATH NOTE デスノート(1) (ジャンプ・コミックス)
超今更ながら*3原作を全巻読破したが、本書はただの少年漫画ではない。エンジニアの教科書である。
高校生・夜神月が死神のノートの力に取り憑かれ、敵味方とめくるめく頭脳戦を繰り広げてゆくハートウォーミングな物語。
デスノートには、その使い方に関する必要十分なルールが明記されている。単純に人命を奪うだけならばこのルールさえ知っていれば問題ない。
しかし月は決して思考停止に陥らず、デスノートのルールの曖昧性に着目し、あらゆるコーナーケースに対してデスノートがどこまで効力を発揮するのか実験を始める*4。
彼のとった行動は、仕様の抜け漏れを検証するためのれっきとしたテスト技法の一つであり、開発現場でも実際に行われている。もし彼がシステムエンジニアになっていたら、きっと良い仕事をしたことだろう。
問題プロジェクトの火消し術
体育が極端に苦手な子供にサッカーやバスケをやらせると、とりあえずがむしゃらに走り回るばかりで、「いま自分が何をすべきか」「その行動に何の意味があるのか」を意識できていないような行動が目立つ。これは僕の暴言だが、量産型のプロマネも同じで、有事の際にどう立ち回ってよいのかまるで分っていない。
彼らは根源的かつ本質的な問題から目をそらし、表面化した問題だけをモグラ叩きしがちである(※ 個人の感想です)。
本書は、そんな量産型プロマネが炎上案件に直面したとき、新たな着地点に向かってプロジェクトをどうハンドルすべきかを具体的にまとめた良書である。これは単なるノウハウ集ではなく、かつての炎上で斃れた要員達の累々たる屍を礎にして書かれており、問題案件をかいくぐってきた人間が読めば妙な生々しさを感じることだろう。
なお本書を実践することは、すなわち病根をメスで深々と抉る行為に等しいので、当然ながら痛みを伴う。「自分だけは傷が浅いままでいたい」とか「ノーダメージで生還したい」とか甘えた考えで臨むべきではないし、読後感も決してよいものではない(※ 個人の感想です)。
以上です。
と見せかけて、おまけでもう1冊いきます。
SQL実践入門──高速でわかりやすいクエリの書き方 (WEB+DB PRESS plus)
完全な入門者向けではなく、「簡単な SQL なら見よう見まねで一応書けるが、自分の SQL が売り物として通用するか自信がない」くらいのレベルの人くらいがちょうど良いのではなかろうか。
本書は、SQL のボトルネックについて、実行計画を示しながらわかりやすく解説している。我々の SQL のどこに性能上の問題が潜んでおり、どこに改善の余地があるのか。また、どの程度の性能向上が見込めるのか、トレードオフは何か——などなど、かなり深いところまで解説が行き届いている。
特に面白いのが「ぐるぐる系」と「ガツン系」の話。「ぐるぐる系」とは、ループを使ってレコードを1件ずつ処理する手続き型スタイルのこと。ぐるぐる系 SQL は簡単に書ける反面、時間計算量が線型になるため、残念ながら大量データの処理には向かない。一方、ウィンドウ関数一発で処理するのが「ガツン系」である。ガツン系はいわゆる関数型言語のパラダイムであり、初めはややとっつきにくいかも知れないが*5、一度手にすれば強力な武器になる。
本書は、決して一方向の立場に偏った書き方はせず、必ず根拠を示した上でメリット・デメリットの両論を客観的に述べている。説明も簡潔でわかりやすい。僕が新人の頃にこの本があったならばどれほど幸せだったろうか。
これで本当におしまい。
昨年は割とやさしめの本を多読していましたが、今年はかなり硬派なラインナップです。しかも Web 系多めです(生活が懸かっていたので……)。