『良いコードを書く技術』という書籍を執筆しました。

『良いコードを書く技術』という書籍を執筆しました。発売日は4/94/12です。
Amazonでは既に予約販売が始まっています。

良いコードを書く技術 ?読みやすく保守しやすいプログラミング作法 (WEB+DB PRESS plus)

良いコードを書く技術 ?読みやすく保守しやすいプログラミング作法 (WEB+DB PRESS plus)

WEB+DB PRESSに連載していた「良いコードへの道」をベースに大幅に加筆・修正して完成させました。もともと連載終了時から書籍化の話はあったのですが、形にするまでになんだかんだで1年以上かかりました。時間はかかりましたが、テーマや切り口など実用的かつ楽しい本に仕上がったのではないかと思います。

内容は書名のとおり良いコードをテーマにしたプログラミングの本です。
達人プログラマなら当たり前の良いコードの考え方を、初心者や中級プログラマ向けにできるだけわかりやすく解説しています。例えば「名前付け」「スコープ」といった基本的かつ重要な内容は1章をまるまる使って解説しています。

特に以下の方に読んでもらいたいと願っています。

  • 良いコードを書きたいけれども、何から手を付けていいかわからない方々
  • 読みやすく保守しやすいコードを書きたい方々
  • 良い仕事をしたい普通のプログラマの方々
  • 達人プログラマを目指す中級プログラマの方々
  • 新人に良いコードとは何かを知ってほしい先輩・上司・達人プログラマの方々

4月ですので新人教育にもぜひご活用ください。
はじめにと1章がgihyo.jpのサイトで立ち読みできます。

公式ハッシュタグgoodcodeです。感想などを書いていただけると嬉しいです。

また、Cacooを使って「良いコードの条件」をマインドマップ風にあげていく企画も実施中です。ぜひ「あなたが考える良いコードの条件」を書きこんでみてください。

目次は以下です。

1章〜2章では良いコードの定義や価値、良いコードを実現するための習慣などを紹介しています。
3章〜6章は基礎編です。名前付け、スコープ、コードの分割と集約といった基本的な内容です。
7章〜8章では良いコードを実現する上で後回しになったり省略されがちな、パフォーマンスやユニットテストといった内容を扱っています。
9章〜11章は応用編です。抽象化、メタプログラミングフレームワークといった初心者には少し難しく感じる内容をわかりやすく解説しています。

□第1章 良いコードとは何か
■1.1	良いコードの定義と価値
■1.2	良いコードの定義
■1.3	良いコードの価値
■1.4	代表者の声
■1.5	まとめ

□第2章 良いコードを書くための5つの習慣
■2.1	良いコードは1日にしてならず
■2.2	習慣その1 読む──コードを読んで読んで、読みまくれ!
■2.3	習慣その2 書く──とにかくコードを書きましょう
■2.4	習慣その3 道具を磨く──使う道具は常に磨いておこう
■2.5	習慣その4 知る──良い知識を得よう
■2.6	習慣その5 聞く──アウトプットと人からのフィードバックでさらなる成長を
■2.7	まとめ

□第3章 名前付け
■3.1	良いコードは良い名前から生まれる
■3.2	代表者の声
■3.3	良い名前の条件
■3.4	変数名
■3.5	メソッド名
■3.6	クラス名
■3.7	パッケージ/ネームスペース名
■3.8	プロジェクト名
■3.9	まとめ

□第4章 スコープ
■4.1	スコープを意識していますか?
■4.2	スコープって何?
■4.3	スコープを小さくして覚えておくことを減らそう!
■4.4	代表者の声
■4.5	変数のスコープ
■4.6	メソッドのスコープ
■4.7	クラスのスコープ
■4.8	キャストを使用した可視性の制御
■4.9	より大きな粒度のスコープ
■4.10	まとめ

□第5章 コードの分割
■5.1	適切な長さにコードを分割する
■5.2	なぜコードを分割するのか
■5.3	代表者の声
■5.4	2つの方向からの分割
■5.5	お題 クライアントにXMLを返すWeb APIの処理を分割
■5.6	ステップ1 ベタなコードで書いてみる
■5.7	ステップ2 共通処理をメソッドに抽出して分割する
■5.8	ステップ3 処理単位で分割する
■5.9	ステップ4 状態を持つ処理をクラスに抽出して分割する
■5.10	まとめ

□第6章 コードの集約
■6.1	コードの重複は悪
■6.2	代表者の声
■6.3	メソッドに抽出してまとめる
■6.4	継承でまとめる
■6.5	ユーティリティクラスにまとめる
■6.6	サービス層にまとめる
■6.7	オブジェクトにまとめる
■6.8	定数にまとめる
■6.9	まとめ

□第7章 コードのパフォーマンス
■7.1	パフォーマンスを意識していますか?
■7.2	代表者の声
■7.3	パフォーマンスは計算量で決まる
■7.4	パフォーマンスチューニングの手順
■7.5	アルゴリズムの選択以外のパフォーマンスチューニング
■7.6	パフォーマンスチューニングの指針
■7.7	まとめ

□第8章 ユニットテスト
■8.1	テストはお好きですか?
■8.2	ユニットテストって何?
■8.3	代表者の声
■8.4	ユニットテストの効能
■8.5	お題 Webアプリケーションのセキュリティテスト
■8.6	ステップ1 データベースにテストデータを登録する
■8.7	ステップ2 画面の実装
■8.8	ステップ3 画面のユニットテスト(正常系)
■8.9	ステップ4 画面のユニットテスト(異常系)
■8.10	ユニットテストの指針
■8.11	まとめ

□第9章 抽象化
■9.1	抽象化がプログラミングのパワーを最大化する
■9.2	配列/コレクションって何?
■9.3	配列/コレクションを利用した抽象化とは?
■9.4	代表者の声
■9.5	お題 画像ファイルの一覧を表示するWebアプリケーション
■9.6	ステップ1 ベタなコードで書いてみる
■9.7	ステップ2 可読性を高めるためのメソッド抽出
■9.8	ステップ3 関連するデータのデータ構造を整理
■9.9	ステップ4 配列/コレクション化して抽象化
■9.10	抽象化の指針
■9.11	まとめ

□第10章 メタプログラミング
■10.1	プログラミングをプログラムする
■10.2	代表者の声
■10.3	メタプログラミングって何?
■10.4	お題 Excelを使った外部DSL
■10.5	ステップ1 ベタなコードで書いてみる
■10.6	ステップ2 メタデータExcelに移動する
■10.7	ステップ3 リフレクションAPIで変換ルールを動的に適用する
■10.8	まとめ

□第11章 フレームワークを作ろう
■11.1	フレームワークの動作原理を知る
■11.2	代表者の声
■11.3	お題 Webアプリケーションフレームワークを作ろう
■11.4	ステップ1 素のサーブレットで書いてみる
■11.5	ステップ2 フロントコントローラとアクションクラスの導入
■11.6	ステップ3 ルーティング情報の外部ファイル化
■11.7	ステップ4 よく使う処理を簡単に実行できるように共通化する
■11.8	ステップ5 フレームワークをパッケージ化する
■11.9	まとめ

□付録A コードリーディングの方法
■A.1	コードには動的な読み方と静的な読み方がある
■A.2	お題 Apache Commons IOのコードを読む
■A.3	ステップ1 対象のコードをダウンロード(チェックアウト)する
■A.4	ステップ2 静的な方法でコードを読む
■A.5	ステップ3 動的な方法でコードを読む
■A.6	まとめ

□付録B 解説付き参考文献
 

2011-04-05 追記:

  • 『良いコードを書く技術』のサンプルコードをgithubに上げました。

https://github.com/agata/goodcode

  • 発売日が間違っていました。正しくは4/9です。


2011-04-07 追記:

  • 感想やフィードバックを受け付けるサイトをBacklogで用意しました。

http://bit.ly/fqE4mQ

2011-04-25 追記:

  • Backlogの感想やフィードバックを受け付けるサイトのURLが変更になりました。

http://bit.ly/fqE4mQ