最近の心境をば。

id:amachang氏の遅延評価的勉強法を拝見し、丁度思う事があったので書き置きます。
[ネタ]とカテゴライズされていますが、今の自分にとって、かなり羨ましくもあり共感できる内容でした。


まず、自分は氏とは正反対…とまではいきませんが、わりとドキュメントから入るタイプの人間です。
そして、必要な部分を限定して学ぶにしても、寄り道が物凄く多いし長い。
さらに、話はすっ飛びますが、仕事で手がけたサイトにJavaScriptのライブラリを取り入れたことがありません。


で、結論から言うと、これらの勉強方法や考え(以降、敢えて悪癖と呼ぶ。)を少し改めようと思っています。
以降、それに至った経緯を書きますが、考えがまとまっていない上に、長くなると思います。


ここ数ヶ月、Webに携わる者としての自分の立ち位置みたいなものを考えていて、それに絡んで悪癖について考える機会も多くありました。

悪癖の原因についての自問自答は、

  • 覗こうと思えば覗ける「ブラックボックス」は、中身を理解しないと気がすまない。
  • 「需要」に対して、「自分が提供するもの」が可能な限りミニマム且つシンプルでないと気がすまない。

というあたりの自身の性格に収束しました。

「じゃ、コンピュータ触れないじゃん。」とツッコミが入りそうですが。


例えばFlex2のUIコンポーネント群は、MXMLに簡単に記述できるように、誤解を恐れずに言えば「ブラックボックス」として使えるように、フレームワークに組み込まれています。
しかし、その実体はASファイルに記述されたクラスです。
テキストエディタさえあれば覗ける「ブラックボックス」なんです。


これは、日々生み出される、JavaScriptのライブラリについても言えることです。
それぞれのライブラリで提供される独自クラスも、便利な関数群も、「ブラックボックス」であると共に全てその設計図が覗けるものです。


例えばここに、今作ろうとしているWebアプリケーションに利用できる、あるクロスブラウザな便利な関数があります。

それがどのように各ブラウザをフックしているのか。
どんな独自クラスに依存しているか。
その独自クラスはどういう作りなのか。
上に書いた自分の性格ですから、覗かずにはいられない。
辿っているうちに理解できない部分があれば、ドキュメント・リファレンス漁りが始まる。
汎用性の為に熟考を重ねて作りこまれた、「今回のWebアプリケーションにとって冗長な点」が気になってしょうがない。

チートシートさえあれば使えるはずの便利な関数を使うために、莫大な時間を費やすことになります。


こういうことを繰り返して、果てはプロジェクト毎に自前のスクリプトを書き続けて、悪癖に悩んで考えて、ようやく気づきました。
多くのライブラリ・クラスたちは、それぞれの言語に精通した、それも世界中の先人たちが議論を重ねて生み出した「道具」なんだと。
もちろんそれらを読み解いて学ぶこともとても大事な勉強です。
しかし、もっと大事なのはそれらを効果的に使って、エンドユーザにとって便利なものを作ることであるはずです。
また、より便利な新しい道具作りに貢献することであるはずです。
自分も、もう少し使う側にシフトしなければと思いました。


…以上、案の定支離滅裂になりましたが、最近のco-scheのコーディングに関しての心境です。


さて!
思い立ったが吉日、早速今コーディング中のサイトにjQueryを組みこんでみました。
これが、便利なこと便利なこと。

<ul id="globalMenu">
	<li><a href="javascript:;">foo1</a><ul>
		<li><a href="javascript:;">bar1</a></li>
		<li><a href="javascript:;">bar2</a></li>
	</ul></li>
	<li><a href="javascript:;">foo2</a><ul>
		<li><a href="javascript:;">bar3</a></li>
		<li><a href="javascript:;">bar4</a></li>
	</ul></li>
</ul>

みたいにリストでマークアップした階層型メニューを作るのに、windowの読みこみ待ってボタンそれぞれfor文回してリスナーつけてこいつらをクロスブラウザに…なんてこと考えなくても、

$(function(){
	$('#globalMenu > li').hover(
		function(){	$('ul', this).fadeIn(); },
		function(){	$('ul', this).fadeOut(); }
	);
});

で済んでしまいます(CSS省略)。
$関数のセレクタが素敵ですね。


結局、遅延評価的勉強法とはかけ離れた内容になってしまいました><