プログラマ原則的 目次マトリクス
ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック
はじめに
1章 コードを気にかける
第1部 you.write(code)
2章 見かけの良い状態を維持する
表現は強力
それはコミュニケーションに関すること
レイアウト
きちんとした構造
一貫性
名前
冗長性を避ける
明瞭である
慣用的である
正確である
身なりを整える
結論
3章 少ないコードを書く
なぜ気にかけるのか
たるんだロジック
複製
死んでいるコード
コメント
くどさ
悪い設計
空白
では、何をしたらよいのか
結論
4章 取り除くことでコードを改善する
悪臭の放置
悪いことではなく、避けられないこと
何が問題か
死者をよみがえらせる
外科的除去
結論
5章 コードベースの過去の幽霊
表現
技術の進歩
イデオム
設計の決定
バグ
結論
6章 航路を航行する
私の友人からの小さな助け
手がかりを探す
やってみて学ぶ
低い位置にぶら下がっている果実
コードを点検する
調査、そして行動
テストファースト
維持管理
わかったことを文書化する
結論
7章 汚物の中で転げ回る
前兆を嗅ぎつける
汚水槽に入っていく
調査は語る
砂堀場で働く
汚い物をきれいにする
調整を行う
できの悪いコード? 下手なプログラマ?
8章 そのエラーを無視するな!
エラーの仕組み
エラー無視による事態
エラーへの言い訳
結論
9章 予期せぬことを予期する
エラー
スレッド化
シャットダウン
この話の教訓
10章 バグ狩り
経済的な視点
少しの予防薬
バグ狩り
罠を仕掛ける
バイナリチョップを学ぶ
ソフトウェア考古学を使う
テスト、テスト、テスト
切れ味のよいツールへの投資
原因分析に関係のないコードを取り除く
清潔さを保って伝染を防ぐ
間接的な方法
急がないこと
再現できないバグ
結論
11章 テストの時代
なぜテストをするのか
フィードバックループを短くする
コードをテストするコード
誰がテストを書くのか
テストの種類
テストはいつ書くのか
テストはいつ実行するのか
何をテストするのか
優れたテスト
テストはどのように見えるのか
テスト名
テストの構造
テストを保守する
テストフレームワークを選ぶ
コードは孤島ではない
結論
12章 複雑さに対処する
ブロブ
ケーススタディ : ブロブの複雑さを減らす
線
そして最後に、人々
結論
13章 2つのシステムの物語
混乱したメトロポリス
理解不可能
凝集度の欠如
不必要な結合
コードの問題
コード外の問題
メトロポリスからの絵葉書
デザインタウン
機能の場所を見つける
首尾一貫性
アーキテクチャを成長させる
設計の決定を遅らせる
品質を維持する
技術的負債に対処する
テストが設計を形作る
設計のための時間
設計と共に活動する
次にどうする
第2部 練習することで完璧になる
14章 ソフトウェア開発とは
ソフトウェアの作り方
ソフトウェア開発は芸術
ソフトウェア開発は科学
ソフトウェア開発はスポーツ
ソフトウェア開発は子供の遊び
ソフトウェア開発は退屈な仕事
比喩の荷重荷
15章 規則に従って競技する
もっと多くの規則が必要
規則を決める
16章 単純に保つ
単純な設計
使うのが容易
誤用を防ぐ
大きさが重要
短いコードパス
安定性
単純なコード行
単純に保ち、愚かにならない
想定は単純さを減少させる
早まった早まった最適化を避ける
十分に単純
十分な結論
17章 頭を使いなさい
愚かにならない
不注意を避ける
考えてよいのだ!
18章 変わらないものはない
何ものも恐れない変化
態度を変える
変更を行う
変更に備えて設計する
変更のためのツール
戦い方を選ぶ
多くの変更
19章 コードを再利用するケース
再利用のケース1 : コピー&ペースト
再利用のケース2 : 再利用のための設計
再利用のケース3 : ライブラリへの昇格とリファクタリング
再利用のケース4 : 購入、あるいは車輪の発明
20章 効果的なバージョンコントロール
使いなさい、さもなければ失われる
どれでもよいから一つを選ぶ
適切なものを保存する
解答1 : すべてのものを保存する
解答2 : 不必要なものを保存しない
ソフトウェアのリリースを保存する
リポジトリのレイアウト
バージョンコントロールをうまく使う
アトミックなコミットを行う
正しくメッセージを書く
優れたコミットを作成する
ブランチ : 木を見て森を見る
コードの我が家
結論
21章 ゴールポストを抜ける
ソフトウェア開発 : 堆肥をシャベルですくう
誤った対立
コードを修復するためにチームを修復する
QAへビルドをリリースする
成果物を最初にテストする
意図を持ったリリース
急がば回れ
自動化する
尊敬する
障害報告を受け取ったら
強くなるための特徴
パズルのピース
22章 凍結されたコードの数奇な人生
コード凍結を探求する
コード凍結に対する新たな秩序
凍結の形態
ブランチでうまくいく
しかし、実際には凍結されていない!
凍結期間の長さ
凍結を感じる
終わりは迫っている
凍結防止
結論
23章 プリーズ・リリース・ミー
プロセスの一部
歯車の歯
ステップ1 : リリースに着手
ステップ2 : リリースを準備
ステップ3 : リリースをビルド
ステップ4 : リリースをパッケージ化
ステップ5 : リリースを配置
早めに頻繁にリリース
そして、さらに
第3部 個人的なこと
24章 学びを愛して生きる
何を学ぶべきか
学ぶことを学ぶ
学習モデル
知識ポートフォリオ
学ぶために教える
学ぶために行う
これまでに学んできたこと
25章 試験に基づく開発者
要点を理解する
成功は自己満足を生み出す
試験
試験に基づく開発者
結論
26章 チャレンジを楽しむ
それは、モチベーション
何がチャレンジ?
やってはいけない
チャレンジしなさい
結論
27章 停滞を避ける
スキルは投資
読者への練習問題
雇用保障
28章 倫理的なプログラマ
コードに対する態度
法的問題
人への態度
チームメイト
マネージャ
雇用主
あなた自身
コードにおけるヒポクラテスの誓い
結論
29章 言語への愛
すべての言語を愛する
あなたの言語を愛する
言語との関係を育む
愛と尊敬
決意
会話
忍耐
共有された価値
完璧な比喩?
結論
30章 プログラマの姿勢
コンピュータに向かう基本的な姿勢
姿勢をデバッグする
ひどい状況のとき
徹夜
上司からの干渉
危機は去った
設計するとき
目の疲れ
結論
第4部 成し遂げる
31章 一生懸命ではなく、賢く
戦い方を選ぶ
戦術
賢く再利用する
他人の問題にする
やらなければならないことだけを行う
一時的な解決策
優先順位をつける
何が求められているのか
一度に一つずつ
小さく(そして単純に)する
問題を先延ばしにして積み上げない
自動化
誤りを防ぐ
会話する
燃え尽きを避ける
強力なツール
結論
32章 完了したときが完了
まだ到着しないの?
逆方向に開発 : 分解
「完了」を定義する
あとはやるだけ
33章 今度こそわかった。。
無人島開発
山の麓に立っていた
第5部 人々の営み
34章 人々の力
何をすべきか
専門家を知る
振り返ると
35章 原因は思考
比喩を広げる
説明責任を持つことが重要
コード++
機能させる
標準を設定する
次のステップ
結論
36章 遠慮なく話す
コードはコミュニケーション
コンピュータとの会話
動物に話しかける
ツールとの会話
人と人とのコミュニケーション
会話の方法
言葉に注意する
身振り
並列な会話
チームの会話
顧客との会話
他のコミュニケーション
結論
37章 多くのマニフェスト
ソフトウェア開発のためのジェネリックマニフェスト
ごめんなさい
マニフェスト
しかし、本当なの?
落ち
38章 コードへの叙情歌
コーディングは、人の問題
結び
態度
前進、そしてコードを書く
訳者あとがき
謝辞
プリンシプル オブ プログラミング 3年目までに身につけたい 一生役立つ101の原理原則
まえがき
プロローグ 本書の読み方
0.1 プリンシプルのカテゴリ
0.2 プリンシプルの説明のフォーマット
0.3 プリンシプルの説明における用語法
0.4 プリンシプルの説明の注意点
第1章 前提 ~プログラミングの変わらぬ真実~
1.1 プログラミングに銀の弾丸はない
1.2 コードは設計書である
1.3 コードは必ず変更される
第2章 原則
2.1 KISS
2.2 DRY
2.3 YAGNI
2.4 PIE
2.5 SLAP
2.6 OCP
2.7 名前重要
第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 ヤクの毛刈り
あとがき