ツブシの効かないことは学習するな
初心者がプログラミングを学習するとき、なんでも学習する事があると思う。
初心者には、最初に学ぶ言語として、JavaScript をお勧めするが・・・
JavaScript を使った技術には、「ツブシの効かない技術」がある。
他の言語でも「あるある」な話なのだが、今回は JavaScript について書いてみたい。
あくまでも、私見であるが・・・
ツブシの効かない?
WEBエンジニア、特に「フロントエンドエンジニア」と言われる職種を考えてるなら問題ないのだが、そうではなくて、とりあえずプログラミングについて学ぶなら、スルーした方がいい技術や知識がいくつかある。
JavaScriptを使った技術には面白いものが沢山あるが、特殊なものもある。
扱いが特殊なものは理解するのに時間もかかる。
深入りすべきではないと思うケースがある。
苦労して習得しても、他の分野、他の言語を学ぶ上で必須ではないものがある。
初心者は、その学習に費やす時間をもっと別の言語に向けるべきだと思う。
例えば、JavaScript におけるオブジェクトやprototypeなどがそうかも知れない。
「オブジェクトはなんぞや」という理解は他の言語でも役に立つだろう。
しかし、「windowオブジェクト」そのものについては役たたないかもしれない。
DOM操作についても、広く浅く習得してもいいとは思うのだが、深入りすべきではない。
JavaScript や PHPなどのオブジェクトとC++のオブジェクトの取り扱いは違ったりするので、それらを前提に学習することをお勧めしたい。
いくつかピックアップしていこう。
windowオブジェクト
JavaScriptでしか扱わない特殊なオブジェクトである。
例えば、バックエンドエンジニアを目指すとか、組み込み系エンジニアには無縁の話である。
windowオブジェクトを扱う技術を深堀りして習得しても、他の分野では使えない技術だ。
※全く役に立たないという意味ではないことに留意してください。
サーバで動くPHPなどでは、そんなオブジェクトは扱わないだろう。
windowオブジェクトの概念を理解することは良いことだと思うのだけど、深堀りして学習する必要はないということ。
オブジェクトと参照
「C++が特殊である」という見方もあるが、その手の言語を長くやってきた私から見ると、JavaScriptのオブジェクトの取り扱いはトリッキーでやっかいだった。w
特に、オブジェクトの代入や、参照、関数の引数などはかなり違う。
ネスティングの深いオブジェクトのコピーが面倒だ。
小さなプログラムを組んでいるときは、大した問題ではないのだが、数万行のプログラムを書いていくと実感する。
「JavaScriptには、こういう書き方、作り方は向かないな」と。
逆の言い方をすれば、JavaScript 固有の書き方になってしまうケースが良くあるので、それを「みっちり」と身に付けると、他の言語を習得するときに障害になる可能性はあると思う。
つまり、「おかしな癖がついてしまう危険性」がある。
変数のチェック
変数のチェックに戸惑いを感じた事があるのは私だけではないだろうと思う。
- この変数は未定義?
- 変数の中身はゼロ?
- 変数の中身はnull?
C言語やC++と違うのは当たり前としても・・・
PHPなどの他のスクリプト系言語と比較しても、とても面倒臭い言語だと思う。
JavaScriptの変数については、よく理解しておく必要がある。
しかし、これらの知識は、別の言語ではあまり通用しないだろう。
DOM操作
DOM操作を覚えると面白い。
面白いので色々やりたくなるし、覚えたくなる。
しかし、貴方が初心者で、他の言語も習得するなら、これらの技術は後回しにしてスルーすべきだと思う。
さっと流して「こういうもんだ」ということにして、他の言語の学習に進みましょう。
ITエンジニアになるなら複数の言語を習得すべきだ。
毛色の違うC言語やC++は習得すべき言語だと思う。
無名関数
もうね、いや。やめて! お願いだからやめてね!w
宇宙語でプログラミングすることを身に着けないで欲しい。
他の言語で使えないから。
使える言語もあるかも知れないけど、まれなケースだと思う。
でもね、経験するとわかるんだけど、どうしてもそうしたくなるときがある。
仕方ないときもある。
無名関数の中では簡単な処理だけにして、イベント処理関数に引き渡しましょう。
通信処理プログラムやマルチタスクOSでのイベントドリブン、例外のやり方を習得しましょう。
初心者は、この無名関数まで学習する必要はないと思う。
特に、この分野で専門家になろうと思ってない人はやめておいた方が良いと思う。
非同期処理&&イベント処理
これもあるかな!?ということで書いておこう。
JavaScriptでは、「コールバック」という言い方が多い。
非同期処理を呼び出した結果は、後でコールされて渡される。
非同期処理やイベントの取り扱いは、他の言語でもあるが、特殊な書き方をしているケースを非常によく見かける。
他の言語ではまず見かけないだろう。
よく見かけるケースとしては、無名関数を使ったネスティング。
あれは非常に良くないと思う。
状態遷移図と状態遷移表、イベント処理関数の定義と、キャッチ。
これらの技術を理解しておけば、スマートな作り方ができるはず。
スクリプト系には良く「あるある」
関数名や変数名を短く書く事はやめようね。
コンパイラ系ではないので、文字列が長くなると処理速度が落ちる。
なるべく短く書きたいのは理解できる。
しかし、初心者は真似すべきではない。
後で自分が見てもわかるような変数名や関数名をつけるべきである。
「特に他人が見てもわかる」コーディングを目指してもらいたい。
特に、他の言語も学習するつもりなら。
大勢のプロジェクトでは嫌われる事は間違いない。
何が言いたいか?
「浅く学習してください」ということです。
無駄にはならないだろうけど、「ツブシが効かない」技術を習得する時間はもったいない。
- プログラミングとはどんなものなのか?
- 四則演算や論理演算
- 条件分岐や繰り返し処理
- 配列の取り扱い方
- オブジェクトって何?
- オブジェクトの取り扱い方
- 非同期処理とはどんなものなのか?
つまり、他の言語でも役に立つ知識や技術をメインに習得して欲しい。