1. 汎用プログラミング言語は年々「intentional」になっていると言います。 また、類する言葉も色々ありますが、これらの言葉の意味するところは、以下のような感じ(いずれも意味するところはほぼ同じ):

    • intentional(意図的な、計画的な): プログラマーが意図したことをそのまま意図通りに書ける。
    • how から what へ: プログラムを「どうやって書くか」ではなく「何をしたいか」に注力できる。
    • declative(宣言的な): 意図を宣言すればそれがそのまま動く。

    汎用的なプログラミング言語にもまだまだ改良の余地があり、intentional な方向に向かって「モデル」が進化しています。

    汎用言語の進化 (モデリング言語)

    2 hours ago  /  0 notes  /  Source: ufcpp.net

  2. データベースシステムには「複雑さの保存則」のようなものがある。「データ構造の複雑さ」と「データ処理の複雑さ」の総量は一定である。つまり、同一のデータ要件において、データ構造を単純化すればデータ処理が複雑化する。たとえば私の言う「森羅万象テーブル」は、たったひとつのテーブルでシステムの全データを保持しようとするチャレンジングな設計スタイルなのだが、これほど「ベストっぽいシンプル」なDB構造はない。しかし、そのデータ処理様式の複雑さは想像に余りある。
    サロゲートキーは強制されるべきものではない: 設計者の発言

    17 hours ago  /  1 note  /  Source: watanabek.cocolog-nifty.com

  3. 1.3 オブジェクト指向プログラムのテスト駆動開発

    あるオブジェクトの外部とのインタラクションに集中すると、サービスを 1 つ呼び出し、その結果隣接オブジェクトとどうインタラクションしているかを追跡することでテストできるようになる。テストファーストでプログラミングしている場合、これらのテストを外向性インターフェイス(まだ存在していないかもしれない)の観点から定義できるようになる。それが、あるアクションが成功したかどうかを確かめる手段になるからだ。
    たとえば、dog.expressHappiness() が成功したら、dog の実装が body.wagTail() を呼び出すと決めよう。これは dog オブジェクトを開発するときに行う設計上の判断で、サービスの実装方法に関するものだ(ここでも、body(胴体)に対して tail(尻尾)の実装を訊ねないようにすることで列車事故を防いでいることがわかるだろう)。
    もし、DogBody オブジェクトがまだ wagTail() メソッドを実装していなければ、このテストによって満たすべき新しい要件が識別されたことになる。ここで手を止めて新しいフィーチャの実装を始めたくはない。それでは現在の作業から気が逸れてしまうし、wagTail() を実装しようとしてもその先の実装が長く続いていって、いつ終わるかわからなくなってしまうと思われるからだ。
    その代わり、我々は DogBody オブジェクトの偽の実装を提供し、メソッドが実装されているフリをしてもらう。そうすれば、その偽のオブジェクトに仕掛けをして、expressHappiness() をテストしている間に wagTail() が実際に呼び出されたかどうかを確かめられるのだ。
    要約すればこうなる。我々はオブジェクトをテストする際に隣接オブジェクトを偽物と置き換える。そしてその偽物が、期待通りに呼び出されたことを検証し、呼び出し元が求めるふるまいをすべてスタブ化するのだ。この偽物がモックオブジェクトと呼ばれる。そして、モックオブジェクトを使った TDD のテクニックも、モックオブジェクトと呼ばれるのだ。

    ロールをモックせよ p.4

    1 week ago  /  0 notes

  4. 1つ補足しておくと、ここでObjectLoaderをモック化しているのは、それが外部リソースDBなど)にアクセスしているっぽかったり、サードパーティーライブラリを想定していたりするからではありません。テスト対象のオブジェクトが動作する上で必要なコラボレーターを、テストを書きながら発見することがモックを使ったTDDの中核です。
    モックによるインターフェイスの発見 - Digital Romanticism

    1 week ago  /  0 notes  /  Source: d.hatena.ne.jp

  5. いま改めてこの事例から学べることはなんだろう。目的のためプログラミング言語の境界を超えるのに躊躇しないこと、日本特有のニーズを世界的なニーズに昇華させること、読むだけでその意味・意図が伝わるコードを書くこと、自分のアイデアや技術が必要とされる時期を逃さないこと…
    スパルタンVim

    1 week ago  /  0 notes

  6. The vast majority of software developers have yet to learn the practices and disciplines that constitute professional behavior. That’s because those practices have only just recently been defined. The software industry is barely fifty years old.  It has taken nearly that long to figure out what software professionalism is.  It is only in the last few years that a set of generally accepted software practices have been defined.  But now they are here, and it’s time for management to demand that professional behavior.  In this talk, Robert C. Martin will describe these disciplines, and practices, and will discuss how to raise the professionalism bar in your projects and teams.
    Demanding Software Professionalism: A Critical Management… - Eventbrite

    1 week ago  /  0 notes  /  Source: 8thlightseminar.eventbrite.com

  7. The essential structure of a test (with mock objects)

    The essential structure of a test is:

    - Create any required mock objects.
    - Create any real objects, including the target object.
    - Specify how you expect the mock objects to be called by the target object.
    - Call the triggering method(s) on the target object.
    - Assert that any resulting values are valid and that all the expected calls have been made.

    - Growing Object-Oriented Software, Guided by Tests -

    1 week ago  /  0 notes

  8. “Fail Fast,
Fail Cheap,
Be Lazy.

The greatest inefficiencies come from solving problems you will never have.”

- Rasmus Lerdorf

    “Fail Fast,
    Fail Cheap,
    Be Lazy.

    The greatest inefficiencies come from solving problems you will never have.”

    - Rasmus Lerdorf

    1 week ago  /  1 note

  9. ホワイトボックス対ブラックボックス

    昔風のライブラリでは、具体的な機能を実装するためにサブクラスで特定のメソッドを実装させるという事が良くある。これがホワイトボックス。例えば onmouseup でマウスアップ時の動作を記述する等。この欠点は、継承機構を利用するため、フレームワークとユーザコードのカプセル化が保証出来ない事。例えばうっかり知らずにメソッドをオーバーライドしたり、触ってはいけない内部状態を変更出来てしまう。

    これに対してブラックボックスでは、継承機構を使わずに実装を与える。イベントハンドラや、Smalltalk にある pluggable ビュー等。

    Designing Reusable Classes - 言語ゲーム

    2 weeks ago  /  1 note  /  Source: d.hatena.ne.jp