「フロントエンドvsバックエンド　あなたが向いているのはどっち？」を和訳した

# この記事の概要
・[Frontend vs Backend: Which One Is Right For You?](https://dev.to/molly_struve/frontend-vs-backend-which-one-is-right-for-you-5gjg)の和訳
・「フロントエンドとバックエンド、どっちをやればいいのかなぁ…」と考えている人向け
・海外のエンジニアの方の考え方を知りたい人向け
・元記事を書かれた方：Molly Struveさん（[Kenna Security](https://www.kennasecurity.com/)の、[SRE（システム信頼性エンジニア](https://project.nikkeibp.co.jp/idg/atcl/idg/17/051600038/051600001/)））

# 序文
私は、新人開発者たちから幾度となく質問を受けました。
> 「私は何を勉強すべきで、コーディングを学んでいるときは何に注力すべきでしょうか？」

この質問をすることは、医学部生が「私はどの科を専攻すべきでしょうか？」と質問するのと同じようなものです。
正直言って、全てに当てはまる答えになるようなものはありません。
ですが、この話題について、私の考えに基づく幾つかの説明と助言を差し上げたいと思います。
あなたがご自身のキャリアをスタートさせる時、この記事が僅かでもあなたに何かを与えられることを願って。

# 言葉の定義
ソフトウェアについて議論を始めるとき、大抵まず最初に発生するのは、フロントエンドとバックエンドのどちらにフォーカスすべきか、という事です。
それぞれの特徴について話し始める前に、まずそれらを定義しましょう。

## フロントエンド
> ウェブサイトの表示レイヤーや、どのようにしてバックエンドからのデータをやり取りするか、についてを指す。HTML,CSS,JavaScript,Angularなど。そのほか、
・非同期リクエストやAjax
・ウェブ編集ソフトウェアに特化している
・イメージ編集
・アクセシビリティ
・ブラウザ互換性
・検索エンジン最適化

## バックエンド
> アプリケーションのデータ加工レイヤーについてを指す。データベースとやりとりし、どの情報をフロントエンドに送ってディスプレイに表示させるかを決定するレイヤーである。Ruby,Rails,Python,Javaなど。そのほか、
・サーバー設計
・データベース管理
・システムのスケーラビリティ
・セキュリティ
・データ変換
・バックアップ

これで、フロントエンドとバックエンドとは何なのか、という事が分かりましたね。
さて、あなたが働くうえで、これらの内どちらかを選ぶとしたら、どのようにしますか？
正直なところそれは、**あなたの個人的な好み**と、**そもそもなぜあなたは開発者になることを選択したのか**、によるのです。

# 働くことへの満足度
あなたが開発者になることを選んだ理由が、
「自分のキャリアの満足度を望んだから」「何か自分が楽しめることをやりたいから」
であるのならば、私からのアドバイスは、「フロントエンド/バックエンドどちらもやるべき」です。
どちらにもちょっとずつ手を出してみることが、あなた自身が「コレ、やっていて楽しいな」という感覚を得られる手段です。
何だか大変そうに聞こえましたか？ですが、やってみましょう。「楽しみながら仕事をする」ためのチャンスを増やすことが出来るはずですよ。

フロントエンド・バックエンドという職業の中でも、色々と分岐できて、圧倒的な立場に立つことが出来るような専門性の高いものは沢山あります。
あなたが開発者としてスタートしたら、基本の感覚を掴むことを心掛けて、夢中で没頭する事をあまり心配しすぎないようにしてください。実際にそれを使って働くとなったとき、どちらがあなたの心を本当に掴むのか、実際に試して見出してください。
但し、いざやり始めるとき、どちらにしても最初は大変である、ということはお忘れなきよう。
どちらに注力するかを決める前に、１～２年は、スタック全体を通して働くことをお勧めします。
「何だこれ、難しい」と苛立つ、という初めての経験をするには十分な時間でしょう。あるいは、この技術を扱いながら楽しく働ける、という評価を下すのにも十分な時間である、と言えます。

人ひとりひとり違った好みを持っていますが、「他の開発者はどの言語と技術を使うのが好きか」を知るのは興味深いことかもしれません。
以下は、2019年のStackOverflowによる、[どの言語が最も愛されているか](https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages)の調査結果です。

![what languages are most liked.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229731/03f64191-babb-ba9d-901f-9c8bd985d650.png)

総合的に働くことのもう一つの利点は、「どのようにして全ての要素は一緒に動作するか、という感触を得ること」です。
これは、将来どの領域に注力するにしても、非常に有用です。
もう一方がどのように機能するかという知識があれば、あなたの専門分野の範囲内でもより良いコードやインターフェースを作ったりできるようになります。

最後に、総合的に働くことで、やりたくないほうを決めることも出来るでしょう。あるいは、フルスタックエンジニアというキャリアを求めるかもしれません。それもまた、とても良いことなのです。

# 給与/安定性
もし、開発者にキャリアチェンジしたモチベーションが、「給料」や「安定性」であるならば、フロントエンド/バックエンドどちらも学ぶというのはあなたの時間を無駄にする行為かもしれません。
可能な限り最速でキャリアを積みたい、というのであれば、あなたが働きたいと思う領域についてのリサーチをしましょう。フロントエンドとバックエンドの給与の傾向はどのようなものか、またどんなタイプの開発者が最も需要があるのか、といったことです。

「フロントエンドとバックエンド、どちらの方がより稼げるか」について、私は「こっちです」と主張することはしません。
ですが、この疑問に答えを出そうとした調査結果はいくつかあります。
もう一度、2019年のStackOverflowによる調査、[タイプ別開発者の年収について](https://insights.stackoverflow.com/survey/2019#work-_-salary-by-developer-type)を見てみましょう。

グローバル
　フルスタックエンジニア　$57,000（約570万円）
　バックエンドエンジニア　$56,000（約560万円）
　フロントエンドエンジニア $52,000（約520万円）

アメリカ国内
　バックエンドエンジニア　$116,000（約1,160万円）
　フルスタックエンジニア　$110,000（約1,100万円）
　フロントエンドエンジニア　$103,000（約1,030万円）

上記に加えて、[技術に基づく年収](https://insights.stackoverflow.com/survey/2019#top-paying-technologies)の調査結果もあります。以下に結果の一部を示します。

グローバル
　Clojure $90,000（約900万円）
　Go      $80,000（約800万円）
　Python　$63,000（約630万円）
　Swift   $59,000（約590万円）
　JavaScript　$56,000（約560万円）
　HTML/CSS　　$55,000（約550万円）

アメリカ国内
　Scala　$143,000（約1,430万円）
　Clojure　$139,000（約1,390万円）
　Go　　   $136,000（約1,360万円）
　Swift　　$120,000（約1,200万円）
　Python　 $116,000（約1,160万円）
　JavaScript　$110,000（約1,100万円）
　HTML/CSS　　$105,000（約1,050万円）

注意すべきは、これらの年収データやトレンドは、あなたが働く環境や、リモートワークを望むかそうでないか、といった要因によって異なる可能性があるということです。必ずご自身でリサーチをしてください。求人掲示板を見るとか、バックエンドとフロントエンドの技術について調査するなどして、結果がどのくらい返ってきているかチェックするくらい簡単なことですよ。

# なぜ私がバックエンドを選んだか
私は、「なぜ私がバックエンドを選んだか」をここに書き記すことで、誰かが決断するときにその誰かに情報を与えることができるかも、と考えました。
私は開発者へのキャリアチェンジの時、仕事への満足度を求めており、総合的に働こうと決めました。
本格的にバックエンドエンジニアにシフトするまで、3年間、フルスタックエンジニアとして働きました。私をバックエンドへと引き寄せたものは、Rubyの小綺麗さでした。JavaScriptや他のフロントエンド言語からは常に「整理されていない感」を感じていました。
また、私はコードパフォーマンスの最適化にも注力しています。処理がより良く、より早く行われる方法を探すことがとても楽しいのです。
バックエンドは、私がそれをやる機会をより多く与えてくれるようでした。

つまるところ、私はそれほど視覚的・芸術的な人間ではないのです。
WEBページを一目見て、レイアウトをどう変更すれば全てイイ感じになるか分かる人もいるのでしょう。私はそれが得意でなく、バックエンド業務の方がより自然で快適なものであった、ということです。

もしあなたが、もっと他の人の意見も知りたいようであれば、[こちらのチャット](https://wakelet.com/wake/7d71f467-89ba-49cb-a196-4e32657369ac)をチェックしてみてください。web系のフロントエンド対バックエンドについて議論がされています。
また、[私がこの間立てたスレッド](https://dev.to/molly_struve/frontend-vs-backend-which-do-you-prefer-and-why-5a9e)も覗いてみてください。「フロントエンドとバックエンド、どちらを選びましたか？またその理由は何ですか？」という議題です。

# 永久のものなど、ない
もしあなたが何にフォーカスしようと決めたとしても、永久に続くものなどない、ということを知っておいてください。
もしあなたがある道を進んでいて、それが誤りであったと気付いたら、方向転換すればよいのです。
ソフトウェアエンジニアリングの最も優れた点のひとつは、「全てが繋がっている」ということです。
**ひとつの分野について多くを知ることは、あなたが学び他の分野で活躍することの助けになるのです。**

# この記事を書いた者のコメント
**「実際に触ってみる」ことが第一歩**なのは万国共通なようです。
やってみないと、自分好みかどうか分からないですしね。
ただ、特に初学者の方は前段階として、自分の頭で、自分の価値観・将来ビジョンを考えておくことも大切なのかなと思いました。

> 「自分がどうなりたいか」を踏まえて、分野を選定する
↓
やってみる
↓
「あっこれ楽しい」or「なんかしっくりこないな」が分かる

というステップでしょうか。
一方で、
・間違っていたと気付いたら方向転換すればいい。
・エンジニアリングでは「全てが繋がっている」ので、ひとつの分野で学んだことは別な分野で活かせる

というのもその通りだと思いますので、何か新しい技術にチャレンジする際、これを頭の片隅に置いておくことで、リラックスして臨めそうですね。