.NET のクラスライブラリ設計
.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン (Microsoft.net Development Series)
- 作者: Krzysztof Cwalina,Bard Abrams,藤原雄介
- 出版社/メーカー: 日経BPソフトプレス
- 発売日: 2009/12/24
- メディア: 大型本
- 購入: 9人 クリック: 543回
- この商品を含むブログ (32件) を見る
とっくに読み終わっていたんだけど、まとめる時間がなかったのでかなり時間が空いてしまった・・・
ということで基本的には「・・・ん?」って思ったところとかのまとめです。
アセンブリと名前空間
よく Java の package と C# の namespace を同じようなものとして扱っている人はいるけど、この本では、
- アセンブリ
- パッケージング及び配置の境界
- 名前空間
- 開発者に対する論理的なグループ
としている*1。
Java の package はこの 2 つを合わせたもの*2だし、Java の名前空間はファイルの配置という物理的なグループも作り出すので、まったく同じものというわけではない。
なので、Java の package と C# の namespace の使い方は違ったものであるべきなのに、どうもそう考えていない人は多いっぽい・・・
この話はまた機会があればまとめようかな。時間があれば、だけど。
Java の package については、
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
- 作者: ロバート・C・マーチン,瀬谷啓介
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2008/07/01
- メディア: 大型本
- 購入: 17人 クリック: 561回
- この商品を含むブログ (67件) を見る
の 20 章を熟読すること。
一般的な型名を採用してもいいんじゃ?
.NET のクラスライブラリ設計 (P.48)Element、Node、Log、および Message のような一般的な型名を採用してはいけません。
一般的なシナリオにおいて、非常に高い可能性で型名の競合が誘発されます。汎用的な型名は修飾すべきです (FormElement、XmlNode、EventLog、SoapMessage)。
うーん、こういうことを回避するために名前空間があるんじゃないの?
それぞれ、Form.Element、Xml.Node、Event.Log、Soap.Message な感じで名前空間で区切って、競合する場合は直前までを using すればいい話で、むしろ一般的な型名はどんどん付けるべき。
メソッド名の付け方
.NET のクラスライブラリ設計 (P.56)メソッドには動詞または動詞句の名前を付けます。
.NET のクラスライブラリ設計 (P.288)ファクトリメソッドの名前は、"Create" という単語に作成される型の名前を連結したものにすることを検討します。
これらはよくある規約だけど、もう古くなっていて、これだけじゃ足りないと思う。
例えば、Effective Java の第二版では、
Effective Java 第 2 版 項目 1 コンストラクタの代わりに static ファクトリーメソッドを検討する (P.10)
- valueOf
- 大ざっぱに言えば、パラメータと同じ値を持つインスタンスを返します。〜略
- of
- EnumSet (項目 32) で広まった、valueOf に対する簡潔な代替です。
- getInstance
- 〜略
- newInstance
- getInstance に似ていますが、newInstance は返される個々のインスタンスはすべて別々のインスタンスである点が異なります。
- getType
- getInstance に似ていますが、ファクトリーメソッドが対象のクラスと異なるクラスにある場合に使用されます。Type はファクトリーメソッドから返されるオブジェクトの型を示しています。
- newType
- newInstance に似ていますが、ファクトリーメソッドが対象のクラスと異なるクラスにある場合に使用されます。Type はファクトリーメソッドから返されるオブジェクトの型を示しています。
何らかの処理を行うメソッドは、一般に動詞あるいは (目的語を含む) 動詞句で命名されます。たとえば、append や drawImage です。
Effective Java 第 2 版 項目 56 一般的に受け入れられている命名規約を守る (P.231 - 232)
〜略〜
特別に述べておくべきメソッド名が多少あります。オブジェクトの型を変換し、別の型の無関係なオブジェクトを返すメソッドは、たいていは toType と呼ばれます。例えば、toString、toArray です。レシーバーオブジェクトの型と異なる型を持つビュー (view) (項目 5) を返すメソッドは、たいていは asType と呼ばれます。たとえば、asList です。メソッドが呼び出されたオブジェクトと同じ値を持つ基本データを返すメソッドは、たいていは typeValue と呼ばれます。たとえば、intValue です。static ファクトリーメソッドに対する共通の名前は、valueOf、of、getInstance、newInstance、getType、newType です (項目 1、10 項)。
などとある。
例えば、タプルを生成するメソッドが Tuple.CreateTuple とか、Tuple.Create とかはどうなんだ、みたいな。Tuple.Of の方が短いし分かりやすいと思うんだけど・・・
このほかにも、流れるようなインターフェイスを設計する場合なども古い規約では対応できない。
CanXxx
CanRead は Readable よりも理解しやすいものです。しかしながら、Created は実際に IsCreated よりも読みやすいものです。プレフィックスを持つことは多くの場合、特にコードエディタ内で IntelliSense に表示されるときに、冗長過ぎ、かつ不要です。
〜略〜.NET のクラスライブラリ設計 (P.57 - 58)受動態よりも能動態を優先して選択すべきです。
if (stream.CanSeek) // こちらのほうが良い if (stream.IsSeekable)
個人的には、IntelliSense で bool を返すプロパティがまとまっていた方が分かりやすいので、Is プレフィックス推奨派なんだけど・・・
それと、C# では not が「!」なので視認性が悪いため、プロパティで実装せずにメソッドとして実装して拡張メソッドとして Not 版を用意するというのもありだと思う。
public interface ISomeInterface { bool IsHoge(); } public static class ISomeInterfaceExtension { public static bool IsNotHoge(this ISomeInterface self) { return !self.IsHoge(); } }
・・・拡張プロパティが欲しいところ。
Before/After
.NET のクラスライブラリ設計 (P.58)事前および事後のイベントを示すために、"Before" および "After" というプレフィックスおよびサフィックスを使用してはなりません。
その代わりに現在進行形によって事前のイベントを、過去形によって事後のイベントを表せ、といっているんだけど・・・
Before/After の方が分かりやすくない?事前のイベントについては特に。
イベントハンドラのアンチパターン
.NET のクラスライブラリ設計 (P.59)イベントハンドラに対して、"sender" および "e" という名前の 2 つのパラメータを使用します。
sender パラメータはイベントを発生させたオブジェクトを表します。sender パラメータは、より特定的な型を採用可能であったとしても、一般的に object 型になります。このパターンは .NET Framework 全体で一貫して採用されています。
.NET のクラスライブラリ設計 (P.134)
これはアンチパターンなんじゃないの?過去の遺産があることは分かるけど、これをパターンと言い張るには無理があるんじゃないだろうか?
sender が object だと、いつもいつも sender の型の確認とキャストが必要になって、DRY に違反しまくり。
だからこれには従うべきじゃないんじゃないかな。
class と struct
ライブラリで頻繁に使用されることが予測される型をプロファイルし、実際に発生しないかもしれないような思い込みではなく実際のデータに基づいて、参照型を値型に変更することを推奨します。
.NET のクラスライブラリ設計 (P.70)
これはリファクタリング手順を確立させる必要があるかも。
参照型は参照によって渡され、逆に値型は値によって渡されます。
.NET のクラスライブラリ設計 (P.70)
とても誤解を生みそうな表現の気が・・・
スマートポインタ?
"スマートポインタ" な値型を作成することによって、それらが通常のオブジェクトであるかのように配列内の要素を参照することも可能です。これらの型は 2 つのフィールドを持ちます。最初のフィールドは巨大な配列に対する参照、2 番目のフィールドは配列のインデックスです。ユーザーの視点からは、これらの "スマートポインタ" の使用は通常の参照型の使用のように見えますが、メモリ使用量は大きく削減されます。
.NET のクラスライブラリ設計 (P.71)
スマートポインタ・・・用語の再利用はさけて欲しいんだけど・・・
スマートポインタというと普通は C++ のスマートポインタだよね。
構造体の設計
.NET のクラスライブラリ設計 (P.83)変更可能 (mutable) な値型を定義してはいけません。
これは是非従うべき!
public struct Point { public int X { get; set; } public int Y { get; set; } // 以下略 } class Program { static void Hoge(Point p) { p.X = 10; } static void Main() { var p = new Point() { X = 1, Y = 1 }; Hoge(p); Console.WriteLine(p.X); } }
とか、罠過ぎる。
コンストラクタが常に最善とは限らない
System.DateTime はいくつかのコンストラクタオーバーロードを持ちます。最も強力でありながら、同時に最も複雑なオーバーロードは、8 つのパラメータを取ります。ありがたいことに、コンストラクタのオーバーロードによって、この型は 3 つのシンプルなパラメータ、すなわち hour、minute および second を取る、より短いコンストラクタもサポートします。
public struct DateTime { public DateTime(int year, int month, int day, int hour, int minute, int second, int millisecond, Calendar calendar) { ... } public DateTime(int hour, int minute, int second) { ... } }.NET のクラスライブラリ設計 (P.102)
何もありがたくないよ!いや、確かに下のコンストラクタがないと困るけど、そうじゃないだろ。
コンストラクタのオーバーロードでは、year, month, day を引数に取るバージョンは作れない。
なんで、ここは素直にファクトリにすべき場所だと思うんだけどなぁ。
.NET のクラスライブラリ設計 (P.285)特別な構築メカニズムと比較すると、一般的にはコンストラクタのほうがユーザビリティ、一貫性、利便性に優れているので、ファクトリよりもコンストラクタを優先して使用します。
それはない。DateTime のコンストラクタのユーザビリティとかもうね・・・
常にファクトリを用意しろ、って言うつもりはないけど、ユーザビリティとリーダビリティは一般的にはファクトリのほうが上じゃないかな?
ただまぁ、ファクトリに対してもうちょっとサポートが欲しいのは確か。
戻り値型が異なるオーバーロードについての言及はないのか・・・
できれば避けて欲しいんだけど。
たしか標準ライブラリの中にこれがあってはまったことがあるんだけど、なんだったか忘れてしまった・・・
一番近いのは、105 ページの「異なるセマンティクスを持つにもかかわらず同じ位置に似たような型があるパラメータを持つオーバーロードを定義してはいけません。」かな。
null について
.NET のクラスライブラリ設計 (P.106)オプションのパラメータに対しては null を渡すことを認めます。
〜略〜
このガイドラインが、魔法の定数として null を使用することを開発者に推奨することを意図しているのではなく、むしろ先ほど説明したように明示的なチェックを避けることを意図していることに注意してください。実際に、API を呼び出すときにリテラルの null を使用する必要があるときはいつでも、コードにエラーがあるか、またはフレームワークが適切なオーバーロードを提供していないことを示します。
あー、オプションのパラメータに null を渡すようなシナリオがあるなら、それはそのパラメータを削ったオーバーロード版を提供すべき、って考え方は面白いな。
null を生成するメソッド・プロパティを極力避ける、という項目も欲しかったけど、どうも見つからない。
メソッドかプロパティか
経験則として言えるのは、メソッドは動作を表現すべきであり、そしてプロパティはデータを表現すべきであるということです。
.NET のクラスライブラリ設計 (P.112)
流れるようなインターフェイス・・・
イニシャライザ前提のプロパティ
.NET のクラスライブラリ設計 (P.116)設定専用のプロパティ、またはゲッタよりも幅広いアクセス可能性を持つセッタを持つプロパティを提供してはいけません。
ゲッタよりも可視性の広いセッタは、イニシャライザで使うことを前提としてます、って意志表明に使えないかな・・・
public class Hoge { public int X { private get; set; } }
として、
var h = new Hoge() { X = 10 };
みたいな!
拡張メソッド
.NET のクラスライブラリ設計 (P.138)拡張メソッドの使用は、以下のシナリオのいずれかで検討します。
- インターフェイスのすべての実装に関係するヘルパ機能がコアインターフェイスの観点から書くことが可能である場合に、そのようなヘルパ機能を提供するため。
- ある型に依存するインスタンスメソッドを導入するとき、そのような依存性が依存性の管理ルールを破壊することになる場合。
個人的には拡張メソッドによって null 安全なメソッドが作れる、というのも大きいのだけれど・・・
極力 null は排除したいんだけど、現実はそうあまくないよね、という。
あと次のページで知ったんだけど、VB って System.Object の拡張メソッド呼び出せないんだ・・・
演算子のオーバーロード
.NET のクラスライブラリ設計 (P.144)
あ、C++ を Dis ってますか?
・・・というのはおいといて、C# にも Boost.Xpressive 的なものが欲しいなぁ、なんて思ってたり。
あと拡張メソッド的に演算子オーバーロードを定義したいなぁ、とか。
4.0 では dynamic 使って・・・ってのもできなくはないみたいだけど・・・使う側で意識させたくないよね・・・
演算子に対応する名前
.NET のクラスライブラリ設計 (P.144 - 145)各オーバーロードされた演算子に対応するフレンドリな名前のメソッドを提供することを検討します。
〜略〜
C# の演算子のシンボル メタデータ上の名前 フレンドリな名前 ... ... ... + (二項) op_Addition Add - (二項) op_Subtraction Subtract ... ... ... != op_Inequality Equals ... ... ...
+ に Add、- に Subtract ってのはどうだろう。単純に Plus/Minus で良くないか?
例えば
- 作者: ジョシュア・ブロック,ニール・ガフター,柴田芳樹
- 出版社/メーカー: ピアソン・エデュケーション
- 発売日: 2005/11/14
- メディア: 大型本
- 購入: 3人 クリック: 83回
- この商品を含むブログ (56件) を見る
には、
Java の不変型のメソッド名には、誤解させるものがあります。add、subtract、negate などの名前は、これらのメソッドが呼び出されたインスタンスに対して変更を行うような印象を与えます。もっと良い名前は plus、minus、negation です。
Java Puzzlers 罠、落とし穴、コーナーケース パズル 56: 大問題 (Big Problem) (P.132)
そうすると、API 設計者に対する教訓は、不変型に対するメソッドの名前付けを行う場合には、動詞よりも前置詞と名詞を選ぶということです。
とあるし。
あと、!= が Equals になってるのは、!= 版は用意せずに == 版を ! しろ、ってことだろうけど・・・うーん。
PowerCollections
PowerCollections プロジェクトは System.Collections.Generic 名前空間を拡張するライブラリです。これはその名前空間に含まれる抽象に対する素晴らしいフィードバックおよび検証のソースです。
.NET のクラスライブラリ設計 (P.173)
こんなものあったのか!知らなかった!!
Deque、Set、Bag/MultiDictionary などに加え、Algoritms の充実っぷりも素晴らしい・・・
例外の再スロー
新しい例外をスローする時、実際に発生したエラーとは異なるエラーを報告しています。これも同様にアプリケーションをデバッグする能力を損ねます。したがって、常にスローするよりも再スローが望ましく、かつキャッチアンドスロー (および再スロー) はどちらも避けるようにしてください。
.NET のクラスライブラリ設計 (P.196)
.NET のクラスライブラリ設計 (P.198)例外をラップするときには内部例外を指定します。
throw new ConfigurationFileMissingException(..., e);このことをどの程度注意深く考え抜く必要があるのかについて十分に強調されていない可能性があります。よくわからないときは、例外を他の例外にラップしてはいけません。CLR において、ラップ処理があらゆる種類のトラブルを引き起こすことが知られている例はリフレクションです。リフレクションを使用してメソッドを実行したとき、メソッドが例外をスローすると、CLR はそれをキャッチし、新しい TargetInvocationException をスローします。実際のメソッドおよびメソッド内の問題のある場所を隠ぺいするので、これは信じがたいほどに迷惑なものです。
上のはちょっと後半よくわからない。
下のは、TargetInvocationException とかモロに Java の影響を受けてるよな・・・
Java と違って C# には検査例外がないんだから、例外をラップする意味はほとんどないはず*3。だから C# では基本的には例外をラップすべきではない。
DebuggerDisplay 属性
そんなものあったのね・・・(233 ページ)
EditorBrowsable 属性なんてのもはじめて知った (66 ページ)
用語
ファクトリには 2 つの主要なグループがあります。すなわち、ファクトリメソッド (factory method) とファクトリ型 (factory type) です。ファクトリ型は「アブストラクトファクトリ (abstract factory)」とも呼ばれます。
.NET のクラスライブラリ設計 (P.284)
ぎゃー!これはひでぇ!
これだと「Factory Method パターンはファクトリ型だからアブストラクトファクトリ」っつー意味不明な状況に・・・
結論
色々書いたけど、とてもいい本ですよ!
名前的には「.NET」なんて付いてるけど、他の言語を使っている場合でも参考になる部分は多々あるので、C# 使わないよ、って人でも読んでみるといいかも。
ただ、ちょっと高いのと、誤植的な物も結構あるのでまずは会社で買ってもらえばいいんじゃないかな。
間違い部分をメールしたら、増刷で修正されるみたいですし。
あと正誤表も用意されるようだから、値段がネックにならないなら是非買いましょう!
値段分の価値はあるかって?あるある。絶対にある。
More Effective C#
- 作者: Bill Wagner,長尾高弘
- 出版社/メーカー: 翔泳社
- 発売日: 2009/12/01
- メディア: 大型本
- 購入: 9人 クリック: 139回
- この商品を含むブログ (19件) を見る
を読むに当たって、注意すべきかなー、と思ったところをだらだらと。
ICloneable は実装すべきではない
ICloneable を実装することはお勧めできません†。
†:『Framework Design Guideline : Conversions, Idioms, and Patterns for Reusable .NET Libraries』(著/ Krzysztof Cwalina, Brad Abrams 刊/ Addison-Wesley) を参照してください。 More Effective C# 項目 1 1.x フレームワーク API のクラスではなく、ジェネリッククラスを使え (P.9)
とあるので、みなさん
.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン (Microsoft.net Development Series)
- 作者: Krzysztof Cwalina,Bard Abrams,藤原雄介
- 出版社/メーカー: 日経BPソフトプレス
- 発売日: 2009/12/24
- メディア: 大型本
- 購入: 9人 クリック: 543回
- この商品を含むブログ (32件) を見る
も買いましょう、ってことですね!
・・・何はともあれ、ICloneable 使うな!って本が割と読まれるであろうタイトルの日本語で読める本として出てきたのはありがたい限り。
もうちょっと標準ライブラリについて言及があってもいいんじゃ・・・
例えば 11 ページで、
// ある型のシーケンスを別の型のシーケンスに変換 IEnumerable<TOutput> Transform<TInput, TOutput>(IEnumerable<TInput> theCollection, Converter<TInput, TOutput> transformer); // testを満足させるすべての要素を集める IEnumerable<T> Test<T>(IEnumerable<T> theCollection, Predicate<T> test);
なメソッドを実装してるんだけど、標準ライブラリに用意された似たようなメソッドである Select や Where については言及していないという・・・
しかも、ここだけじゃなくて本全体を通して言えることなので更にがっかり・・・
IDisposable
public interface IEngine { void DoWork(); } public class EngineDriver<T> where T : IEngine, new() { public void GetThingsDone() { T driver = new T(); driver.DoWork(); } }T が IDisposable を実装する場合、リソースリークが起きます。T 型のローカル変数を作るときには、T が IDisposable を実装しているかどうかをかならずチェックし、実装している場合には、適切に廃棄される (Dispose() 呼び出しが行われる) ようにする必要があります。
public void GetThingsDone() { T driver = new T(); using (driver as IDisposable) { driver.DoWork(); } }More Effective C# 項目 5 ジェネリッククラスは、IDisposable を実装する型パラメータのサポートを忘れるな (P.29)
あー、これは今まで意識してなかった!
これは T に IDisposable 制約を付ければいいということではなくて、例えそうだとしても、それならそれで IEngine 自体が IDisposable を継承するはず。
あと、この問題は new 制約に限らず、ローカル変数を作るときは常に意識しなければならないことに注意が必要。
IEnumerator
IEnumerator<T1> leftSequence = left.GetEnumerator(); IEnumerator<T2> rightSequence = right.GetEnumerator(); while (leftSequence.MoveNext() &;&; rightSequence.MoveNext()) { yield return generator(leftSequence.Current, rightSequence.Current); }More Effective C# 項目 6 型パラメータのメソッド制約の定義にはデリゲートを使え (P.34)
「&;&;」 ってのは勿論「&&」の typo かなにかで、多分訳したときのミスだとおもうけど・・・
IEnumerator
で、この本もここ以外ではちゃんと using 使ってるんですけど、なぜかここでは使っていない・・・これは原著のミスかな?
正しくはこう。
using (var itr1 = left.GetEnumerator()) using (var itr2 = right.GetEnumerator()) { while (itr1.MoveNext() && itr2.MoveNext()) { yield return generator(itr1.Current, itr2.Current); } }
ただ、この本の流儀としては、
using (var itr1 = left.GetEnumerator()) { using (var itr2 = right.GetEnumerator()) { while (itr1.MoveNext() && itr2.MoveNext()) { yield return generator(itr1.Current, itr2.Current); } } }
こっちはネストが深くなる上、そんなに分かりやすくなるとも思えないんですけどねー。
ラムダ構文を使うまでもない
// 無名デリゲート構文を使ったForEach myInts.ForEach(delegate(int collectionMember) { Console.WriteLine(collectionMember); }); // ラムダ構文を使ったForEach myInts.ForEach((collectionMember) => Console.WriteLine(collectionMember));More Effective C# 項目 18 アクション、述語、関数から反復処理を切り離せ (P.99)
とあるんだけど、まずラムダ式の引数名はスコープも短いし短い名前でもいいと思うんだよね。
あと、引数が一個なら丸括弧も省略できるんだから、省略してしまって、
myInts.ForEach(i => Console.WriteLine(i));
・・・でも待って欲しい。これ、ラムダ構文すら必要ないよね?
myInts.ForEach(Console.WriteLine);
こうでしょ。
なんか他でも無駄にラムダ構文使ってる部分があったような・・・?
れいがい!
More Effective C# 項目 25 例外はメソッドの約束ごとが守れなかったときに使え (P.127〜)
頻繁に「エラー処理」という言葉が出てくるけど、エラー処理が何を意味するか、までは出てこないので各自考える必要がある。
れいがいむずい・・・
プロパティ
プログラマは、プロパティアクセッサが大仕事をすることを予想していません。プロパティゲッターは、コストのかかる処理をしてはなりません。プロパティセッターも、ある程度のデータチェックは必要でしょうが、呼び出しにコストがかかるようであってはなりません。
More Effective C# 項目 26 プロパティはデータらしくふるまうように作れ (P.131)
クラスを使うプログラマたちは、なぜこのような予想のもとに動いているのでしょうか。それは、彼らがプロパティをデータとして見ているからです。
基本的には同意なんだけど、「プロパティをプロパティとして使わない」ことってあるんだよねー。流れるようなインターフェイスとか。
まぁ、ほとんどの場合はプロパティをプロパティとして使うんで、問題ないでしょうけど。
var を使うことによる問題
More Effective C# 項目 30 ローカル変数はできる限り暗黙の型付けに委ねよ (P.147〜)
出来る限り var 使った方がいいよ!ってのには同意なんだけど、微妙な問題もあるんだよねぇ・・・
例えばこんなの。
static List<int> CreateList() { return new List<int>() { 0, 1, 2, 3, 4 }; } static void Main() { var l = CreateList(); var l2 = l.Reverse().Take(2); // コンパイルエラー }
IEnumerable
なぜなら、List
これを解決するにはいくつか方法がある。
- CreateList の戻り値を弱くする。つまり、IList
とか IEnumerable にする。 - 呼び出し後にキャストする。つまり、(IList
)CreateList() とか CreateList() as IList とする。 - var をやめて型を明示する。つまり、IList
l = CreateList(); とかにする。
一番目は影響範囲が大きいという可能性があるから、普通は二番目か三番目を選ぶかな。
どちらを選ぶにしても、コメントを書いておかないと分かりにくいとおもうので注意。
えー、なので、戻り値が異なるオーバーロードとかは出来る限り避けるのは当然として、3.0 以降は拡張メソッドにも注意が必要、ということになる。
List
追記:
コメントで第四、第五の方法を教えてもらいました!
- 呼び出し後に AsEnumerable を呼び出す。つまり、CreateList().AsEnumerable() とする。
- l は弄らず、l2 のために使うときに AsEnumerable を呼び出す。つまり、l.AsEnumerable().Reverse().Take(2) とする。
メソッドチェイン最高!
LINQ という名の流れるようなインターフェイス
単に this(と言うか自分自身と同じ型) を返せばいいってもんじゃないってのは前に書いたとおりだけど、LINQ も同じような場所があった。
ThenBy は、ソートされたシーケンスでなければ操作できません
More Effective C# 項目 36 クエリ式からメソッド呼び出しへの変換がどのように行われるかを理解せよ (P.178)
で、確認してみると、確かに IEnumerable
なので、ThenBy を使うためには必ず直前に OrderBy メソッド (もしくは ThenBy メソッド) を使用しなければならないことが強制できる。
全体
えー、typo というか、誤植が結構あります。残念です。
でも内容としては、ためになる内容もあるのでいい本です。
追記
- 作者: ビルワグナー,Bill Wagner,鈴木幸敏
- 出版社/メーカー: 翔泳社
- 発売日: 2009/12/17
- メディア: 大型本
- 購入: 5人 クリック: 210回
- この商品を含むブログ (14件) を見る
なんか無印も出るみたいですよ、っと。
4.0 版待ってるから More が先に出るのかな、と思ったんだけど、どうやら違ったみたい。
嬉しいような、残念なような・・・
ちなみに 4.0 版はこちら。
- 作者: Bill Wagner
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2010/03/05
- メディア: ペーパーバック
- クリック: 40回
- この商品を含むブログ (3件) を見る
今日ぽちった本
- 作者: Joe Celko
- 出版社/メーカー: Morgan Kaufmann
- 発売日: 2004/05/21
- メディア: ペーパーバック
- クリック: 14回
- この商品を含むブログ (2件) を見る
- 作者: Joe Celko
- 出版社/メーカー: Morgan Kaufmann
- 発売日: 2009/10/01
- メディア: ペーパーバック
- 購入: 1人 クリック: 3回
- この商品を含むブログ (1件) を見る
- 作者: Joe Celko
- 出版社/メーカー: Morgan Kaufmann
- 発売日: 1998
- メディア: ペーパーバック
- クリック: 2回
- この商品を含むブログ (1件) を見る
- 作者: Joe Celko
- 出版社/メーカー: Morgan Kaufmann
- 発売日: 2005/08/12
- メディア: ペーパーバック
- クリック: 4回
- この商品を含むブログ (2件) を見る
- 作者: Joe Celko
- 出版社/メーカー: Morgan Kaufmann
- 発売日: 2008/02/05
- メディア: ペーパーバック
- クリック: 4回
- この商品を含むブログ (1件) を見る
SQL Design Patterns: Expert Guide to SQL Programming (It in-Focus Series)
- 作者: Vadim Tropashko,Donald K. Burleson
- 出版社/メーカー: Rampant Tech Pr
- 発売日: 2007/04
- メディア: ペーパーバック
- クリック: 2回
- この商品を含むブログ (1件) を見る
Re:TDD を理解するためのまとめ
TDDを理解するためのまとめ - Logic Dice
を読んで、いい機会だと思って
- 作者: ケントベック,Kent Beck,長瀬嘉秀,テクノロジックアート
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2003/09
- メディア: 単行本
- 購入: 44人 クリック: 1,026回
- この商品を含むブログ (156件) を見る
を買って、実際に「Part 1 Money オブジェクトの例」を写経してみた。
んで、感じたことなどを。
あ、あくまで今の時点での考えなので、変なとこあったら指摘してくだしあ!
Red から Green、Green から Red
ある意味では残念な事なのですが、大抵のTDDの説明に記述されている、「RedからGreenに変わることが気持ちいい」という、その感覚が分からないのです。
TDDを理解するためのまとめ - Logic Dice
この気持ちは分からなくもない。
たまには Red から Green になって「おっしゃ!」と思うことはあっても、それは「気持ちいい」というわけではないし・・・
ここら辺は個人差なのだろうと割り切っておいた方がいいかもしれない。セールストーク、リップサービスの類の可能性もあるし、もしかすると伝言ゲーム的なノリかもしれないし。
ただまぁ、Red から Green の流れより、Green からの意図しない Red にほっとする、というのはよくある。
あぁ、テストがあってよかった、みたいな*1。
それに、実は Eclipse で
- 高速ビュー On
- エラー/障害時にのみアクティブにする On
と設定してるから、Green とか目にしないんだよねぇ・・・
VisualStudio に至っては、TestDriven.NET を使ってるから、そもそも色がないし。
自明な実装
TDDの紹介では、大概の場合に置いて小さなメソッドのテストが行われます。そこで説明されている事項は、説明のためとは言え、明らかに易しすぎるのです。その程度の事なら、テストを書く前に実装をしたい、と思ってしまうのです。
TDDを理解するためのまとめ - Logic Dice
これはまぁまさに説明のためで・・・
重要なのは、「この手順で実装できる」という安心感で、実際に本に書いてある通りの回りくどい方法を毎回毎回取る必要はない。
ただし、テストに関してはほぼ常に先に書く方がいいのかな、なんて思ったりする。
後で書くテストと先に書くテスト
確かに、先にテストを書くことで以降のテストのためのコードは残ります。後からテストを書くのを「やっぱりやめた」と言って、テストコードを書かないことを防ぎます。そして、そのテストを残す事がテストファーストの利点と言われます。
しかし、そう言われても、何か釈然としなかったのです。
その理由の1つは、例ではテストを単一メソッドに対して行っており、そのテストからスケルトンコード(REDを出力する実装)を生成していたことです。
メソッドはクラスの一部であり、そのクラスの振る舞いを定義します。
しかし、メソッドは詳細です。ただ1つのメソッドでは、クラス全体の振る舞いを知ることは出来ません。
故に、クラスという大ではなく、メソッドという小に焦点を当てているにも関わらず、そこからクラス全体をテストするためのコードを生み出そうとしているように見えることが、釈然としませんでした。
(注:記事の投稿時に確かめてみると、おそらくテスト駆動開発入門ではこれとは違う方法で生成を行っています。この本のPart1は詳細に進めすぎていて、逆に全体が見えてこない印象を受けましたが…)
そのような小をテストすることが単体テストである、と言われたらそれまでなのですが……
TDDを理解するためのまとめ - Logic Dice
テストを残すことは利点ではあるけど、その理由付けが違うんじゃないかなぁ。
テストを先に書く、というのは、インターフェイス*2と主な振る舞いを決定する意味合いが強くて、テストを後に書く、というのは、書いたものに対しての単体テストという意味*3しか持たない。
だから、TDD で記述するテストを「単体テスト」とひとまとめにしてしまうのはちょっと違和感がある。
TDD で記述するテストは、網羅性は求めていなくて、YAGNI に則って最小限の入出力分のテストさえあればいいんだと思う。
もちろん、それだけだと単体テストにはならないから、後で単体テスト用のテストは追加しなければならないんだけど。
なんで、わんくまで言ってたような入出力を網羅したようなテストって、実は TDD 的ではないんじゃないかなぁ、というのが自分の考え。
入出力を網羅したようなテストって、ある程度中がどうなってるか分からないと書けないというか、最初からそこまでがっちがちに振る舞いを決定する必要はないというか・・・
例えば入出力を網羅したようなテストを最初に書いたとすると、その後可能なリファクタリングってどう考えても狭まる。
出来なくはないけど、リファクタリング作業がとても重いものになってしまう。
リファクタリングのためのテストなのに、リファクタリングを阻害してしまうのは本末転倒だと思う。
TDD によりテスト容易性は確保されるので、TDD せずに後で単体テストを作るより、TDD で開発してあとで単体テストも作る方がテストは楽になるような気がする。
や、もちろんテストを意識して設計することでもそれは達成できるんで、結局は使う人の腕次第・・・?
テストの寿命
仮に「入出力を網羅したようなテストはある程度実装を意識する必要がある」が正しいとすると、それらのテスト群は TDD により作成したテスト群よりも、寿命が短いと言うことになる。
なぜなら、実装を意識している以上、リファクタリング時 (つまり実装の変更時) にそれらのテスト群は一斉に変更が必要となる可能性が高いから (変更しなかった場合、一斉に Red となる)。
こういう寿命の短いテストは、やはりリファクタリングには邪魔にしかならないため、最初から作り込む必要はないだろう。
また、いつでも簡単に切り捨てることが出来るように、TDD により作成した一連のテストとは別の場所・別のファイルにしておくということも考えられる。
ルートディレクトリレベル、ディレクトリレベル、ファイルレベル、ファイル内での記述位置レベル、どの程度切り離すかは分からない。
シナリオベースのテスト:TDD によるテスト、メソッドベースのテスト:単体テスト
とか、そんなことを思ったりした。
いや、こんなりはっきり分かれるわけではないだろうけど、少なくともシナリオベースのテストが (このエントリで言っているような) 単体テストであることは少ないように思う。
メソッドベースのテストが TDD によって生み出されることもないとは言わないけど、比率としてはシナリオベースのテストの方が多くなると思うし、多くあるべき。
やっぱりメソッドベースのテストというのは、入出力に重きを置くテストのように感じるし、事実そうだと思う。
ナイトリー (デイリー) ビルド時の回帰テストとコミット時の回帰テスト (スモークテスト)
ナイトリービルド時には時間による制限がないため、メソッドベースのテスト、つまりこのエントリでの単体テストを含めて実行すればいいが、コミット時はフィードバックがすぐにあることが重要なため、それほど時間をかけることが出来ない。
ここで、実行するテストの取捨選択が必要になってくるが、このテストのために TDD によるテストを基準に選択するのはどうだろうか。
基本的には TDD によるテストをすべて使用するのだが、それでも遅くなってきた場合は正常系のみに絞る、とか。
TDD による設計
TDDを理解するためのまとめ - Logic Diceシナリオテストによるクラス設計
ある意味では驚くべきことですが、シナリオテストを十分に考慮してプログラミングをすると、設計の質が上がりやすい傾向があります。
これは、そのクラスが外部からどのように使われるかを十分に吟味するためです。
自分がその新しく作られるクラスを使う視点に立つことで、変な使い方をしていないかをチェックすることができます。
TDD は設計手法だ、というのはよく言われているし、実際、その通りだと思う。
BDD (Behavior Driven Development:振る舞い駆動開発) というものも、その側面を前面に押し出すために作られたような言葉で、個人的にはぶっちゃけ TDD と違いはないと思っている。
TDD は「テスト」という言葉を使っているように、どうしても従来のテスト (このエントリ (ry 単体テスト) を思い浮かべてしまうようで、それからの脱却という意味もあるんじゃないかな > BDD
あー、あと、「クラス設計」という言葉はあまり好きじゃない。本題にはあんまり関係ないけど。
まぁ、その話はまたの機会ということで・・・
エントリ全体
TDD のテストとしてメソッドベースのテストも考えているという点以外ではおおむね同意できた。
おおむね良いんじゃないかな。
ここからは・・・
超簡易版で本自体の感想 (感想?) でっす。
- 固定値による実装→ 2 つ目のテストで一般化、というのは恣意的すぎる気がする
- TODO リストの項目がどう出てくるのかの説明が足りないような気がする
- ドキュメンテーションコメントはいつ書く?
- アサーションはいつ書く?
- コミットのタイミング迷う
- コミット、TODO リスト、チケットの関係もどうするか迷う
- P.55 で TODO リストから消えた項目の説明がない
あと実際に写経してみて分かったんだけど、IDE と相性が良いという割には・・・って、これは Eclipse の問題ですね、確実に。
My Job Went To India
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド
- 作者: Chad Fowler,でびあんぐる
- 出版社/メーカー: オーム社
- 発売日: 2006/09/26
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 99回
- この商品を含むブログ (161件) を見る
きむら (K) さんにすすめられて買ってはみたものの、それなりの間積んであった本を、盆に帰省した際の電車の中で読んだ。
・・・えーっと、何でもっと早くにこの本読まなかったんだ! > 自分
技術者のあり方とか、会社に関しての考え方とか、色々と考えさせられる本でした。
本屋で実物を見ても、きっとスルーするような本 (表紙とか薄さとかで) だったんで、本当すすめてくれてありがとうございました、としか。
やっぱネットっていいものですねー。
とりあえず、id:rf0444 と、id:a-hisame 、id:WK6 は読めば良いと思うよ!
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド
- 作者: Chad Fowler,でびあんぐる
- 出版社/メーカー: オーム社
- 発売日: 2006/09/26
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 99回
- この商品を含むブログ (161件) を見る
その他っぽい本を積んでみた
内容はまた後で・・・?
取消線が入ってるのは「読むな危険」、タイトルしかないものは「他にいい本があるか古いか興味の対象外」、それ以外はそれ以外です。
一番左の山
読み物その 1
- 作者: 門出明
- 出版社/メーカー: 技術評論社
- 発売日: 2006/12/23
- メディア: 単行本(ソフトカバー)
- クリック: 7回
- この商品を含むブログ (4件) を見る
- <萌えるSE 業界ノベルズ> お兄ちゃんはプログラマ
- システムエンジニアの仕事って・・・!? (気になる仕事をチェック!)
- プロジェクトマネージャの仕事って!? 気になる仕事をチェック!
Excel
ダメな本たち
Web っぽい本
- 作者: Leonard Richardson,Sam Ruby,山本陽平,株式会社クイープ
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/12/21
- メディア: 単行本
- 購入: 25人 クリック: 815回
- この商品を含むブログ (168件) を見る
エキスパートから学ぶXML実践プログラミング―現場のプログラマに求められるXMLの知識と実践テクニックを解説 (Programmer to programmer)
- 作者: デビッドハンター,デイブギボンズ,ジョンピノック,カートケーグル,ニコラオズ,ポールスペンサー,David Hunter,Paul Spencer,Dave Gibbons,Jon Pinnock,Kurt Cagle,Nikola Ozu,風工舎
- 出版社/メーカー: インプレス
- 発売日: 2001/09
- メディア: 単行本
- 購入: 2人 クリック: 9回
- この商品を含むブログ (2件) を見る
- 作者: 佐藤和人,できるシリーズ編集部
- 出版社/メーカー: インプレスジャパン
- 発売日: 2006/04/27
- メディア: 大型本
- 購入: 4人 クリック: 133回
- この商品を含むブログ (16件) を見る
- ゼロから始めるWebデザイン
実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~
- 作者: 市瀬裕哉,福島英児,望月真琴
- 出版社/メーカー: 技術評論社
- 発売日: 2008/11/29
- メディア: 大型本
- 購入: 16人 クリック: 280回
- この商品を含むブログ (58件) を見る
- 文字コード超研究
- 作者: トニーグラハム,関口正裕,Tony Graham,乾和志,海老塚徹
- 出版社/メーカー: 翔泳社
- 発売日: 2001/05
- メディア: 単行本
- 購入: 3人 クリック: 107回
- この商品を含むブログ (18件) を見る
左から 2 番目の山
読み物その 2
- 作者: Joel Spolsky,青木靖
- 出版社/メーカー: オーム社
- 発売日: 2005/12
- メディア: 単行本
- 購入: 18人 クリック: 360回
- この商品を含むブログ (455件) を見る
- 作者: Joel Spolsky,青木靖
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/21
- メディア: 単行本(ソフトカバー)
- 購入: 9人 クリック: 198回
- この商品を含むブログ (115件) を見る
作法とかセンスとかびゅーてぃほーとか
珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造
- 作者: ジョンベントリー,Jon Bentley,小林健一郎
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/10
- メディア: 単行本
- 購入: 28人 クリック: 528回
- この商品を含むブログ (159件) を見る
- 作者: Brian W.Kernighan,P.J.Plauger,木村泉
- 出版社/メーカー: 共立出版
- 発売日: 1981/05
- メディア: 単行本
- 購入: 1人 クリック: 67回
- この商品を含むブログ (26件) を見る
- 作者: Brian W.Kernighan,P.J.Plauger,木村泉
- 出版社/メーカー: 共立出版
- 発売日: 1982/06/20
- メディア: 単行本
- 購入: 1人 クリック: 160回
- この商品を含むブログ (26件) を見る
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 54人 クリック: 1,092回
- この商品を含むブログ (202件) を見る
センス・オブ・プログラミング! 抽象的に考えること・データ構造を理解すること
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2004/11/06
- メディア: 単行本(ソフトカバー)
- クリック: 35回
- この商品を含むブログ (57件) を見る
ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション
- 作者: ThoughtWorks Inc.,株式会社オージス総研オブジェクトの広場編集部
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/12/27
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 313回
- この商品を含むブログ (83件) を見る
プロダクティブ・プログラマ -プログラマのための生産性向上術 (THEORY/IN/PRACTICE)
- 作者: Neal Ford,島田浩二(監訳),夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 236回
- この商品を含むブログ (97件) を見る
- Smalltalkで学ぶオブジェクト指向プログラミングの本質
ビューティフルコード (THEORY/IN/PRACTICE)
- 作者: Brian Kernighan,Jon Bentley,まつもとゆきひろ,Andy Oram,Greg Wilson,久野禎子,久野靖
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/23
- メディア: 大型本
- 購入: 30人 クリック: 611回
- この商品を含むブログ (171件) を見る
言語っぽい本たち
sed & awkプログラミング 改訂版 (A nutshell handbook)
- 作者: Dale Dougherty,Arnold Robbins,福崎俊博
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 1997/10/01
- メディア: 大型本
- 購入: 2人 クリック: 47回
- この商品を含むブログ (33件) を見る
ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門
- 作者: 青木峰郎,山下伸夫
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/06/01
- メディア: 単行本
- 購入: 25人 クリック: 305回
- この商品を含むブログ (330件) を見る
- 作者: Professor Graham Hutton
- 出版社/メーカー: Cambridge University Press
- 発売日: 2007/01/15
- メディア: ペーパーバック
- 購入: 2人 クリック: 66回
- この商品を含むブログ (22件) を見る
たのしいRuby 第2版 Rubyではじめる気軽なプログラミング
- 作者: 高橋征義,後藤裕蔵
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/08/05
- メディア: 単行本
- 購入: 11人 クリック: 344回
- この商品を含むブログ (265件) を見る
Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
- 作者: 原悠
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/12/20
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 147回
- この商品を含むブログ (72件) を見る
- 作者: Yugui
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/26
- メディア: 大型本
- 購入: 27人 クリック: 600回
- この商品を含むブログ (245件) を見る
まつもとゆきひろ コードの世界?スーパー・プログラマになる14の思考法
- 作者: まつもとゆきひろ,日経Linux
- 出版社/メーカー: 日経BP出版センター
- 発売日: 2009/05/21
- メディア: 単行本(ソフトカバー)
- 購入: 50人 クリック: 1,708回
- この商品を含むブログ (109件) を見る
- 恋するプログラム―Rubyでつくる人工無脳
- 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/01/26
- メディア: 大型本
- 購入: 21人 クリック: 346回
- この商品を含むブログ (118件) を見る
- 作者: Russ Olsen,ラス・オルセン,小林健一,菅野裕,吉野雅人,山岸夢人,小島努
- 出版社/メーカー: ピアソン桐原
- 発売日: 2009/04/01
- メディア: 単行本
- 購入: 13人 クリック: 207回
- この商品を含むブログ (58件) を見る
- みんなのPython
- 速効!Pythonプログラミング―バージョン2.5対応
- 作者: Mark Lutz,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/26
- メディア: 大型本
- 購入: 11人 クリック: 394回
- この商品を含むブログ (117件) を見る
- 作者: Alex Martelli,Anna Martelli Ravenscroft,David Ascher,鴨澤眞夫,當山仁健,吉田聡,吉宗貞紀
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/06/26
- メディア: 大型本
- 購入: 9人 クリック: 391回
- この商品を含むブログ (82件) を見る
真ん中の山
読み物その 3
- 作者: G.パスカルザカリー,G.Pascal Zachary,山岡洋一
- 出版社/メーカー: 日経BP出版センター
- 発売日: 1994/12
- メディア: 単行本
- 購入: 11人 クリック: 151回
- この商品を含むブログ (62件) を見る
- 作者: G.パスカルザカリー,G.Pascal Zachary,山岡洋一
- 出版社/メーカー: 日経BP出版センター
- 発売日: 1994/12
- メディア: 単行本
- 購入: 14人 クリック: 591回
- この商品を含むブログ (105件) を見る
- ビル・ゲイツ未来を語る
OS とかシェルスクリプトとかコンパイラとかそんな感じ
- 作者: 山森丈範
- 出版社/メーカー: 技術評論社
- 発売日: 2007/09/05
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 54回
- この商品を含むブログ (20件) を見る
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/01
- メディア: 単行本
- 購入: 22人 クリック: 147回
- この商品を含むブログ (72件) を見る
- ツンデレ★りなっくす―おぼっちゃんなカレがツンデレな彼女とメイドに教えてもらうLinuxの基礎と裏ワザ
- 作者: Steve Oualline,高橋 則利
- 出版社/メーカー: 技術評論社
- 発売日: 2004/05
- メディア: 単行本
- 購入: 5人 クリック: 405回
- この商品を含むブログ (60件) を見る
- Windows Vista全機能Bible
PC自作きょうかしょ―これからはじめる パソコン組み立ての基礎から、初期不良の対策まで教えます。
- 作者: 身楽者,高梨祥人
- 出版社/メーカー: 秀和システム
- 発売日: 2004/07
- メディア: 単行本
- 購入: 3人 クリック: 110回
- この商品を含むブログ (15件) を見る
- 作者: 中島能和
- 出版社/メーカー: 翔泳社
- 発売日: 2008/12/04
- メディア: 単行本(ソフトカバー)
- 購入: 7人 クリック: 171回
- この商品を含むブログ (51件) を見る
- 作者: 広瀬雄二,A5
- 出版社/メーカー: 技術評論社
- 発売日: 2009/06/17
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 123回
- この商品を含むブログ (34件) を見る
- 作者: 奥村晴彦
- 出版社/メーカー: 技術評論社
- 発売日: 2006/12/12
- メディア: 大型本
- 購入: 2人 クリック: 107回
- この商品を含むブログ (55件) を見る
- [改訂第3版]LATEX 2ε美文書作成入門
- 改訂 新Linux/UNIX入門
Debian GNU/Linux徹底入門第3版 Sarge対応
- 作者: 武藤健志
- 出版社/メーカー: 翔泳社
- 発売日: 2005/08/04
- メディア: 大型本
- 購入: 8人 クリック: 127回
- この商品を含むブログ (82件) を見る
- 30日でできる! OS自作入門
- スモールコンパイラ の制作で学ぶ プログラムのしくみ
- 作者: 中田育男
- 出版社/メーカー: 朝倉書店
- 発売日: 1999/09
- メディア: 単行本
- 購入: 3人 クリック: 42回
- この商品を含むブログ (40件) を見る
- コンパイラ―原理・技法・ツール〈1〉 (Information & Computing)
- コンパイラ―原理・技法・ツール〈2〉 (Information & Computing)
コンパイラ―原理・技法・ツール (Information & Computing)
- 作者: A.V.エイホ,R.セシィ,J.D.ウルマン,M.S.ラム,Alfred V. Aho,Jeffery D. Ullman,Ravi Sethi,Monica S. Lam,原田賢一
- 出版社/メーカー: サイエンス社
- 発売日: 2009/06
- メディア: 単行本
- 購入: 1人 クリック: 121回
- この商品を含むブログ (22件) を見る
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2009/06/20
- メディア: 大型本
- 購入: 9人 クリック: 201回
- この商品を含むブログ (24件) を見る
右から 2 番目の山
読み物その 4
- 作者: クリフォード・ストール,Clifford Stoll,池央耿
- 出版社/メーカー: 草思社
- 発売日: 1991/09
- メディア: 単行本
- 購入: 22人 クリック: 63回
- この商品を含むブログ (38件) を見る
- 作者: クリフォード・ストール,Clifford Stoll,池央耿
- 出版社/メーカー: 草思社
- 発売日: 1991/09
- メディア: 単行本
- 購入: 34人 クリック: 540回
- この商品を含むブログ (66件) を見る
リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法
- 作者: Andy Hunt,武舎広幸,武舎るみ
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 24人 クリック: 453回
- この商品を含むブログ (141件) を見る
- 入れるとこミスった・・・
Debug Hacks -デバッグを極めるテクニック&ツール
- 作者: 吉岡弘隆,大和一洋,大岩尚宏,安部東洋,吉田俊輔
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 12人 クリック: 412回
- この商品を含むブログ (72件) を見る
人月の神話―狼人間を撃つ銀の弾はない (Professional computing series (別巻3))
- 作者: Jr.,フレデリック・P.ブルックス,Frederick Phillips,Jr. Brooks,滝沢徹,富沢昇,牧野祐子
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/11
- メディア: 単行本
- 購入: 8人 クリック: 157回
- この商品を含むブログ (175件) を見る
- 作者: ロバート・L・グラス,山浦恒央
- 出版社/メーカー: 日経BP出版センター
- 発売日: 2004/04/08
- メディア: 単行本
- 購入: 4人 クリック: 29回
- この商品を含むブログ (71件) を見る
新・ソフトウェア開発の神話 成功するプロジェクトチームの科学と文化 (IT Architects’Archive ソフトウェア開発の課題 11)
- 作者: ジョー・マラスコ,Joe Marasco,藤井拓
- 出版社/メーカー: 翔泳社
- 発売日: 2008/09/18
- メディア: 単行本(ソフトカバー)
- クリック: 20回
- この商品を含むブログ (16件) を見る
- 作者: トムデマルコ,Tom DeMarco,伊豆原弓
- 出版社/メーカー: 日経BP社
- 発売日: 1999/03
- メディア: 単行本
- 購入: 13人 クリック: 109回
- この商品を含むブログ (157件) を見る
- 作者: トム・デマルコ,伊豆原弓
- 出版社/メーカー: 日経BP社
- 発売日: 2001/11/26
- メディア: 単行本
- 購入: 14人 クリック: 115回
- この商品を含むブログ (109件) を見る
数学ちっくな本
- 作者: 平岡和幸,堀玄
- 出版社/メーカー: オーム社
- 発売日: 2004/10
- メディア: 単行本
- 購入: 27人 クリック: 272回
- この商品を含むブログ (87件) を見る
ゲーム開発のための数学・物理学入門 Beginning Math and Physics for Game Programmers
- 作者: Wendy Stahler
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/05/11
- メディア: 単行本
- 購入: 13人 クリック: 360回
- この商品を含むブログ (55件) を見る
構成管理とか
- ソフトウェア・テストの技法 第2版
パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)
- 作者: 江渡浩一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2009/07/10
- メディア: 単行本(ソフトカバー)
- 購入: 75人 クリック: 1,287回
- この商品を含むブログ (149件) を見る
Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイド
- 作者: 菅野裕,今田忠博,近藤正裕,杉本琢磨
- 出版社/メーカー: 技術評論社
- 発売日: 2008/09/18
- メディア: 大型本
- 購入: 23人 クリック: 229回
- この商品を含むブログ (84件) を見る
入門Trac with Subversion―Linux/Windows対応
- 作者: 高山恭介
- 出版社/メーカー: 秀和システム
- 発売日: 2008/05
- メディア: 単行本
- 購入: 15人 クリック: 362回
- この商品を含むブログ (50件) を見る
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
- 作者: Mike Mason,でびあんぐる
- 出版社/メーカー: オーム社
- 発売日: 2007/04/21
- メディア: 単行本(ソフトカバー)
- 購入: 34人 クリック: 644回
- この商品を含むブログ (100件) を見る
- 作者: 上平哲
- 出版社/メーカー: 秀和システム
- 発売日: 2006/07
- メディア: 単行本
- 購入: 4人 クリック: 92回
- この商品を含むブログ (67件) を見る
パターンによるソフトウェア構成管理 (IT Architects’ Archive―ソフトウェア開発の課題)
- 作者: ステファン・P・バーチャック,ブレッド・アップルトン,宗雅彦
- 出版社/メーカー: 翔泳社
- 発売日: 2006/10/24
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 91回
- この商品を含むブログ (35件) を見る
- 作者: 藤原克則
- 出版社/メーカー: 秀和システム
- 発売日: 2009/01
- メディア: 単行本
- 購入: 10人 クリック: 210回
- この商品を含むブログ (62件) を見る
- 実践バグ管理―プロジェクトを成功に導くための
アジャイルとかドメイン駆動とか達人とか
ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)
- 作者: ピートマクブリーン,McBreen Pete,村上雅章
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/03
- メディア: 単行本
- 購入: 4人 クリック: 84回
- この商品を含むブログ (64件) を見る
- 作者: 開米瑞浩
- 出版社/メーカー: 翔泳社
- 発売日: 2007/11/06
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 76回
- この商品を含むブログ (36件) を見る
アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~
- 作者: Mike Cohn,マイクコーン,安井力,角谷信太郎
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2009/01/29
- メディア: 単行本(ソフトカバー)
- 購入: 72人 クリック: 735回
- この商品を含むブログ (218件) を見る
アジャイルプラクティス 達人プログラマに学ぶ現場開発者の習慣
- 作者: Venkat Subramaniam,Andy Hunt,木下史彦,角谷信太郎
- 出版社/メーカー: オーム社
- 発売日: 2007/12/22
- メディア: 単行本(ソフトカバー)
- 購入: 34人 クリック: 986回
- この商品を含むブログ (293件) を見る
Ship It! ソフトウェアプロジェクト 成功のための達人式ガイドブック
- 作者: Jared Richardson,William Gwaltney Jr.,でびあんぐる
- 出版社/メーカー: オーム社
- 発売日: 2006/08/26
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 100回
- この商品を含むブログ (98件) を見る
- プレファクタリング ―リファクタリング軽減のための新設計 (THEORY/IN/PRACTICE)
アート・オブ・アジャイル デベロップメント ―組織を成功に導くエクストリームプログラミング (THEORY/IN/PRACTICE)
- 作者: James Shore,Shane Warden,木下史彦(監訳),平鍋健児(監訳),笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/02/18
- メディア: 大型本
- 購入: 18人 クリック: 329回
- この商品を含むブログ (96件) を見る
Domain-Driven Design: Tackling Complexity in the Heart of Software
- 作者: Eric Evans
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2003/08/22
- メディア: ハードカバー
- 購入: 4人 クリック: 110回
- この商品を含むブログ (89件) を見る
- 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/11
- メディア: 単行本
- 購入: 42人 クリック: 1,031回
- この商品を含むブログ (333件) を見る
一番右の山
その他のその他
プログラマのための論理パズル 難題を突破する論理思考トレーニング
- 作者: Dennis E. Shasha,吉平健治
- 出版社/メーカー: オーム社
- 発売日: 2009/03/26
- メディア: 単行本
- 購入: 21人 クリック: 394回
- この商品を含むブログ (63件) を見る
- 作者: Ozy,やねうらお
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2007/08/09
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 255回
- この商品を含むブログ (65件) を見る
ねっとわーく・せきゅりてぃ
入門OpenSSH―Linux/FreeBSD/Solaris/Mac OS X対応
- 作者: 新山祐介
- 出版社/メーカー: 秀和システム
- 発売日: 2006/06
- メディア: 単行本
- 購入: 3人 クリック: 37回
- この商品を含むブログ (19件) を見る
- 作者: 上野宣
- 出版社/メーカー: 翔泳社
- 発売日: 2004/12/09
- メディア: 単行本
- 購入: 4人 クリック: 121回
- この商品を含むブログ (59件) を見る
- 作者: 白潟敏朗,安達祐哉
- 出版社/メーカー: 中経出版
- 発売日: 2006/05/11
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 12回
- この商品を含むブログ (1件) を見る
- 暗号技術入門-秘密の国のアリス
- ハッカー・プログラミング大全 攻撃編
- 作者: 金床
- 出版社/メーカー: データ・ハウス
- 発売日: 2007/07/21
- メディア: ハードカバー
- 購入: 3人 クリック: 56回
- この商品を含むブログ (23件) を見る
UI
ヒューメイン・インタフェース―人に優しいシステムへの新たな指針
- 作者: ジェフラスキン,Jef Raskin,村上雅章
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2001/09
- メディア: 単行本
- 購入: 11人 クリック: 531回
- この商品を含むブログ (60件) を見る
入れるとこミスった・・・
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド
- 作者: Chad Fowler,でびあんぐる
- 出版社/メーカー: オーム社
- 発売日: 2006/09/26
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 99回
- この商品を含むブログ (161件) を見る
オブジェクト指向とか、SICP とか CTMCP とか
- 作者: ティモシイ・A.バッド,Timothy A. Budd,羽部正義
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/12
- メディア: 単行本
- 購入: 3人 クリック: 188回
- この商品を含むブログ (39件) を見る
オブジェクト指向入門 第2版 原則・コンセプト (IT Architect’Archive クラシックモダン・コンピューティング)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2007/01/10
- メディア: 単行本(ソフトカバー)
- 購入: 11人 クリック: 295回
- この商品を含むブログ (124件) を見る
オブジェクト指向入門 第2版 方法論・実践 (IT Architects’Archive CLASSIC MODER)
- 作者: バートランド・メイヤー,酒匂寛
- 出版社/メーカー: 翔泳社
- 発売日: 2008/08/29
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 96回
- この商品を含むブログ (49件) を見る
- 作者: エリックガンマ,ラルフジョンソン,リチャードヘルム,ジョンブリシディース,Erich Gamma,Ralph Johnson,Richard Helm,John Vlissides,本位田真一,吉田和樹
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 1999/10
- メディア: 単行本
- 購入: 20人 クリック: 676回
- この商品を含むブログ (199件) を見る
プログラムデザインのためのパターン言語―Pattern Languages of Program Design選集
- 作者: PLoPD Editors,細谷竜一,中山裕子
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2001/07
- メディア: 単行本
- クリック: 60回
- この商品を含むブログ (25件) を見る
- 作者: ジェラルド・ジェイサスマン,ジュリーサスマン,ハロルドエイブルソン,Gerald Jay Sussman,Julie Sussman,Harold Abelson,和田英一
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/02
- メディア: 単行本
- 購入: 33人 クリック: 1,083回
- この商品を含むブログ (483件) を見る
- 作者: セイフ・ハリディ,ピーター・ヴァン・ロイ,Peter Van-Roy,Seif Haridi,羽永洋
- 出版社/メーカー: 翔泳社
- 発売日: 2007/11/08
- メディア: 大型本
- 購入: 8人 クリック: 272回
- この商品を含むブログ (66件) を見る
撮り忘れた本
- 作者: MW
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2005/12
- メディア: 単行本
- クリック: 8回
- この商品を含むブログ (15件) を見る
今手元にない本
- 作者: マークルッツ,デイビッドアスカー,Mark Lutz,David Ascher,夏目大
- 出版社/メーカー: オライリージャパン
- 発売日: 2004/11
- メディア: 単行本
- 購入: 4人 クリック: 269回
- この商品を含むブログ (104件) を見る
- 作者: 結城浩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/03/24
- メディア: 大型本
- 購入: 39人 クリック: 672回
- この商品を含むブログ (396件) を見る
- 作者: 山村吉信
- 出版社/メーカー: 三元社
- 発売日: 2003/08
- メディア: 単行本
- 購入: 2人 クリック: 9回
- この商品を含むブログ (7件) を見る
- 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/26
- メディア: 大型本
- 購入: 23人 クリック: 723回
- この商品を含むブログ (80件) を見る
- 作者: Jeffrey E.F. Friedl,田和勝
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2003/05/26
- メディア: 単行本
- 購入: 4人 クリック: 236回
- この商品を含むブログ (110件) を見る
正規表現ハンドブック (Technical Handbook Series)
- 作者: 鹿島和郎,吉村晋一,木村浩一
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/06/30
- メディア: 単行本
- 購入: 7人 クリック: 96回
- この商品を含むブログ (12件) を見る