JavaScript を使っていると「JavaScript出来るの? jQuery / AngularJS / Node.js etc... で困ってるんだけどさー」みたいな話を振られることがあります。 そういった時に、自分は一般的なライブラリの使い方やフレームワークに対して大した知見も興味もないので、わざわざ説明するのも面倒なのでこうして文章にしておきます。(本当に届いて欲しい人に限って、こういう文章が届かないのはわかっていますが、文章を書くこと自体が気晴らしだと思って諦めます。)
先ほどのような話は自分に限ったことではなく、たぶん経験のある人も多いでしょう。 振られた話が自分の分かる範囲、あるいは興味のあるものならばまだ良いのですが、そうでないことがあまりに多すぎます。 話を振られるだけならともかく「JavaScriptできるんでしょ? じゃあ jQuery つかったこのサービスのメンテしてほしいんだけどー」みたいに仕事として振られることもあり、そう言う時は脳みそ取り出して洗剤で洗った方が良いのでは、と思うことも多々あります。
プログラミング言語が同じだけで、それに関わるすべての項目に詳しかったり興味があると思うのは殆どの場合期待しすぎです。 C 言語が使えるというだけで Linux カーネルハッカーに Windows アプリケーションを書かせますか? 偶然 Windows アプリケーションに興味のある人ならばやってくれるかもしれませんが、多くの場合断られるか転職されることでしょう。
なぜこういったことが頻繁に起こるのか少し考えてみたところ、現状 JavaScript を使うプログラマの呼び方が「フロントエンドエンジニア」というものしか知られていないからだと思い当たりました。 Node.js でサーバサイドプログラミングする人もフロントエンドエンジニアと呼ばれていると思います。 というかクライアントサイドのコード書いてたのに「JavaScript 書けるんでしょ? 今度 Node.js のプロジェクトできるから任せた」みたいな感じでいきなりサーバサイドに放り込まれた人もいるのではないでしょうか。 ともかく、「JavaScript が関係するものはすべて分かる」みたいに思われると誰も得をしないので、もっと細かく呼び方を分けたほうが良いのではという提案です。
なお、この話は自分のできるところだけしかやらない、やりたくないのかという話ではなく、JavaScript プログラマの対象とする範囲は幅広く、すべての場所で専門性を求められても困るしパフォーマンス出せないよという話です。 (まあ、本音を言えば、自分のできるところや興味のあるところしかやりたくないのですが)
とりあえず、4種類に分けるのが良い気がします。 クライアントかサーバ、フロントエンドかバックエンドという括りです。 何がフロントエンドで何がバックエンドかは、作成するものがサービスのユーザに近いかどうかで決めます。
現状の「フロントエンドエンジニア」と最も近い存在です。 jQuery や AngularJS などの MV なんとかフレームワークに興味を持ち、テンプレートエンジンなどの使い勝手や特徴などに詳しく、Web アプリケーションの設計などに興味のある人たちです。
ブラウザで動作するライブラリを作る人たちです。 直接ユーザにコードを届けることはしませんが、サービスやアプリケーションの機能を提供します。 JavaScript でアルゴリズム実装することが多いです。
Node.js などを利用したアプリケーションや Web API を提供します。 要は直接クライアントのリクエストを受ける位置をフロントエンドとします。 いかにブロッキングさせないかや適切に(主にイベントの参照が原因の)リソース解放されているか、リクエストをどれだけ効率的にさばくかなどに興味を持ちます。
Node.js で動作するライブラリ(ネイティブ実装のバインディング含む)を提供します。 また、サーバサイド間で通信する処理用のスクリプトもバックエンドとします。 JavaScript にかぎらず、高速化が行えるならば C/C++ などの言語を使ってライブラリを作ります。
例えば WebGL, Web Audio API などでデモやアプリケーションを作る人はここでいう「クライアントサイド+フロントエンド」とも少し違う気がします。 それがライブラリとして動作するならば「クライアントサイド+バックエンド」で良いと思いますが、まだまだフロントエンドの指す範囲が広いように思います。 また、Web MIDI Link のように「アプリケーションとしても動作するが、他のアプリケーションからライブラリとして呼び出せる」といった場合の分類も適切かどうか判断が難しいです。
jQuery のこととかきかれても微塵も興味ないので困ります。
javascriptやブラウザの設計をしている人はどこに入るんですかね?