JavaScript の「本気」な勉強

まだひっぱるのもなんですけど。たぶん,言葉の指す対象にいろいろブレがあると思うんですよね。

勉強する人
  • まったくの初学者
  • さわりの文法などは知っているが,現実になにをどう書けばいいかわからない
勉強のスタイル
  • 本気で勉強したい
    • 本気で深く勉強したい
    • 本気でひととおり使えるようになりたい
勉強する対象

ともかく,もやもやと思ったことをとりとめもなく羅列してみます

ライブラリの功罪

ライブラリは流行り廃りが激しいから、特定のライブラリに依存した「おまじない」ばかり覚えているのはどうかと思うなあ

やっぱり、 DOM を直接書けたほうが、知識としては幅広く使えると思いますよ。

onclick 属性問題について - IT戦記

僕自身はなんだかんだで仕様原理主義者な所が今も強いわけで、その考えに則れば、onclick等のイベントハンドラは一応W3Cの仕様に含まれてるから(HTML4XHTML 1.0XHTML 1.1)OKだけど、ライブラリは業界団体の作る標準仕様になってないからNG、と言える。というのはまあ半分冗談だし、そもそもHolyGrailさんの指摘とは次元が違う話なのですが。

しかしこの考えも、権威主義だけじゃなくて、実利的に考えて「そうあるべき」と僕は割と真面目に思っていたりもする。

  1. いつでも詳細な取り決めを確認できて、不安無く使える。
  2. 特定のベンダの意向や、世間の流行り廃りに振り回されずに、安心して使える。
  3. 学んだことが無駄にならず、他の場面でも使える。

この三つの点について、満たしている物が多ければ多いほど、満たしているレベルが高ければ高いほど、それは良い物で学ぶ意義も大きいと僕は思う。

Latest topics > 本気でやるならprototype.jsやjQueryやYUIは避けてonclickを使うべき - outsider reflex

いわんとすることの半分はわかる気がするのですが,アルファギークな方々がこう書くと,うーんと思ってしまいます。


ECMAScriptW3C DOM の仕様とブラウザでの実装が,やりたいことに対する要件を満たしていればいいですよ。でも,例えば DOM 構築後のイベントを掬おうとしたらまだブラウザの実装によってまちまちじゃないですか。

こういうとき,ライブラリによって「DOM 構築後のイベント」として「抽象化」されていれば,今からでも使うことができますよね。将来的にもし DOMContentLoaded が標準仕様になったとしても,ライブラリ利用者にとってのインタフェースは変わりません。これって少なくとも初心者には・そして「実利的」にも価値あることだと思うのですが。


まぁ,たぶん,「『JavaScript を勉強』する上で,既存のライブラリ『だけ』を勉強していっても仕方ないよ,仕様に基づいたものを勉強したほうがいいよ,応用がきくし」というだけで,「ライブラリの使用・勉強=悪」だといっているわけじゃないかもしれません。違います?

というわけでアルファギークの方々に聞いてみたい

学習方法は十人十色だと思うのでこういう質問自体不毛かもしれませんが,さきほどの引用部分を読むとそれなりのスタンスはお持ちかなと思ったので,質問を項目建てしてみました。気が向いたら・お暇があったら,ぜひぜひ教えて欲しいです。

  • 初学者の入り口として既存のライブラリを使うのは
    • 望ましい
    • どちらかというと望ましい
    • どちらかというと望ましくない
    • 望ましくない
  • (初学者であれ)JavaScript の仕様に沿ったメカニズムについて
    • 学習するべきである
    • どちらかというと学習したほうがいい
    • 学習する必要はない
    • 学習対象による

そして前々から興味があったんですが

  • 自分で書く場合
    • 既存のライブラリを利用している
    • 自家製ライブラリを利用している
    • その他
    • ケースバイケース


ちなみに私の場合,

  • 初学者の入り口として既存のライブラリを使うのは
    • どちらかというと望ましい
      • ライブラリ使うと手っ取り早く色々書けて楽しいですし。
  • (初学者であれ)JavaScript の仕様に沿ったメカニズムについて
    • どちらかというと学習したほうがいい
      • どちらかというと,というより,必要なときがきたら学習すればいいかな,と。
  • DOM 構築後のスクリプト実行についてどう教える?
    • ライブラリ派なので jQuery$(document).ready() 使っとけ,と
  • 自分で書く場合
    • ケースバイケース
      • 後述↓

「自分で書く場合」の「ケースバイケース」,ですが,基本的に使える場所なら jQuery を使っていて,使えない or 使うまでもない場合は,<head> で include するコードで(ことイベントまわりについては),

window.onload = function () {
    // blah, blah, blah, ...
};

とか書いてます(恥ずかしい)。なんとなく

HTML 構造
CSS 見た目
JavaScript 振る舞い

みたいな美的感覚*1があるので,一人で書いていてもなるたけ分離してます。でもいろいろみなさんの文書を読んでいて,こだわる必要なかったかな,とすこし反省。

ライブラリから入ることと,たとえ話

そもそも私は JavaScript よりサーバサイド寄りの人なので,たとえ話で考えてみました。

  • O/R マッパだけ学習した人は(その O/R マッパが完全なものであれば)SQL インジェクションと無縁な生活を送れる

うーーーむ。これどうなんだろう(笑)。自分の立場としては,たしかにデータベースの仕組みとか,バックエンドな SQL の仕組みとかも知っていてほしいと思います。でも,よくできた O/R マッパなら,そこらへんを一生意識しないで生きていけるのかもしれません。そのことでより上のレイヤの生産性があがるのであれば,それはそれでアリかもしれない。というかそんな人の働きぶりを見てみたい。

実際には,より低レイヤについて学んでいかないと,そのうちにっちもさっちもいかなくなりますよね。パフォーマンスがどんづまったりとか,へんな設計になってしまったりとか。でも,

  • 人間,制約が多くても喜んでそれ克服するべく工夫する

部分もある気がするので,そういう人生やっぱり興味あるなぁ。

*1:これが絶対的な美意識というつもりはないですよ。美的感覚はひとそれぞれですから優劣があるとかでもないし。