はじめに
本記事はプリンシプルオブプログラミングを読み、重要な箇所をまとめた内容です。
プリンシプルオブプログラミングはプログラミングに関する様々な原則、アンチパターンなどが記載されている書籍です。
全500ページほどと、かなりのボリュームですがエンジニア・プログラマーとして働くために抑えておきたい知識が詰まっているため、ぜひ1度読んで見ることをお勧めします。
前提〜プログラミングの変わらぬ真実〜
- プログラミングにシルバーバレットはない
- どんな時にも使える万能なものはなく、その時のケースによって必要なもの、最適なものは異なる
- コードは変更されると思って記述する
- コードを記述するときよりも保守の時間のほうが長い
- 変更に強く読みやすいコードを心がける
- 目的を意識する
- コードを読む側の視点になってコードを書く
- コードについて
- 読みやすく
- シンプルに
- 柔軟に変更できるように
- 似た内容は同じ箇所に
- 繰り返しは最小限に
- ロジックとデータは近くに
- どちらかを修正するときはもう一方も修正することがあるため
- コードに一貫性・対称性を持たせる
- スネークケースで統一するなどぱっと見で規則性がわかるように
原則〜プログラミングのガイドライン〜
- KISS
- コードはシンプルに
- DRY(Dont Repeat Yourself)
- 繰り返しはやめよう
- YAGNI
- 多分必要になるだろうと思ってコードを書かず、必要になった時に書く
- PIE
- 読みやすいコードに
- 書きやすいより読みやすいを優先に
- SLAP
- コードのレベルを合わせよう
- 似たようなコードは同じ箇所に固める
- OCP
- 拡張に対して開いている・修正に対して閉じているを意識して設計する
思想〜プログラミングのイデオロギー〜
- アーキテクチャ根底技法
- 抽象
- カプセル化
- 情報隠蔽
- パッケージ化
- 関心の分離
- 充足性・完全性・プリミティブ性
- ポリシーと実装の分離
- インタフェースと実装の分離
- 参照の一点性
- 変数の再代入は行わず、宣言され定義されるのは1回限りにする
- 分割統治
- アーキテクチャ非機能要件
- 変更容易性
- 相互運用性
- 効率性
- 信頼性
- テスト容易性
- 再利用性
- 7つの設計原理
- 単純原理
- 同型原理
- 対称原理
- 階層原理
- 透明原理
- 明証原理
- ロジックは明瞭に
- 線形原理
- 処理の流れは直線に、分岐の少ないコードに
- UNIX思想
- モジュール化の原則
- 明確性の原則
- 組み立て部品の原則
- 分離の原則
- 単純性の原則
- 倹約の原則
- 大きなコードは書かない
- 透明性の原則
- 安定性の原則
- 表現性の原則
- 驚き最小の原則
- 一般的な慣例に従う
- このインタフェースならこう使うだろう
- 沈黙の原則
- 重要な情報のみを表示出力する
- 修復の原則
- 修復に失敗したら処理は継続せずその時点でエラーにする
- 経済性の原則
- 生成の原則
- 最適化の原則
- 多様性の原則
- プログラミングに正解はないのでより良いやり方を求め続ける
- 拡張性の原則
- UNIX哲学
- 小は美なり
- レバレッジ・ソフトウエア
- 既存のソフトウェア、ライブラリを活用する
- 1つ1仕事
- シェルスクリプト活用
- シェルスクリプトはプラットフォーム専用のバイナリにコンパイルする必要がないため、グルー言語として使える
- 即行プロトタイプ
- 対話インタフェース回避
- 効率性より移植性
- フィルタ化
- フィルタは入力に何かしらの処理をし、その結果を出力すること
- すべてのソフトウェアはフィルタであるべき
- データはテキスト
- バイナリファイルよりテキストファイル
- UNIX哲学小定理
- 環境カスタマイイズ
- 軽薄短小カーネル
- 小文字使用
- 森林保護
- 紙のデータは利用しない
- 沈黙は金
- 並列思考
- 部品コラボレーション
- 90パーセント解
- 劣るが優る
- 階層思考
視点〜プログラマの観る角度〜
- モジュールは凝縮度を高く
- 疎遠に
- 可逆性を持つ
- 急がば回れ
手法〜プログラマの道具箱〜
- かもしれないと考えてプログラミングする
- 開発したソフトウェアは自分で使ってみる
- 誰かもしくはゴムのアヒルのようなものに向かって説明することで自己理解が深まる
法則〜プログラミングのアンチパターン
- 状況や背景を明確に
- すでにあるものは利用する
まとめ
最初の原則にあるようにプログラミングにシルバーバレットは存在しません。また、原則の中には相反するものもあり、状況に応じて適切な選択が異なるため、必ずしもすべての原則を満たす必要はありません。
プロジェクトによっては、一般的な原則よりも特定の方針を重視する場合があります。そのため、基本的にはプロジェクトの慣習に従うことが重要です。
今回のプリンシプルオブプログラミングに記載されている原則に加えて、各プログラミング言語には独自のコーディング規則があります。これらの規則にも従うべきでしょう。