Code Craft エクセレントなコードを書くための実践的技法(Pete Goodliffe)
書籍情報
- 著者:Pete Goodliffe
- 発行日:2014-09-17
- ISBN:9784839951238
- URL:https://book.mynavi.jp/ec/products/detail/id=28144
書籍目次
- 献辞
- 監訳者序文
- 日本語版に寄せて
- 序文
- 謝辞
- 第1部 コードと向き合う
- 第1章 守りを固める
- 1.1 優れたコードを目指して
- 1.2 最悪を想定する
- 1.3 防御的プログラミングとは何か
- 否定論の論拠
- 肯定論の論拠
- 1.4 広大で邪悪な世界
- 1.5 防御的プログラミングの技法
- 望ましいコーディングスタイルと適正な設計を採用する
- コーディングを急がない
- 誰も信用しない
- 簡潔性よりも明瞭性を重視してコードを書く
- 内部的な要素をユーザーに触らせない
- すべての警告をオンにしてコンパイルする
- 静的解析ツールを使用する
- 安全なデータ構造を使用する
- すべての戻り値をチェックする
- メモリ(およびその他の貴重なリソース)を注意深く扱う
- すべての変数は宣言時に初期化する
- 変数の宣言はできるだけ変数を使用する直前に行う
- 言語の標準機能を使用する
- 有用な診断ログの機能を活用する
- キャストは慎重に行う
- その他の細かい注意点
- 1.6 制約
- 制約の対象
- 制約の除去
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第2章 見事に描かれた設計図
- 2.1 なぜ表記スタイルは重要なのか
- 2.2 コードを書き示す相手を知る
- 2.3 優れた表記スタイルとは何か
- 2.4 さまざまな中カッコスタイル
- K&Rの中カッコスタイル
- 中カッコを逆インデントするスタイル
- 中カッコをインデントするスタイル
- その他の中カッコスタイル
- 2.5 1つのスタイルですべてを規定する
- 2.6 社内スタイル(およびそれを適用すべき対象)
- 2.7 コーディング規約を定める
- 2.8 正義の戦い?
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第3章 名前の意義
- 3.1 適切な名前を付けることの重要性
- 3.2 名前を付ける対象
- 3.3 名前ゲーム
- 説明的である
- 技術的に正しい
- イディオムに従っている
- 適切である
- 3.4 実践的な名前付けの要点
- 変数の名前付け
- 関数の名前付け
- 型の名前付け
- 名前空間の名前付け
- マクロの名前付け
- ファイルの名前付け
- 3.5 バラの香りも名前次第
- 一貫性を保つ
- コンテキストを利用する
- 自分の目的に合わせて名前を活用する
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第4章 必要な情報を余さず書く
- 4.1 自己解説的コード
- 4.2 自己解説的コードを書くための手法
- 適切な表記スタイルで単純なコードを書く
- 意味のある名前を選ぶ
- コードをアトミックな関数に分解する
- 制約や振る舞いを表す説明的な型を選ぶ
- 定数に名前を付ける
- 重要なコードを強調する
- 関連のある情報をグループ化する
- ファイルヘッダを記述する
- エラーを適切に処理する
- 意味のあるコメントを書く
- 4.3 自己解説的コードの実践的方法論
- 文芸的プログラミング
- ドキュメント作成ツール
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第5章 的確なコメント
- 5.1 コードコメントとは何か
- 5.2 コメントはどのように記述・表示されるか
- 5.3 どのくらいの数のコメントを書くべきか
- 5.4 コメントの内容として何を書くべきか
- 方法ではなく理由を説明する
- コードの内容を言い換えただけの説明は避ける
- コメントをコードの代用にしない
- 役に立つコメントを書く
- コードの理解に不要な要素を排除する
- 5.5 コードの改善例
- 5.6 コメントの表記に関する留意点
- 一貫性
- 明瞭なブロックコメント
- コメントのインデント
- 行末のコメント
- コードを読みやすくする
- 保守の負担が軽いスタイルを選ぶ
- 防波堤
- フラグ
- ファイルヘッダとしてのコメント
- 5.7 コメントを活用するための注意
- ルーチンを書くためのコメント
- バグ修正の通知
- コメントの劣化
- 保守段階のコードの無意味なコメント
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第6章 過ちは人の常
- 6.1 エラーは何から生まれるのか
- 6.2 エラー通知機構
- 通知なし
- 戻り値
- エラーステータス変数
- 例外
- シグナル
- 6.3 エラーを検出する
- 6.4 エラーを処理する
- いつエラーを処理すべきか
- 可能な対処
- エラー処理がコードに及ぼす影響
- 6.5 エラーを発生させる
- 6.6 エラーに対処する
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第1章 守りを固める
- 第2部 コードの秘められた生活
- 第7章 プログラマーの道具箱
- 7.1 ソフトウェアツールとは何か
- 7.2 なぜツールのことを気にするのか
- 7.3 パワーツール
- 何ができるのかを把握する
- 操作方法を学ぶ
- どんな作業に適しているのかを見極める
- きちんと機能しているかをチェックする
- 詳しい情報のソースを突き止める
- 新しいバージョンのリリース時期を知る
- 7.4 どのツールにするか
- ソース編集ツール
- コード構築ツール
- デバッグツールと調査ツール
- 言語サポートツール
- その他のツール
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第8章 テスト
- 8.1 現実性チェック
- 8.2 誰が、何を、いつ、なぜ
- なぜテストするのか
- 誰がテストするのか
- テストに何が必要か
- いつテストするのか
- 8.3 テストは難しくない……
- 8.4 テストの種類
- 8.5 単体テストケースの選択
- 8.6 テストを考慮した設計
- 8.7 ほら、両手放しだよ!
- 8.8 障害の外観
- 8.9 欠陥を管理できるか
- フォールトトラッキングシステム
- バグレビュー
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第9章 誤りの検出
- 9.1 避けがたい現実
- 9.2 野獣の本性
- 1,000フィートからの眺め
- 地上からの眺め
- 塹壕からの眺め
- 9.3 害虫駆除
- 横道
- 正道
- 9.4 バグハンティング
- コンパイルエラー
- ランタイムエラー
- 9.5 欠陥の修正方法
- 9.6 予防策
- 9.7 スズメバチスプレー、ナメクジ除け、ハエ取り紙
- デバッガ
- メモリアクセスバリデータ
- システムコールトレース
- コアダンプ
- ロギング
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第10章 アイツがビルドしたコード
- 10.1 言語の壁
- インタープリタ言語
- コンパイル言語
- バイトコンパイル言語
- 10.2 ちょっと大げさな話ですが
- 10.3 ビルドをビルドする
- 10.4 良いビルドシステムの条件
- 単純
- 統一性
- 反復可能で信頼できる
- アトミック
- エラーへの対処
- 10.5 仕組み
- ターゲットの選択
- ハウスキーピング
- 依存関係
- 自動化されたビルド
- ビルド設定
- 再帰make
- 10.6 リリース
- 10.7 ビルドマスターのお仕事
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 10.1 言語の壁
- 第11章 速さを追い求める
- 11.1 最適化とは何か?
- 11.2 最適ではないコードが生じる原因
- 11.3 最適化を行うべきではない理由
- 最適化に代わる手段
- 11.4 最適化を行うべき理由
- 11.5 実践的な最適化のアプローチ
- 最適化の必要性を証明する
- 最も低速なコードを特定する
- コードをテストする
- コードを最適化する
- 最適化の効果を検証する
- 11.6 最適化の手法
- 設計の変更
- コードの変更
- 11.7 効率的なコードを書く
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第12章 不安の固まり
- 12.1 リスク
- 12.2 敵を知る
- 12.3 戦況
- 12.4 脆弱性の種類
- セキュアではない設計とアーキテクチャ
- バッファオーバーラン
- クエリ文字列の埋め込み
- 競合状態
- 整数オーバーフロー
- 12.5 保護の手段
- システムのインストール環境での対策
- ソフトウェア設計での対策
- コード実装での対策
- 使用手順による対策
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第7章 プログラマーの道具箱
- 第3部 コードの形態
- 第13章 グランドデザイン
- 13.1 プログラミングの設計としての側面
- 13.2 何を設計するのか?
- 13.3 どうしてそんなに騒ぐのか?
- 13.4 優れたソフトウェア設計
- 単純であること
- エレガントであること
- モジュール性
- 優れたインターフェイス
- 拡張性
- 重複の回避
- 移植性
- 慣用語法
- 文書化
- 13.5 コードの設計方法
- 設計のための手法やプロセス
- 設計の道具
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第14章 ソフトウェアアーキテクチャ
- 14.1 ソフトウェアアーキテクチャとは?
- ソフトウェアの青写真
- 視点
- いつどこに記述するか?
- 何のために使うのか?
- コンポーネントと接続について
- 14.2 優れたアーキテクチャとは?
- 14.3 アーキテクチャのスタイル
- アーキテクチャなし
- 階層アーキテクチャ
- パイプとフィルタを使ったアーキテクチャ
- クライアント/サーバアーキテクチャ
- コンポーネントベースのアーキテクチャ
- フレームワーク
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 14.1 ソフトウェアアーキテクチャとは?
- 第15章 進化か革命か?
- 15.1 ソフトウェアの老朽
- 15.2 警告のサイン
- 15.3 コードはどう成長するか?
- 15.4 そんなことあり得ないのに
- 15.5 これに関して何ができるか?
- コードを新規に書く場合
- 既存のコードを保守する場合
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第13章 グランドデザイン
- 第4部 プログラマーの群れ
- 第16章 コードモンキー
- 16.1 モンキービジネス
- 直情的プログラマー
- コードモンキー
- グル
- 似非グル
- 高慢な秀才
- カウボーイ
- プランナー
- 古株
- 狂信者
- 一意専心プログラマー
- サボり屋
- メランコリックチームリーダー
- あなた
- 16.2 理想的プログラマー
- 16.3 それで?
- 16.4 最も愚かな者
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 16.1 モンキービジネス
- 第17章 チームの力
- 17.1 チームの概略
- 17.2 チーム編成
- 管理手法
- 責任分担
- 編成とコードの構造
- 17.3 チームワークのためのツール
- 17.4 チームを襲う病魔
- バベルの塔
- 独裁制
- 民主主義型開発
- サテライトステーション
- グランドキャニオン
- 泥沼
- レミングス
- 17.5 優れたチームワークのための個人のスキルと特質
- コミュニケーション
- 謙虚さ
- 対立への対処
- 習得と適応性
- 自分の限界の把握
- 17.6 チームワークの基本原則
- コードの共同所有
- 他人のコードに対する尊敬の念
- コーディングガイドライン
- 成功の定義
- 責任の定義
- 燃え尽きの回避
- 17.7 チームの一生
- チームの誕生
- チームの成長
- チームワーク
- チームの終焉
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第18章 ソースを安全に扱う方法
- 18.1 私たちの責務
- 18.2 ソース管理
- リビジョン管理
- アクセス制御
- リポジトリの扱い方
- ブランチの活用
- ソース管理の略歴
- 18.3 構成管理
- 18.4 バックアップ
- 18.5 ソースコードのリリース・公開
- 18.6 ソースの置き場所
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第16章 コードモンキー
- 第5部 ソフトウェア開発プロセス
- 第19章 仕様の具体化
- 19.1 具体的に言うと何?
- 19.2 仕様書の種類
- 要求仕様書
- 機能仕様書
- 構造仕様書
- ユーザーインターフェイス仕様書
- 設計仕様書
- テスト仕様書
- 19.3 仕様書に盛り込むべき内容は?
- 19.4 仕様書執筆手順
- 19.5 なぜ仕様書を書かないのか?
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第20章 美しき獲物たちか?
- 20.1 コードレビューとは
- 20.2 いつレビューするか
- レビューするかどうか
- どのコードをレビューするか
- 20.3 コードレビューの実施
- コードレビューミーティング
- 統合レビュー
- 20.4 心構えをレビューする
- 作者の心構え
- レビュー担当者の心構え
- 20.5 完全なるコード
- 20.6 コードレビューの向こうにあるもの
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第21章 完了日は未定
- 21.1 暗闇での一突き
- 21.2 見積もりが難しい理由
- 21.3 プレッシャー
- 21.4 見積もりの実際的な方法
- 21.5 計画ゲーム
- 21.6 間に合わせる
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 第19章 仕様の具体化
- 第6部 頂上からの眺め
- 第22章 プログラムのレシピ
- 22.1 プログラミングスタイル
- 構造化プログラミング
- オブジェクト指向プログラミング
- 関数型プログラミング
- 論理型プログラミング
- 22.2 レシピ:方法と目的
- 22.3 開発プロセス
- アドホック
- ウォーターフォールモデル
- SSADMとPRINCE
- Vモデル
- プロトタイピング
- イテレーティブおよびインクリメンタル開発
- スパイラルモデル
- アジャイル手法
- その他の開発プロセス
- 22.4 もう十分!
- 22.5 開発プロセスの選択
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 22.1 プログラミングスタイル
- 第23章 アウターリミッツ
- 23.1 アプリケーションプログラミング
- パッケージソフトウェア
- カスタムアプリケーション
- 23.2 ゲームプログラミング
- 23.3 システムプログラミング
- 23.4 組み込みプログラミング
- 23.5 分散プログラミング
- 23.6 Webアプリケーションプログラミング
- 23.7 エンタープライズプログラミング
- 23.8 数値計算プログラミング
- 23.9 まとめ
- 一言で言えば
- 関連項目
- 考えてみよう
- 熟考しよう
- 我が身を振り返ってみよう
- 23.1 アプリケーションプログラミング
- 第24章 次の行き先は?
- 24.1 これからどうするか
- 答えと解説
- 第22章 プログラムのレシピ
- 参考文献
- 索引
- 監訳者あとがき
- 著者紹介・監修者紹介