日々常々

ふつうのプログラマがあたりまえにしたいこと。

「レガシーコードからの脱却」を読みました

頂きまして、ようやく一通り目を通したので書きます。ありがとうございます。 どこを切り取っても話題の中心に置ける、そう言う本でした。

ざっくりどんな本かと言うと

原著「Beyond Legacy Code」が2015年とそこそこ新し目の本ではありますが、目新しいことは書いていません。見たことも聞いたこともないようなものは書かれていませんでした。プラクティス自体は目新しくはないですが、プラクティスの出自や必要とされた背景、実践における戦略などに焦点が置かれている点は目新しいと言えます。

この本の価値は様々なプラクティスから9つだけピックアップされていること。少ないことに価値があります。数を絞った上で個々の背景をしっかり書いたものになっています。

タイトルの「脱却」はレガシーコード改善ガイドのような既存のレガシーコードとの戦い方を彷彿とさせますが、帯には「レガシーコードを初めから作らない」と新規プロジェクトの序盤のように取れることが書かれています。実態は レガシーコードを産み育てる土壌がターゲット で、フェーズに関係なく参考にできる内容となっています。

本書2章に「本物の虫と同じように、バグには繁殖に最適な条件がある。」とありましたが、レガシーコードも同じでしょう。土壌改善なので、別に序盤でしかできないものでも、既にレガシーコードが存在していないといけないものでもありません。流石にプラクティス9の「レガシーコードをリファクタリングする」はレガシーコードが存在しないとできませんが。

面白いのが「人が一度に記憶できるのは7プラスマイナス2個」という数へのこだわり。 副題にある「ソフトウェアの寿命を延ばし価値を高める9つのプラクティス」は当然9つなのですが、各プラクティスの「実践しよう」には7つの戦略が2セットぶら下げられています。例えば。

  • 5章 やり方より先に目的、理由、誰のためかを伝える
    • プロダクトオーナーのための7つの戦略
    • より良いストーリーを書くための7つの戦略
  • 6章 小さなバッチで作る
    • ソフトウェア開発を計測する7つの戦略
    • ストーリーを分割する7つの戦略

といった感じ。目次に無い物としては12章に6つの「変更を難しくするプラクティス」があるなど。まあ7±2個覚えられるからといって、9+(7*2)なんて覚えられない訳ですが、ややもすれば10を超えそうな列挙に数の制限がつけられています。(戦略の方は無理矢理増やした感のあるものがないとは言わないけれど。)

たぶん読まなくていい方

新しい知識が欲しい方で、ある程度の読書家な方。たとえば以下の本のほとんどを読了しかつ実践されている方が新しい手段を求めて読むと、イマイチという感想になると思います。

(参考文献に上がっているもののうち私が読んだことがあるもので、内容のリンクが強いと感じたものを選びました。オブジェクト指向入門やデザインパターンも参照されていますが、それらはそこまででもないかなって。)

あと、アジャイルって文字を見るだけアレルギー反応が出るような方も読まなくていいと思います。徹頭徹尾アジャイルラクティスです。

たぶん読んだらよさそうな方

伝聞や表層だけのなんちゃってアジャイルに騙されて(言い方が悪い)上手くいかず、アジャイルを仕事では役に立たないおもちゃのように感じている方。読めば誤解が解ける可能性があります。

知識や実践を通じた理解は十分でも、自分の考えの整理などを改めてしたい方。プラクティスと原則の話あたりを踏まえて、個々のプラクティスや戦略を読んでいくといい整理になるんじゃないでしょうかね。おさえてないところや捉え方の違いなどもあって、いい壁打ちになると思います。

あまり知識がなかったり、経験の浅い方。冒頭で書いたように様々なプラクティスから9つだけをピックアップした、新設の高速道路です。掘り下げの方向は違いますが、サイズや値段的にも達人プログラマーなどの古典・鈍器本に対するリーダブルコードのような印象。鈍器本に抵抗があるなら是非。

蛇足

タイトルを見た時の感想は「またレガシーシリーズか」でしたね。 とはいえ訳者の方々が方々なので期待せざるをえず、そればかりか頂けてしまったのでこうして読んだわけです。

で、読んでみたらこれが面白くて仕方がない。第一部の導入が良すぎて、そのノリで第二部のプラクティスを読むとどこまでも潜っていくことになりました。時間かかるの仕方ない。 本当はもう少し早くブログ書きたかったんですが、いちいち考えちゃってツイートしたりしちゃって、いつ読み終わるかわからない感じになってしまった。いやページ数の割に考えられるネタ多過ぎるんですよ……

あと、Beyondの意味とか一通りみて考えてみたのですが、脱却以上にしっくりくるものは思いつかず……レガシーコードを超えて?レガシーコードの向こう側に??うーむ、やっぱ脱却が合ってそうだなぁ。

いくつかは私のこれまでのブログやセッションで話したことがほぼそのまま(少なくとも私にはそう見える)書かれていたり、今書いてる途中のブログとネタ被りしてるものとかもあって(近いうちに公開)。参考文献の傾向とか見ればそれはそうなんだろうって感じではあるんですが、なんか勝手にシンパシー感じたりしてました。

とりあえずもう一回読みます。