JavaScript Good Parts

JavaScript Good Partsという本を読んでます。

JavaScript無免許運転してきた僕には、かなり勉強になってます。Javaのような静的型付け言語から来ると、目から鱗っぽいです。

第四章FunctionsのModuleの説明に、こんなサンプルコードが出てきます。

1 var serial_maker = function () {
2  // Produce an object that produces unique strings. A 
3  // unique string is made up of two parts: a prefix 
4  // and a sequence number. The object comes with 
5  // methods for setting the prefix and sequence
6  // number, and a gensym method that produces unique 
7  // strings.
8 
9   var prefix = ''; 
10   var seq = 0; 
11   return {
12      set_prefix: function (p) { 
13          prefix = String(p);
14      }, 
15      set_seq: function (s) {
16          seq = s;
17      }, 
18      gensym: function () {
19          var result = prefix + seq;
20          seq += 1; 
21          return result;
22      }
23   };
24 };  
25 var seqer = serial_maker(); 
26 seqer.set_prefix('Q'); 
27 seqer.set_seq(1000); 
28 var unique = seqer.gensym();  // unique is "Q1000"

(JavaScript Good Parts P41-42より引用

25行目で、function serial_makerを実行すると、変数seqerには行11から行23で定義されたオブジェクトが返され代入されます。この時点で変数seqerからは、function serial_makerが見えなくなります。でも行26,27でset_prefix,set_seqメソッドの中で、変数prefix,seqにアクセスしています。これはクロージャーが可能にしています。

こういう風に書くと何が良いかを、JavaScript Good Partsでは以下のように説明してます(意訳です)。

...で、seqerを誤摩化して悪いことができなくします。seqerに定義されたメソッドを通さないで、変数prefix、seqにアクセスすることは出来ません。seqerオブジェクトはミュータブルですから、メソッドを置き換えることはできます。しかし、置き換えたメソッドからは変数prefix,seqにアクセスすることはできません。
(JavaScript Good Parts P42より意訳

アクセスできないのは、置き換えるメソッドはserial_maker functionの外で定義されるので、クロージャーの外になっちゃうから、、という理解で良いのかな。オブジェクト指向の一つの考え方『隠蔽化』をJavaScriptでやるとこんな風になるわけ、と目から鱗でした。

アジャイルで新しいプロジェクト

新しいプロジェクトが始まった。

また、同じチームでアジャイルで開発。先週、先々週、僕のいない間に、エピックと呼ばれるストーリーに落とす前段階のとても大雑把な要件を洗った。その場に居なかったのでわからないけど、契約やセールスの過程を通じて明らかになってきたエピックをポストイットに書いて壁に貼ってある。

その一個一個のエピックについて、今日はストーリーに落とし込んだ。エピックをもう少し詳しく書き直して、皆で共通の理解をする。時には、複数のストーリーに分解する。

できあがったストーリーそれぞれに、おおよその工数の見積もりをする。1日、3日、5日、8日とかそんな感じ。

ストーリーを全て、バックログを管理するスプレッドシートに記録しておしまい。

Authlogicを使ってみた

久しぶりにRailsで遊んでます。

以前はrestful-authenticationを使ってたのですが、今回はAuthlogicをユーザー認証に使ってみました。

Railscastで簡単にセットアップ完了。しばらく、functionalテストの中でどうやって使えば良いのか迷ったけど、AuthlogicのRdocを見て解決。fixtureの中でpassword_saltとかをセットするためのヘルパーも用意されていて便利。

RailsCastで紹介されているベーシックな機能しか使ってないけど、確かにAuthlogicのように色々コードをジェネレートして後でなんだか分らなくなるようなことがなくてクリーンだと思います。

読みにくいコード

ある天才君の書いたコードを使ったり、必要に応じて手を入れたりしてます。

よくある話かもしれませんが、その人の書いたコードで実現されている機能は凄いです。でも、ソースコードは人が読むことを拒絶してます。

例えば、よく規則のわからないハンガリアン記法による変数名やクラス名。
DJobModuleHJobModuleってのに出くわしたけど、この頭のDとHの違いはナンナンでしょう。

今日の午後、頭が痛くなったのはJobPackagePackageJobというクラス名。どう違うのかクラス名からは、さっぱりわかんない。
さらにJob_、アンダースコアで終わってる名前って書いてて気持ち悪くないのかなぁ。なんか後ろに続きがありそうで。

金曜日

金曜日は、イタレーションの終了する日で3時頃からレトロスペクティブをやって、4時から皆でQuakeとかをやって遊ぶというのが、僕の働いてる慣例です。

今週は、うまくイタレーションが推移し、壁に貼ってあるポスト・イットが殆ど終了していました。週の始めに行ったストーリー・ブレークダウンの見積もりが、おおむね正確だったようです。

そこでふと思ったのですが、日本の残業前提の会社では、どういうふうにアジャイルが機能するのでしょうか。各タスクを過小に見積もっておくのでしょうか。それとも、一日の作業時間を残業時間を含めて考えるのでしょうか。