ken1flanのブログ

自己紹介・最近やってることなどを書くつもりです。

(WIP)プリンシプル オブ プログラミング のメモ

www.shuwasystem.co.jp

プリンシパル オブ プログラミング読書メモです。

動機とまえがきと期待

同僚が読書会で読みたい!と言ったから。

自分から言ってきたというところから、興味を持ちました。

さらっとまえがきを読んだら…その通りかも…。コードレビューをしていて、「どうしてそうするのかな?」「この間説明したんだけど…忘れちゃったかな?」みたいなことは結構あって…。当然昔自分もそういうコードを書いてはいましたが、長い時間をかけて、自分のコードで失敗したり、ひとのコードを読んだり、いろんな本を読んだりしてきて変わってきたような気がします。この長い時間でゆっくり吸収してきたことが、目次をみたらインデックス化されていそうですし、あらためて自分や参加者の経験などを読書会で共有できたら、なんか、とてもよさそうな感じになりそうです。

プロローグ 本書の読み方 - 第1章 前提 ~プログラミングの変わらぬ真実~ - 第2章 原則 ~プログラミングのガイドライン~

第3章 思想 ~プログラミングのイデオロギー

3.1 プログラミングセオリー

3.2 【プログラミングセオリーを支える3つの価値1】コミュニケーション

3.3 【プログラミングセオリーを支える3つの価値2】シンプル

3.4 【プログラミングセオリーを支える3つの価値3】柔軟性

3.5 【プログラミングセオリーを実現する6つの原則1】結果の局所化

3.6 【プログラミングセオリーを実現する6つの原則2】繰り返しの最小化

3.7 【プログラミングセオリーを実現する6つの原則3】ロジックとデータの一体化

3.8 【プログラミングセオリーを実現する6つの原則4】対称性

3.9 【プログラミングセオリーを実現する6つの原則5】宣言型の表現

3.10 【プログラミングセオリーを実現する6つの原則6】変更頻度

3.11 アーキテクチャ根底技法

3.12 【アーキテクチャ根底技法1】抽象

3.13 【アーキテクチャ根底技法2】カプセル化

3.14 【アーキテクチャ根底技法3】情報隠蔽

3.15 【アーキテクチャ根底技法4】パッケージ化

3.16 【アーキテクチャ根底技法5】関心の分離

3.17 【アーキテクチャ根底技法6】充足性、完全性、プリミティブ性

3.18 【アーキテクチャ根底技法7】ポリシーと実装の分離

3.19 【アーキテクチャ根底技法8】インタフェースと実装の分離

3.20 【アーキテクチャ根底技法9】参照の一点性

3.21 【アーキテクチャ根底技法10】分割統治

3.22 アーキテクチャ非機能要件

3.23 【アーキテクチャ非機能要件1】変更容易性

3.24 【アーキテクチャ非機能要件2】相互運用性

3.25 【アーキテクチャ非機能要件3】効率性

3.26 【アーキテクチャ非機能要件4】信頼性

3.27 【アーキテクチャ非機能要件5】テスト容易性

3.28 【アーキテクチャ非機能要件6】再利用性

3.29 7つの設計原理

3.30 【7つの設計原理1】単純原理

3.31 【7つの設計原理2】同型原理

3.32 【7つの設計原理3】対称原理

3.33 【7つの設計原理4】階層原理

3.34 【7つの設計原理5】線形原理

3.35 【7つの設計原理6】明証原理

3.36 【7つの設計原理7】安全原理

3.37 UNIX思想

3.38 【UNIX思想1】モジュール化の原則

3.39 【UNIX思想2】明確性の原則

3.40 【UNIX思想3】組み立て部品の原則

3.41 【UNIX思想4】分離の原則

3.42 【UNIX思想5】単純性の原則

3.43 【UNIX思想6】倹約の原則

3.44 【UNIX思想7】透明性の原則

3.45 【UNIX思想8】安定性の原則

3.46 【UNIX思想9】表現性の原則

3.47 【UNIX思想10】驚き最小の原則

3.48 【UNIX思想11】沈黙の原則

3.49 【UNIX思想12】修復の原則

3.50 【UNIX思想13】経済性の原則

3.51 【UNIX思想14】生成の原則

3.52 【UNIX思想15】最適化の原則

3.53 【UNIX思想16】多様性の原則

3.54 【UNIX思想17】拡張性の原則

3.55 UNIX哲学

3.56 【UNIX哲学1】小は美なり

3.57 【UNIX哲学2】1つ1仕事

3.58 【UNIX哲学3】即行プロトタイプ

3.59 【UNIX哲学4】効率性より移植性

3.60 【UNIX哲学5】データはテキスト

3.61 【UNIX哲学6】レバレッジ・ソフトウェア

3.62 【UNIX哲学7】シェルスクリプト活用

3.63 【UNIX哲学8】対話インタフェース回避

3.64 【UNIX哲学9】フィルタ化

第4章 視点 ~プログラマの観る角度~

4.1 凝集度

4.2 結合度

4.3 直交性

4.4 可逆性

4.5 コードの臭い

4.6 技術的負債

第5章 習慣 ~プログラマのルーティーン~

5.1 プログラマの3大美徳

5.2 ボーイスカウトの規則

5.3 パフォーマンスチューニングの箴言

5.4 エゴレスプログラミング

5.5 1歩ずつ少しずつ

5.6 TMTOWTDI

第6章 手法 ~プログラマの道具箱~

6.1 曳光弾

6.2 契約による設計

6.3 防御的プログラミング

6.4 ドッグフーディング

6.5 ラバーダッキング

6.6 コンテキスト

第7章 法則 ~プログラミングのアンチパターン

7.1 ブルックスの法則

7.2 コンウェイの法則

7.3 割れた窓の法則

7.4 エントロピーの法則

7.5 80-10-10の法則

7.6 ジョシュアツリーの法則

7.7 セカンドシステム症候群

7.8 車輪の再発明

7.9 ヤクの毛刈り