[読書] コード・シンプリシティ

会社のアルバイトさんに教えてもらったので読んでみた。電子書籍のみの販売なのでEPUB + iBooksを使って読了。

コード・シンプリシティ

目次

  • 1章 はじめに
  • 2章 なぜソフトウェアを作るのか
  • 3章 未来
  • 4章 変更
  • 5章 不具合とデザイン
  • 6章 簡潔性
  • 7章 複雑性
  • 8章 テスト
  • 付録A ソフトウェアデザインの法則
  • 付録B 事実、法則、ルール、定義

内容・感想

簡潔なソフトウェアを継続的に開発していくために重要な法則を紹介している本。

著者がバグ管理システム「Bugzilla」の開発に関わった時の経験をもとに、ソフトウェアデザインに関わる6つの法則について書かれています。

日々ソフトウェアを開発している身として、読んでみてとてもためになったので、その中から2つをピックアップして紹介してみます。

ソフトウェアの目的

ソフトウェアはなぜ存在しているのか。本書には「ソフトウェアは人を助けるためにある。」と書いてあります。

これは、他のすべての法則の土台となるもの。開発中、何らかの選択をする場合、その判断基準の本をたどればすべてここにたどりつくといっても過言ではないはず。

悪いソフトウェアデザインをしたいのならば、「人を困らせること」を徹底的に考えればいいとのこと。もちろん、すべきことはその逆。ずっとずっと頭の中においておきたいと思った法則でした。

ソフトウェアデザインにおいて重要視すべきこと

例えば、実装したい機能が複数あるときに、どの機能を優先的に実装すべきなのか、迷うことが多々あります。

ソフトウェアのどこから変更すればいいのか、しっかり優先順位をつけて決めないといけないんですよね

そんな時、非常に便利に使えそうな法則が紹介されていました。

それぞれ、

D
変更が必要される度合い
Vn
変更により瞬間的に生まれる価値
Vf
変更により将来にわたって継続的に生まれる価値
Ei
実装にかかる作業量
Em
管理にかかる作業量

を表しています。これだけだと「ふーん」という感じ。

実はこの式には続きがあって、ソフトウェアは長期的に人を助けるものだという前提から、VnEiは無視できるくらい小さくなります。

すると式はこんなかんじに。

つまり、「実装にかかる作業量よりも管理にかかる作業量」を重要視して、ソフトウェアに対する変更の優先順位付けを行うべきだということです。

今までの自分の判断や行動を振り返ると、目先の利益や、直近の面倒さに大きく左右されてたなぁと思うのですが、それだと全然ダメ。

何を実装するときも、将来にわたって得られる価値と、そのために必要なコストにフォーカスした上で、優先順位をつけることが大切だということですね。

この法則はすぐにでも自分の仕事に活用できそう。また、直接開発に携わらないマネージャーの方にも知ってもらいたいと思いました。

まとめ

内容的には軽めのボリュームで、さっくり読めてしまうのですが、継続的に価値を提供し続けるソフトウェアを開発するために、とても重要なことが凝縮されて書かれているような印象を受けました。

さすが、シンプリシティを説いている本だけあって、構成もすごくシンプルです。

上で紹介した以外にも、ソフトウェアの簡潔性を保つための大事な法則が紹介されているので、ぜひ開発者の方には目を通していただきたい本だと思いました。

明日からのソフトウェア開発にシンプリシティがもたらされますように。それでは。