サーバーサイドエンジニアとして最近の雑感
最近はサーバーサイドが得意なフルスタックエンジニアですよ、って言って仕事を受けてるんですが、そんなことをしてるとやはりフロントサイドを書く機会も多くて、この時代のサーバーサイドエンジニアの価値ってなんだろうなぁと改めて思ったので考えたことをメモ。
RubyでもJavaでも何でも良いのですが、普通のWebアプリケーションがやってることって
という流れ。
ところが最近はUIがリッチになものが求められたりしてきているので、どうしてもSPAの流れになってきてるなと。WebじゃないネイティブアプリはそもそもがSPAみたいなものですし。
そうするとサーバーサイドはAPIだけの提供でよくて、更に複数の情報を組み合わせるようなデータの加工処理もクライアントサイド側で扱うほうが多くの場合パフォーマンス面や実装のシンプルさでメリットがあるなと最近フロントをガリガリ書いてて感じました。
そうするとサーバー側はシンプルなCRUDだけ提供していれば十分で、ここに複雑な機能はいりません。となるとmBaaSが提供するような永続化機能で十分だなと。GraphQL が流行っているのも納得で、サーバーサイドの人間とすると最初は呼び出し側が使い方を決めるなんてよくわからんと思ったりもしたんですが、データの保存と取得しか無いようなものであれば確かにクライアントサイドが処理をコントロールできるし、その方がメリットは大きい気がします。
自分が個人で受けていて1人で作っているサービスも結局SPAになって、サーバーサイドでやることほぼなくなってきました。
会計システム(受けてる案件の一つ)なんかはサーバーで処理する部分が多くなるのでサーバーサイドは大事ですが、BtoCのサービスで複雑なロジックが必要とされないようなものについては上記の感じじゃないでしょうか。
となると自分の強みの「サーバーサイドが他の人より多少できますよ」なんてのは大して意味がなくて、市場価値があるサーバーサイドのエンジニアになるには
- 複雑な業務システムを設計・開発・マネージメントできる
- システム全体としてのパフォーマンスを考えた設計・構築ができる
- 大規模であったり高パフォーマンスなシステムが作れる
- これは大企業で求められるレベルというレベル感。となると大企業で経験を積むしかなく、フリーでやってるとなかなかできる機会がないところ
- 周辺の技術領域まで手を伸ばす
- ユーザーの行動分析とか、インフラとか、フロントサイドとかを専門と言えるレベルまでやる
- 市場に供給が不足している技術を持つ
あたりでしょうか。
どれも大変そうですが、どれか一つくらいであれば最低限といえば最低限な気はします。いずれにせよコード書けるよ、だけだとサーバーサイドエンジニアは厳しそうです。
サーバーサイドエンジニアとして必要な知識はソフトウェアエンジニアなら誰もが持っていて欲しいものではあるですが、それだけでは価値がなくなりそうな時代かなと。
数年遅れの議論かもしれないですが、クライアントサイドを書く機会が増えてこんなことを思った次第です。
エンジニアリングの能力なんて本当はそこまで重要ではなくて、そもそものサービス志向とか一緒にものづくりをするメンバーとのコミュニケーションとかのが大事という思想ではあるんですが、とはいえエンジニアとしてこれからも生きていくわけではあるので技術面での生存戦略も忘れずにやっていきたい。