最近の心境をば。
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省略)。
$関数のセレクタが素敵ですね。
結局、遅延評価的勉強法とはかけ離れた内容になってしまいました><