良いコード書く技術の書評

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

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

以下のブログで書評をいただいています。ありがとうございます!

私自身はこの本の登場人物的には「中級プログラマー」の下の方か「普通のプログラマー」に毛が生えた程度かと思っているのですが、独学と実際に書いてみて、の経験ばかりだったため、今まで教えてもらえなかった事がこれでもかと述べられていました。
勘的なところでやり過ごしていたところが合っていた事を確認できたり、微妙に勘違いしていたところもあったり、分かっているのに発見の連続という面白い体験が出来ました

僕は後輩はいませんが、居たら全員に読んでもらいたい本です。

このような指針で書かれているので、幅広い内容についてより良いコードを書くためのアドバイスが載っていて、新人に限らずプログラムを書く人は一度読んでみることをオススメします。

新人さん向けの内容が多いかと思いますが、長くプログラム書いてきたかたでもあらためて気付く・思い出すことがある内容だと思います。
厚すぎずにとても良いサイズですので、良いコードを書きたいかた、ぜひお勧めです!

こういう本は読むタイミングも重要ですが、そこそこコードを書けるようになった1年目後半〜2年目くらいの子に読ませるとよさそうです。

35歳を前に、私もまだまだ「良いコード」を書く道を追い続けたいな、と気持ちを新たにさせてもらえた一冊でした。(33歳男性 : 京都府在住)

さて、読みやすくて、あっという間に読み終わったけれど、この本は、実は見かけほど初級者レベルでもないのかもしれないと思った。 短い紙面や文章の中に、勉強になりそうなポイントとか、何か大事なことへの入り口みたいなものとかが、随所に散りばめられているように感じた。 そろそろ、リファクタリングデザインパターンなどに関する本格的な書籍にもチャレンジしてみようかな。

アルゴリズムの選択ミス、もしくは検討漏れによって発生するパフォーマンス劣化を意識してコーディングするというのが結構新鮮でした。

ある意味当たり前の事しか書かれていないが、その当たり前のことを体系的に過不足無くまとめたという部分に価値があると思われ。

Amazonでの売れ行きも好調なようで現在品切れ中のようです(2011年4月14日現在)。お急ぎの方はリアル書店でお求めくださいませ。

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

『良いコードを書く技術』という書籍を執筆しました。発売日は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

コラボレーションカンファレンス2010福岡を開催します!


株式会社ヌーラボではコラボレーションをキーワードに、チームコラボレーションをサポートする製品をリリースしたり、様々なイベントを開催してきました。

今回、私たちのホームである福岡でコラボレーションをメインテーマとしたカンファレンスを開催します。

コラボレーションは良い仕事をしていく上で大切なものですが、なんだかぼんやりとしてとらえどころのないものでもあったりします。カンファレンスではコラボレーションについてみなさまと考えを深められたらいいなと思っています。

開催時間:10月30日(土) 13:00〜20:00
開催場所:SRP福岡ソフトリサーチパーク ホール(福岡市早良区百道浜2-1-22)[地図]
参加対象者:コラボレーティブな仕事を行っている方、また行いたい方。
定員:300人
参加費:3,000円
主催:株式会社ヌーラボ

コラボレーションカンファレンス2010 in 福岡のホームページ

個人的に楽しみなのは集まった方全員で行うワールドカフェです。東京や京都でカンファレンスを行った時も大変盛り上がり活発な意見交換が行われましたが、今回は人数も大変多いので更に深くて熱い話し合いが行われることと思います。

講師の方も大変豪華で福岡ではなかなか聞けない話も多いと思います。ぜひお誘い合わせの上ご参加くださいませ。

プログラムを見て、申し込みは、申し込みページから!

それでは会場でお会いしましょう!

Cacooの新バージョンをリリースしました。

Java使いの方はぜひ1番目のビデオを見てみてくださいな。ロストテクノロジーなAppletで実現しています。

1.クイックスクリーンキャプチャ

Cacoo - Quick Screen Capture from Nulab Inc. on Vimeo.

2.スマートスタイル&スタイルのコピー&ペースト

Cacoo - Smart Style & Copy/Paste Style from Nulab Inc. on Vimeo.

3.BacklogからCacooを呼び出す

Backlog & Cacoo from dragon3 on Vimeo.

Cubby 2.0.0-rc1 をリリースしました。

長い道のりでしたが、Cubby2略してC2もいよいよリリース候補版のRC1です。振り返ってみると1ヶ月に1回リリースしていました。

リリース日 バージョン
2009-07-05 2.0.0-rc1
2009-06-03 2.0.0-beta3
2009-05-01 2.0.0-beta2
2009-03-14 2.0.0-beta1

最近ではGAE用のアプリに使われたり、Cubby+Scalaで動かしたり、Guice2+ iBATIS動かしたりなかなかおもしろい使い方が増えてきています。

追記:XMLなどを返すWebAPIの提供などにCubbyを使うこともあるようです。この場合JSPなどは一切使用せずURLと処理のディスパッチにのみCubbyを使用する形になります。

以下リリースノートです。

Cubby 2.0.0-rc1 をリリースしました。
http://cubby.seasar.org/download.html

次期バージョン(2.0)のリリース候補版になります。
使用された方はフィードバックを頂けると
大変助かります。

リリース内容に問題がなければ、ドキュメントの整備後に正式版としてリリース
します。

Cubby2.0の特徴は以下になります。

  • DIコンテナ非依存
  • 内部構造のモジュール化とプラグイン
  • J2EE1.4からJavaEE5への移行

Springのサンプルは以下のSVNから確認することができます。
https://www.seasar.org/svn/cubby/branches/2.0.x/cubby-apps/spring-examples/

Guiceのサンプルは以下のSVNから確認することができます。
https://www.seasar.org/svn/cubby/branches/2.0.x/cubby-apps/guice-examples/

今回のリリースは、以下のとおりです。
詳細はリリースノートをご覧ください。
https://www.seasar.org/issues/secure/ReleaseNote.jspa?projectId=10122&styleName=Text&version=10943

2.0.0-beta3 からは、Guice を使う場合に Module#configure の記述方法が変更
になっています。
https://www.seasar.org/issues/browse/CUBBY-233 をご覧下さい。

Cubby 2.0.0-beta1をリリースしました。

次期バージョン(2.0)のベータ版になります。使用された方はフィードバックを頂けると大変助かります。
http://cubby.seasar.org/2/download.html

Cubby2.0の特徴は以下になります。

  • DIコンテナ非依存
  • 内部構造のモジュール化とプラグイン
  • J2EE1.4からJavaEE5への移行

サイトトップは1.1系と2.0系で分けています。
2.0正式リリースの際は階層化して整理する予定です。

1.1系
http://cubby.seasar.org/download.html

2.0系
http://cubby.seasar.org/2/download.html

Guiceのサンプルは以下のSVNから確認することができます。

https://www.seasar.org/svn/cubby/branches/2.0.x/cubby-apps/guice-examples/

                                                                                                                                      • -

リリースノート
https://www.seasar.org/issues/secure/ReleaseNote.jspa?projectId=10122&styleName=Html&version=10841

バージョン移行の注意点については、移行ガイドを参照ください。
http://cubby.seasar.org/migration.html

                                                                                                                                      • -

Release Notes - Cubby - Version 2.0.0

                                                                                                                                      • -

Improvement

* [CUBBY-204] - J2EE1.4からJavaEE5への移行

New Feature

* [CUBBY-53] - JSPからのpublicフィールドの認識
* [CUBBY-194] - Seasar2へ依存する部分を分離する
* [CUBBY-195] - Seasar2のアダプタを追加
* [CUBBY-196] - Guiceのアダプタを追加
* [CUBBY-198] - RequestRoutingFilterをCubbyFilterに統合する
* [CUBBY-200] - 公開クラス・非公開クラスの分類、パッケージの整理
* [CUBBY-202] - POJOをアクションクラスに使えるようにする
* [CUBBY-210] - @RequestParameterにパラメータ名、コンバータを指定で
きるようにする
* [CUBBY-212] - 型変換エラーがあったときにバリデーションエラーにでき
るようする

Task

* [CUBBY-205] - JSONSerializer を使わないようにする
* [CUBBY-207] - テスト用のクラスを別のモジュールにする

                                                                                                                                      • -