何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『Effective Debugging』の査読を担当しました

一年越しの夢がかなう

2017年6月24日にオライリージャパンから『Effective Debugging』の邦訳が発売される。

www.oreilly.co.jp

この度、邦訳の査読者として参加させていただいた。 オライリーの方から話があったのは2017年1月ごろ、査読を開始したのが3月中旬ごろである。

筆者のDiomidis Spinellisさんは『Code Reading』や『Code Quality』で有名なギリシャの計算機科学者である。 経歴を見る限り、GoogleのSREエンジニアとして1年間働くなど実務経験もあるすごい人である。

book.mynavi.jp book.mynavi.jp

私は原著を2016年6月頃に紀伊國屋経由で入手している。

『Effective Debugging』も『Effective Python』のように読み進めようとしていた。

xaro.hatenablog.jp

最初の4項目で断念していた。 どこかの出版社から邦訳が出ないかと思っていた。 英語ができない、デバッグに関するドメイン知識が足りないという要因もあるが、筆者が英語ネイティブではないという要因も少なからずあった。 査読をしつつ、楽しみながら読み続けた。

さて、内容としては効果的にデバッグを行う方法が書いてあるのだが、この手の技術では珍しく心理学の観点からデバッグの心構えを説いた項目がある。 「項目9:デバッグを成功させるために心の準備をする」がそれである。 本の帯にも採用されて、

最初に、問題を特定して解決できると固く信じることが必要だ。

から始まり、果ては睡眠時間の大切さまで話が進む。

こう書くと精神論めいたテクニックばかり書いてあるかのような印象を受けるが、1章、2章でデバッグ戦略の全体像、心構えを説明し、3章以降で各場面・ツールに着目してデバッグの手法を解説している。 特に面白いのはハードウェアに関するデバッグでデバイスをアルミホイルで包んで劣悪な通信環境を作ってバグの再現手順を確立したエピソード(「項目16:特別な監視およびテスト装置を使う」)である。

デバッグそのものは言語によらない技法であるが、中で登場するのはC/C++, Java, Python, Lua、各種Unix系のツール、そしてシェルスクリプトである。 使われている言語をよく知らなくても十分読むことができると思う。

ちょうど『Effective Debugging』の書影が公開された時期に業務中に作成したAPI群のデバッグに迫られていた。 そこで役に立ったのが5章の「プログラミング技法」、「項目3:前条件と後条件が満たされていることを確認する」、そして「項目9:デバッグを成功させるために心の準備をする」である。 様々な要因が重なってとてもつらい状況下でもデバッグであったが、『Effective Debugging』を読んで得たものを心の支えにして乗り切ることができた。 アルゴリズムデバッグのようにすぐには役には立たず、じわじわと役に立つと目論見を立てていたが、すぐに効果が出るとは思っていなかった。

原著を所有している方はお気づきであると思うが、邦訳版と表紙のデザインが異なる。 邦訳版は『Effective Python』のテイストに寄せている。 偶然ではあるが、表紙を決めるやり取りを垣間見ることができてとても面白かった。

読んでためになる本である。ぜひ職場、研究室、ご家庭、座右にと思う。