「コード・シンプリシティ」を読んだ

www.oreilly.co.jp

会社の先輩に「短くて読みやすくて良い」と勧められたので読んで見た。本当に短くて、1.5時間くらいで読み終わった。

内容は、複雑なソフトウェアは良くないのでシンプルにしよう、そのためにはこのようなルール、事実、定義、法則があるので、その法則にのっとり開発していこう、という内容だった。

感想としては、リーダブルコードと同じようなことが書いてあっただけで、あまり目新しい内容はなかった気がする。

いまと未来

ソフトウェアデザインにとって第一に考えるべくは未来、と言っているのに、未来のことは未来に考えようと言っていてちょっと混乱した。

インクリメンタルな開発として、現状見えている範囲だけを確実に実装し、将来新しい要件が増えたらそれに合わせて実装を拡張していけば良い、とのことで、私は YAGNI 好きなので理解できる。

でもこれは誤って捉えられてしまうと「クソコードでも動けばいい」となってしまうので、これをちゃんと実践するには技術力が必要になると思う。オブジェクト指向の本に「変更可用性の高いコードを書こう」とあるので、つまりそういうコードを書く必要があるということだ。

クソコードを書くのではなく変更可用性の高いコードを書くべき、というのは肝に命じておきたい。

以下雑メモ:

  • 良い開発者は能力の及ぶ限りコードを簡潔に書き、他の開発者が使いやすくしなければならない
  • コードデザインの決断は、集団の多数決などではなく個人が行うべき
  • 誰か人を助けるためにソフトウェアは存在する、人間以外を助けるために存在するソフトウェアは存在しない
  • 人を助けること以外を念頭に置くと、劣悪なソフトウェアを書いてしまう。
  • 現在の価値より将来の価値と管理にかかる作業量が大事
  • 実装にかかる作業量よりも管理にかかる作業量を減らす方が重要
  • ソフトウェアデザインにとって第一に考えるべくは未来
  • インクリメンタルな開発
    • 現状必要になる部分のみの最適化をして、新しい要件は未来に対応しよう
    • YAGNI
  • コードの実行速度が遅くても、実際にユーザにとってパフォーマンスの影響が出ていなければ問題ないので触るな