2012年10月19日金曜日

テスト駆動開発と静的型付け言語

テスト駆動開発という開発手法があって、開発する前にまずテストを書きましょうというものだと理解しているのだけど、強い型付けをする言語とはあまり相性が良くないのではないかという話。

テスト駆動開発だと、最初にテストを書くから、テストされるコードの方は最初は未実装かスタブコードになるんじゃないかと思う。例えば、とりあえずあるメソッドを呼んでみて、未実装だと例外が返る、というような。だけど強く型付けられた言語の場合、未実装な関数を呼んだりすることはもちろんできない。assert falseみたいにスタブコードを書くことはできるけど、これコンパイルは通るのにいざ実行するとクラッシュするという静的型付けの意味をなくしてしまうようなコーディングだと思う。スタブコードを出荷コードにうっかり残してしまうと大変。(コンパイラフラグでassert falseを通さないようにできたかもしれないけど)。(できないみたい)

というわけで、テスト駆動開発を強い型付けを持つ言語(OCamlとかHaskellとか)に持ち込むのはあまり自然でない気がする。こういう言語では、私はまず型を書いてコンパイルが通るか見て、そのあとでテストを書いていく。まあテストし忘れてあーってなることも多いけど。

2012年10月9日火曜日

MacBook Pro Retinaモデルを購入した

使っていたLet's Noteがだんだん遅くなってきて、何か作業するごとに数分かかかるようになった。新しいPCを検討していたわけだが、仕事で使っているVaioは今ひとつだし、Let's noteはどうもサイズがしっくりくるモデルがない。Lenovoはデザインが好きじゃない。というわけで、前から興味があったMacにしてみた。iPhone、iPadときて本丸を攻め落とされた感じ。

感想を箇条書きで。

  • ディスプレイは美麗。入っているフォントが美しいのもあるかもしれない。ただ、ビットマップでアイコンを表示させているようなアプリ(Google日本語入力だとか)だと表示が汚く見える。
  • 喧伝されているジェスチャー機能だが、功罪相半ば、という感じ。確かに面白いし、覚えると便利そうだ。だが、ちょっとした動きを意図しないジェスチャーとして解釈されてしまい、意外な動作をされてしまうことも多い。これを書いているとき、デスクトップを切り替えようとして、ブラウザのバック操作になってしまい、一旦投稿画面がまっさらになってしまって焦った。Undoボタンで戻るんだね、こういう時。ジェスチャーよりもわたし的にはMacはキーボードショートカットが覚えやすい(メニューにそのまま書いてある)ことの方が助かっている。いやWindowsでもキーボードショートカットを覚える良いやり方はあるのかもしれないけど。
  • 普通にUnixのコマンドが使える。これは嬉しい。ただOCamlの環境をインストールするのはそれなりに面倒なのだろうか。Godiとか動くみたいだけど、バグがあるとかいうメールも流れてるし(分かってません)。Linuxほどすんなりは動かなさそう。手で入れるのが一番簡単そうだけど、あとでOCamlのバージョンを変える時、パッケージ管理システムがないとわけがわからなくなるので。
  • Windowsと違っていて戸惑うことも多いのだが、(例えば、右クリックと左クリックの違いとか)、全体的に言うとMacのほうが洗練されていて使いやすい気がする。(個人の感想です)例えば、WindowsのバックアップとMacのTime Machineを比較すると、自動で履歴管理までしてくれるTime Machineの方が圧倒的に優れていると思う。
  • Finderはまだ使いこなせていない。マイファイルにはEmacsで編集したファイルは更新されたファイルとしてリストされないのかな。そうだとするとEmacs使いとしてはあまり意味が無さそうな…
まあこんな感じです。開発環境の導入はまだなので、そうしたら文句とか出てくるかも。