So-net無料ブログ作成

Readability of code is now my first priority [プログラマー現役続行]

Coders at Work

Coders at Work

  • 作者: Peter Seibel
  • 出版社/メーカー: Apress
  • 発売日: 2009/09/11
  • メディア: ペーパーバック

本書の3番目のインタビューであるDouglas Crockford氏へのインタビューからの抜粋です。他人が書いたコードを理解するために、まずはそれをクリーンにする作業をするということに対する質問です。
Seibel: Have you ever found that code that was, at that level, a mess, then you cleaned it all up and discovered it was actually good code underneath?

Crockford: I've never actually seen that. I think it's really difficult to write good code in a sloppy manner. By good code, I mean it's going to be readable. At one level, it doesn't matter what it does to a machine if I can't figure out what it does, so it might turn out that the code is amazing in terms of its efficiency, or its compactness, or some other metric which I don't care about.

Readablity of code is now my first priority. It's more important than being fast, almost as important as being correct, but I think being readable is actually the most likely way of making it correct. So I think it's probably not good code and they probably made the wrong trade-offs if the code turned out to be in the state that it's not easily readable.
今月は、かなりの時間を費やして既存コードに機能を追加する作業を他の開発者と二人で行っていました。テストコードが存在しないレガシーコードでしたので、テスト用モック、既存機能用テストコード、および、新規機能用テストコードを追加し、それらのテストが合格するように実装の変更を行いました。

既存のコードを修正する場合には、可読性が悪い部分は、理解しようとして同じ箇所を何度も読み直していたりします。メソッド名やフィールド名をできるだけ変更したり、メソッドの抽出を行って読みやすくしながら作業をします。しかし、書き直したコードでも名前付け不十分だと後で自分でも混乱します。そうすると、もう一度名前を変更して、読みやすくします。

JavaScriptは今までほとんど勉強したことがなかったのですが、Crockford氏の本を読んでみようと思い早速購入しました。

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

  • 作者: Douglas Crockford
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2008/12/22
  • メディア: 大型本


書籍『アドレナリンジャンキー』 [プログラマー現役続行]

アドレナリンジャンキー プロジェクトの現在と未来を映す86パターン

アドレナリンジャンキー プロジェクトの現在と未来を映す86パターン

  • 作者: トム・デマルコ
  • 出版社/メーカー: 日経BP社
  • 発売日: 2009/10/22
  • メディア: 単行本

以前ブログで紹介した書籍『Adrenaline Junkies and Template Zombies』の翻訳版が出版されたようです。

(「News Improvement」、「書籍『Adrenaline Junkies and Template Zombies』 」)

Dual Pivot Quicksort [Java]

ロシア人プログラマーVladimir IaroslavskiyとJoshua Bloch、および、John Bentlyが取り組んできたDual Pivot Quicksortのパフォーマンス結果が公開されています。30年前以上に考えられたアルゴリズムです。

http://spreadsheets.google.com/pub?key=tZD0Uq6ox1-BHhCoXDWIyUQ&output=html

Java 7に導入されるのかもしれません。

(「Java 7のArrays.sort(Object[]) 」)

checkは危険な言葉 [プログラマー現役続行]

昔からコードレビューや「プログラミング作法」教育の中で言っていたことですが、checkXXXXというメソッドは、大体意味が分からないメソッドだったりします。「~を確認」とか「~を検査」ということで日本人プログラマーは安易に「check」を使いたがります。

たとえば、複写機の世界で言えば、「用紙を確認」と頭に思いついたので、checkPaperという具合です。でも、実際には、「用紙がトレイにあるか否かを確認」とか「用紙が排出されたか否かを確認」ということで、意味が全く異なります。しかし、なぜか途中が全部省かれて「用紙を確認」つまり「checkPapaer」という名前付けをしてしまうのです。

したがって、コードレビューの際に、checkXXXXというメソッド名を見ると、「ああ、まただ」と思いながら、何をするメソッドなのかを聞いて、別のメソッド名へ変更させることになります。

朝の読書 [プログラマー現役続行]

今月初めの台風の時に、電車が遅れる可能性もあるので、いつもより30分早い電車に乗れるように家を出ました。会社の最寄駅までに到着するまで、途中一回乗り換えるのですが、30分早い電車に乗るだけで、①乗り換えも含めてずっと座れる、②15分短縮される、ということが判明しました。それから、ずっと30分早く家を出るようにしています。

それで、電車に乗っている時間がほぼ一時間です。そして、会社の最寄駅に着いてから、マクドナルドで一時間ほど過ごしています。結果、朝は出社前に2時間が確保でき、本を読む時間が増えました。先週は、『レガシーコード改善ガイド』 を読み終えました。次は、『Coders at Work』を読み始めました。

ネーミングは設計の中心 [プログラマー現役続行]

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

  • 作者: マイケル・C・フェザーズ
  • 出版社/メーカー: 翔泳社
  • 発売日: 2009/07/14
  • メディア: 大型本

本書に次のように述べられています。
ネーミングは設計の中心である。優れたネーミングはシステムの理解を助け、作業を容易にする。しかし、貧弱なネーミングはシステムの理解を妨げ、後でシステムを扱うプログラマに辛い日々を送らせる。
ネーミング、つまり、名前付けがいい加減なものは、理解するのに多くの時間を要します。そして、理解したとしても、次に見た時にはまた理解できなくて格闘することになったりします。

残念ながら、名前付けというのは意識して行う必要がある一種の訓練です。そして、数年、あるいは、十数年以上意識し続けても、やはり、名前付けは容易ではありません。コードレビューを行う時は、不適切なクラス名やメソッド名に対しては、不適切であることを指摘します。それと同時に、どのように変更すべきかも考えるのでが、なかなか良い名前が思いつかない場合もあります。

長年、クラス設計やコードレビューを行って思うことは、クラス図とシーケンス図を書いたら設計が終わりではないということです。クラス、インタフェース、メソッドに対して、適切な名前付けが行われていることが重要です。しかし、その時点で名前付けについていい加減なものが作られると、コーディングでもいい加減な名前付けが行われます。

(株)アットウェア様でのセミナー [プログラマー現役続行]

11月20日(金)に、一時間の短縮版ですが、(株)アットウェアのセミナー「第5回atWorks」で話をします。

http://www.atware.co.jp/seminar/summary/summary20091120.html

懇親会も出席予定です。

書籍『レガシーコード改善ガイド』 [プログラマー現役続行]

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

  • 作者: マイケル・C・フェザーズ
  • 出版社/メーカー: 翔泳社
  • 発売日: 2009/07/14
  • メディア: 大型本

今週からは、こちらの書籍を通勤時に読む予定です。原著は2004年に出ているのですが、読んでいませんでした。最近読んだ何冊かの書籍でも言及されており、仕事でもレガシーコードにテストコードを用意して修正したりしているので、読んでみることにしました。

本書では、「レガシーコードとは、単にテストのないコード」と述べられており、次のように述べられています。
テストのないコードは悪いコードである。どれだけうまく書かれているかは関係ない。どのだけ美しいか、オブジェクト指向か、きちんとカブセル化されているかは関係ない。テストがあれば、検証しながらコードの動きを素早く変更することができる。テストがなければ、コードが良くなっているのか悪くなっているのかが本当にはわからない。
私自身は、今回仕事で直面した問題として、Singleton呼び出しの回避、モックのマルチスレッド化、および、テストコードとは別のスレッドにおける例外発生の補足、があります。

昔、自分で色々と工夫して設計を行ってから数年後に『デザインパターン』を読んだら、自分で工夫したことが全部書いてあったということを経験したことがあります。レガシーコードの書き換えに関しては、遠回りしないようにしたいと思っています。

(「Writing code without tests ...」)

ソフトウェア開発で伸びる人,伸びない人【第二版】 [プログラマー現役続行]

ソフトウェア開発で伸びる人、伸びない人 【第二版】

ソフトウェア開発で伸びる人、伸びない人 【第二版】

  • 作者: 荒井 玲子
  • 出版社/メーカー: 技術評論社
  • 発売日: 2009/10/21
  • メディア: 単行本(ソフトカバー)

荒井玲子さんの本も第二版として発売されています。目次を見ると、「特別付録 音楽とソフトウェア開発」として、次の3つの章が追加されています。
  • 第8章 音楽とソフトウェア開発
  • 第9章 演奏とソフトウェア開発
  • 第10章 オーケストラとプロジェクトマネジメント
音楽大学を卒業した彼女らしい付録です。音楽とソフトウェア開発に関しては、『
『Passionate Programmer』『Adrenaline Junkies and Template Zombies』でも述べられています。

初版を読まれていない人は、是非、この第二版を読んでみてください。

(「ソフトウェア開発組織はオーケストラ」)

ソフトウェア開発の名著を読む【第二版】 [プログラマー現役続行]

ソフトウェア開発の名著を読む 【第二版】

ソフトウェア開発の名著を読む 【第二版】

  • 作者: 柴田 芳樹
  • 出版社/メーカー: 技術評論社
  • 発売日: 2009/10/21
  • メディア: 単行本(ソフトカバー)

金曜日に帰宅したら、出版社から送られてきていました。ネットで調べてみると、ジュンク堂の池袋本店には在庫があるようなので、すでに店頭販売されているようです。今回は、初版の8冊に「リファクタリング」と「ビューティフルコード」を追加して、10冊を紹介しています。

2000年12月に監訳ということで出版した『Javaリアルタイム仕様』から翻訳書・著書の両方合わせて、ちょうど11冊目となります。そして、40代最後の出版です。