現役エンジニアから見たフロントエンドエンジニア、サーバサイドエンジニア、インフラエンジニアなど種類別メリット・デメリット
こちらの記事では
Webエンジニアって言われても世の中に〇〇エンジニアってありすぎてそれぞれ何が違うのか?というところがわからない。というのがあると思うので一通りまとめてみたのですが、これからWeb系企業でのエンジニアを目指す人にとってはフロントエンジニア、サーバエンジニア、インフラエンジニア、フルスタックエンジニアそれぞれどういうところが楽しくて、どういうところが大変なのか?というところを自分の観測範囲内でまとめてみました。
私自身本業では、Rais+Reactなどフルスタックよりの形で仕事をさせていただいていますが、自身の経験や一緒に働いた同僚のエンジニアの話などからメリット・デメリットをまとめさせていただきました。
フロントエンドエンジニアのメリット・デメリット
メリット
- 実装した機能がぱっと見わかりやすい。
- デザイン・やマーケティングなど別分野の知識もあると重宝されるのでエンジニアリング分野以外のこともできる。
- 需要拡大中
- 技術の変化がはやく最新技術がどんどん出てくる。
デメリット
- UIの実装の正解がわかりづらく、上司、ディレクターの感覚で決まってしまう。
- ユーザに近い部分なので、ディレクター、マーケターなど多部署との調整が必要になり、コミュニケーションの時間が多くなる。
- 変化が早く、サーバに比べて情報のサイクルが短く情報が不足していることが多い
仕事がわかりやすいので華やかである一方それゆえの苦労もあるのがフロントエンドエンジニア
です。
フロントエンジニアとは、HTML,CSS,JavaScriptを使いながらフロント部分(クライアントの実装)の実装を取り仕切る役割です。昨今では、React,Vue,AngularなどのJSフレームワークのいきおいが増しその需要が拡大しています。
フロントは実装した機能がぱっと見わかりやすいというメリットがあり他のサーバサイドエンジニアやインフラエンジニアに比べてユーザから見える部分を実装するので単純にものをつくっただけでユーザや同僚からなんらかのフィードバックをもらいやすいです。これはモチベーションに与える影響が大きいく、友達に自分の仕事の話をしている時に「これ俺が作ったんだよね」など自慢しやすいのは間違いないです。
また、最近のWebサービスではWebマーケティングの部隊やデザイン・UIUXの部隊と共同して開発を行うことが一般的になっているので、エンジニアリング以外のこれらの部分の知識が必要になることが多いです。エンジニアリングだけでなくサービスをグロースさせるためのWebマーケやデザインの知識にも興味があるという方にはオススメの職種になっています。
先に話したようにこれからWebのフロントでの表現がより豊かになっていくので、フロントエンドエンジニアの需要が拡大しておりスタートアップ・ベンチャー界隈での求人をよく見かけるようになってきています。
これはメリットにもデメリットにもなるかと思うのですが、フロントの技術は移り変わりが激しいので新しい技術がどんどんでてきます。これらの変化を楽しめる方には向いている職種ですが一度技術を身につけた後にそれ以降3ヵ月、半年スパンでまたべつの技術をみにつけるなんてできない。。という方にはあまりオススメできません。フロント特にJavaScriptの新しい情報は日本語であることが少ないので英語のドキュメントを読み解いたり試行錯誤しながら新しい技術をキャッチアップしていく必要があるのでこういう部分はフロントエンジニアの厳しい部分になるかと思います。
ほかにもフロントエンジニアを長くやっている方の意見でよく聞くのはフロント特にデザイン部分については正解がないので成果物の提出先(上司、あるいはプロダクトマネージャーなど)の感覚で修正されることも多く、納得感のないまま修正作業を命じられて疲弊するというデメリットもあるようです。本来的にはABテストなどデータを用いてUIの部分を決めるべきなのですが一つずつ全てをテストする余裕もないので現実的な問題としてこういう部分がフロントエンドエンジニアの難しい部分であるようです。
サーバーサイドエンジニアのメリット・デメリット
メリット
- 動作の確認などがとりやすく、テストコードも書きやすい。
- デザインなどフロント側の知識の重要度が相対的に低いので技術に集中できる。
- サーバエンジニア自体の数が多いので、ネットの情報や書籍の情報が多く情報収拾が楽
デメリット
- 要求範囲が不明瞭で知識領域の制限がないか広すぎる。
- 実装の出来・不出来が非エンジニアに理解されづらい。
- 決済系の実装などフロントの実装に比べてクリティカルな実装が多い。
学習コストが低い分、分野を決めないと要求される守備範囲が際限ないのがサーバサイドエンジニア
です。
サーバサイドのエンジニアは、普通Webエンジニアといった場合サーバサイドのエンジニアをさすくらい一般的でプログラミングの勉強をしてずっと普通にしていると自動的にサーバサイドエンジニアに振り分けられていきます。
使う言語は、その人や現場次第なのですが、コンパイル言語だとJava,Kotlin,Scala,Goスクリプト言語だとPHP,Ruby,Python(,Javacript)などたくさんの言語があり現場でつかわれている言語を基本使っていくような形になります。またそれぞれの言語でJavaならSpring、RubyならRails、PHPならLaravelなど言語ごとにフレームワークがあるのでそれについても勉強をすすめながら使いこなせるようにしていく必要があります。
サーバサイドの技術はフロントに比べると移り変わりが少なくネットでの情報収拾などがやりやすく初期の学習コストは低めです。ただレベルがあがるにつれてサーバサイドに求められる対応範囲がどんどんと広がっていくので中級者レベル(現場で数年経験をつんだくらい)以降はサーバサイドエンジニアのなかでもどの分野の技術を伸ばしていくのかということを決める必要がありそうです。
サーバーサイドのメリットとしては、デザインやマーケティングなどの知識の必要性がフロントに比べて低くエンジニアリング以外の部分で時間を取られることが少なく技術に集中することができます。技術に興味があってそこを伸ばしていきたいという興味がある人にはオススメです。
一方デメリットとしては、実装の出来・不出来が非エンジニアにとって見えづらく、仕事の速さなど断片的な情報で評価されてしまうリスクがあります。また、フロントに比べてバグを仕込んでしまった時にクリティカルであることが多いのでそういった部分の理解は必要です。他にもサーバサイドエンジニアの領域はどんどん広がっていて単純にサーバサイドのコードを書いていればよいというだけでなくDockerなどのコンテナ技術からNginxなどのサーバの技術についてもある程度知っている必要がある。ともすればReact,Vueの実装もいっしょにやるなんてこともあり、自分の中である程度こういう部分を伸ばしたいというのを持っていないと現場の事情に引きずられて浅く広く知識が身について自分が何が得意なのかわからない状態になる危険性もはらんでいます。
インフラエンジニアのメリット・デメリット
#### メリット- ドメイン知識(業務知識)が最低限で済む。
- スポットでの仕事がしやすく、幅広いプロジェクトに関われる。
デメリット
- システムに休日はないので、24時間迅速な対応が求められることがある。
- 膨大なアクセスやデータ量を扱った経験が必要だったり自習で行える範囲が限られる。
です。
インフラエンジニアに関しては自身での経験がほぼないので、自身の観測範囲内でしか語れないのですがインフラは他のフロントエンジニアやサーバサイドエンジニアに比べて常に必要な業務あるというわけではないのでスポットで仕事がしやすく、インフラという軸で幅広いプロジェクトに関わっていくことができます。小さい会社さんでは、サービスの実装などは自社でやるけどインフラは外注のような形をとっているところもおおいのでそういう形で仕事をしたり副業をやるということもできます。
ただ、システムに休日はないので休日にアクセスが集中してサービスが重くなったなどなど業務時間外に対応を求められることも多かったりするので、そこらへんの苦労をいとわないと方にはオススメです。またインフラの仕事ではある程度のアクセス、データ量をさばいた経験が価値になることが多いので、自宅でサーバの設定の仕方や構築の仕方などは自習できますが他の職種に比べて勉強できる機会が少ないというデメリットがあります。インフラエンジニアを目指される方にはこれを理解して、企業じゃないとできない経験ができるか?という部分で会社や現場を選ぶ必要はありそうです。
まとめ
フロントエンド、サーバサイド、インフラという職種別にメリット・デメリットをまとめましたが、技術領域の違いで仕事の性質が出てくるというのが単純に面白かったです。基本的にはフロント→サーバ→インフラの順に技術色が強くなり反対にフロントの方がビジネス色が強くなるというのがこれまでの私の経験からの結論です。
実際にどの職種で今後キャリアを作っていくかというところについては、ご自身の興味がある分野と相談しながら決めていくのが良いと思います。今の時点でどれがいいか明確には決まっていないという人はとりあえず一通り勉強して一からサイトを作れるくらいにはなっておけばそのあとどの職種にも写っていけますので基礎固めをされるのをオススメします。
プログラミングの勉強を進めつつ自分はどういう分野に興味があってどういう仕事をしたいのかなというのをぼんやりと考えていきましょう。