1つのことにこだわりすぎるんじゃなくて、いろいろやってみたほうがいいですよーという話です。

 僕はサーバサイドエンジニアという、プログラムの内側を操作する系のエンジニアなのですが、最近フロントエンドとかインフラもやるようになって、サーバサイドの知識が増えたなーと感じてます。
 なぜかと言うと、いろんなことが繋がっているから、学んで無駄になることがないからですね。サーバサイドもフロントもインフラもデザインも1つのプログラムを作る過程であって、もし一人でWEBサービスを作ろうとするなら、全部の知識が必要になります。
 特に日本の正社員は、総合職的な働き方をするので、サーバサイドエンジニアという肩書を持っていても、デザインをやらされることがあります。未熟なうちはなおさらです。なので、幅広くやってみることは、最終的には1つのことを突き詰めるよりも深い知識が身につくと思ってます。

フロントエンドをやってみたら知識が深くなった

 最近、SPAというページを遷移させずに動作するプログラムを作っているのですが、フロントエンドの技術を使います。今までは、ボタンをクリックしたらページを移動させるのが当たり前だったので、ページを移動させるタイミングでデータを送信したり、入れ替えたりすればいいよね、という認識だったのですが、SPAとなるとそうはいきません。
 裏でデータを動かしたり、1つのページにいくつものデータをあらかじめ持たせておくなど、新しい技術が登場するわけです。そうなると、データってどうやって送信されてるんだっけ?とか、データを取ってきて表示させるには、どんな技術が使われているんだっけ?と考えるようになります。

 SPAというのはUX的にはとても良いのですが、作る側としては、結構面倒ですし、制限されることも多いです。だからこそ、深い知識が必要になるのです。
 RailsやLaravelみたいな流行りのサーバサイドフレームワークは、コマンド1つで何でもやってしまうので、知識がなくてもできるのですが、フロントエンドを触るようになったら、1から学びなおしという感じで、勉強になります。

インフラは初心者がハマる道

 初心者は、Progateからやる人が大半だと思うのですが、Progateは環境構築をしなくても動かせてしまうので、できた気になった人がいざ自分でプログラムを作ってみようと思った時に、インフラでハマります。これは絶対です。

 今でこそDockerという便利なサービスがあるのですが、僕が勉強した頃は、全部のプログラムをインストールするところからはじめましたし、Dockerが簡単とはいっても、Dockerの仕組みを理解するのも大変です。(僕は大変でした。。)

 開発環境ができたら、Herokuにアップするのですが、そこでGitの使い方を学びますし、AWSに挑戦しようものなら、サーバとDBとドメインとストレージあたりの知識を一気に詰め込む必要があります。AWSの知識はインフラエンジニアでなくても、ある程度は知っておかないと開発を進められないので、ここでもハマるでしょう。

デザインは奥が深い

 デザインには関わらないというサーバサイドエンジニアもいるかもしれませんが、一度やってみてもいいかもです。
 デザイナーの言う通りに作るだけでも仕事にはなるのですが、管理画面とか、問い合わせフォームみたいな無機質でも構わない部分とかは、デザイナーに任せずにエンジニアが自らデザインすることもありますし、コード化できるかどうかを考えながらデザインすることができるという強みがあるからです。

1から自分で作ってみる

 プログラミングを勉強するのにおすすめなのは、自分で1から作ってみることです。デザインを設計して、フロントエンドを使ってSPAを作る。それをAWSとかで運用する。

 ここまでできたら一人前です。サーバサイドだけ書いているエンジニアのはるか先に行くことができます。

 サービスが当たればお金になりますし、当たらなくてもポートフォリオとしてアピールすることができます。やって損はないと思うので、やってみましょう。