課題図書
第7回目のデッドライン読書会(読書×締切ではじめる「デッドライン読書会」を始めました)の課題図書は、「レガシーコードからの脱却」です。原著は2015年発行、和訳の本書は2019年9月発行です。オライリーのソフトウェア開発の汎用スキル系(どういうカテゴリなのか良い名前が思い浮かばない…)の本です。
今回前半の範囲は、本書の最初から7章「プラクティス3 継続的に統合する」までの範囲です。
感想文
全体
本書で言う「レガシーコード」とは、変更ができないコードを指しています。ソフトウェア開発自体が発見的なプロセスであるべきで、つまり、変更が前提とされるのに、そもそも変更ができないコードのことをレガシーコードと呼んでいるわけです。
よくあるうまくいかないソフトウェア開発(例えば失敗するウォーターフォール型とか)っていうのは、レガシーコードを作り込み、あとから品質を作り込み(品質強化テストみたいな営みで)、そのなかでたくさん人が投入されて火消し役と呼ばれる人たちが活躍する、といった形が多いのかなと思います。レガシーコードを作り込むというのは、まさに最初のサービスインがゴールで一発勝負だという前提で進めている場合に起きやすいのだと思います。受託開発の形式で起きやすいとかあるんじゃないかなぁ。開発で儲けて、保守は手離れよく…みたいなマインドのときです。
この本では、それはもうやめにして、原理・原則を把握し、具体的なプラクティスを大工の道具箱のように備えることによって、世の中を良くしていこうという内容です。この大工の道具箱に入れるのが9つのプラクティスで、それはスクラムやリーンの考え方より具体的で、エクストリーム・プログラミングの考え方より抽象的(よりプラクティスの数を絞って)で、まとめられています。
脱線しますが、この「大工の道具箱」といった表現が私は好きです(本書では「自由に使える範囲の知的な道具」という表現もありましたね)。システムエンジニアの道具箱にはいったいどんなものが入っていると面白いのでしょうか。そのうちのソフトウェア開発の技術的な部分にあるのが、この本の9つのプラクティスでしょう。それ以外にも、人事、コミュニケーション、ビジネススキル、哲学、ワークライフバランス、などいろいろなものが入っていると面白いですね。
個別で気になった部分
気になった箇所を引用しつつ、一言コメントをします。
アジャイルやスクラムの目的は急いで仕事をすることではなく、小さなかたまりで仕事をすることだ。
3.3 アジャイルを実践する
これって、本当によくある勘違いを、正しくしているところです!スピードを早めるためにアジャイルやスクラムをやるんではない。小さなかたまりで仕事をすることによるメリットを享受することが一番の目的と思います。
コードの品質を高く保っていた「にも関わらず」速いのではない。コードの品質を高く保っていた「からこそ」速いのだ。
4.1 専門家が知っていること
急がば廻れといいますか、丁寧にお仕事しようということですね。苦手だなぁ。精神的にどっしり構えらえることも実は重要そうですね。
ソフトウェア開発者として、プロダクトオーナーと顧客が何を欲しいのか、なぜ欲しいのかを知りたい。そして誰のためのものなのか知りたい。どうやってやるかは教えてほしくない。
5.2 やり方を目的に転換する
これは自分は比較的この通りやってこれたかなと思います。あんまりどうやってやるかを言われたことはないかなぁ。ただ「何」と比較し、「なぜ」や「誰」は深掘りが弱かったと感じます。ところで、逆に「どうやって」を顧客が言ってくれたとしたら、「そこまで分かってくれる人なのか!」と感心してしまうんだけど、その感覚はどうなんだろうか。
だが、私は10分でも遅いと思う。
7.4 ビルドを自動化する
手厳しい…「10分」はビルドの所要時間を指している、本書の最初の方でもビルド時間は3分とあった。そして多分この「ビルド」には、
- コードの取得
- ビルド
- ユニットテスト
- 受け入れ環境用の展開
- 自動受け入れテスト
- 各種フィードバック
などが含まれているんでないかと想像。(システム規模によると思いますが)システム全体のクリーンなビルド(ゼロからのビルド)で3分って難しいような気がするから、システムを小さく分割して差分的な技を駆使することにより短時間でビルドシステムからフィードバックを受け取れるように工夫しなさいということかなぁ(と、期待というか、甘えというか…)。
でもここで表現されているような高速なビルド・自動テストは憧れますね。気持ちよく開発できそうです。いまは高速な静的解析くらいは努力しなくてもツールによってできますが、高速なビルドと自動テストはエンジニアが頑張らなくてはいけないところだと思います。
次回(#08)
スケジュールはGoogleカレンダーで分かるようにしています。第8回は次の要領です。
- #07の書籍
- レガシコードからの脱却(後半戦)
- デッドライン
- #07の感想交換1Week(12/9〜15)
- #08の読書する時間2Week(12/15~12/28)
- #08のブログポスト期限(12/29)