ぼくのかんがえたさいきょうのフルスタックエンジニア
IT業界では役割に応じて○○エンジニアと名前がつき、広い技術に対応できたり複数の分野に精通したオールラウンダーなエンジニアをフルスタックエンジニアと言います。フルスタックエンジニアはWebスタートアップに限らずSIerでも活躍できるエンジニアです。
ここではフルスタックエンジニアは全ての技術を習得したエンジニアという意味ではなく幅広い分野に精通しているという意味で使います。
IT業界におけるフルスタックエンジニアを野球の世界で例えるとするならば、走攻守を兼ね備えたどこのポジションでも守れるイチローみたいな人です。 ウィニングイレブンで言えば全てのステータスが99の選手ですね。
なんとなーくIT業界のスキルマップ的なものを書こうと思っていたけど、技術が多岐にわたり、自分の知ってる世界が全てではないのでわかる範囲でさいきょうのフルスタックエンジニアを書いてみます。
- ネットワークエンジニア
- インフラエンジニア
- サーバサイドエンジニア
- アプリケーションエンジニア
を対象にインフラからアプリまで幅広い知識を持つフルスタックエンジニアのスキルを書く。マネージメント系のスキルは除き開発系のスキルだけを書きます。
作るものはWebアプリケーションなどに限定しないので細かく分けずアプリケーションエンジニアとしています。
さいきょうのフルスタックエンジニア
さいきょうのフルスタックエンジニアは端的に言えばIT業界で使われている全ての技術を習得し全て使いこなせます。
具体的にはハードウェアやサーバ、ネットワーク、ストレージの物理環境と仮想化、OS、ミドルウェア、プログラミング言語のそれぞれに対して可用性・機密性・完全性を考慮しスピード感をもって設計・構築(実装)できる深い知見があるエンジニアです。
インフラ、サーバ、アプリに分けてそれぞれについて書きます。
インフラ
データセンターのファシリティや電源、回線、配線、ラック、物理サーバ、ストレージ、種々のネットワーク機器(L2Switch、Router、L3Switch、LB、FW)、ネットワーク・ストレージ・サーバの仮想化に高度な知見を持ち設計・構築・運用ができます。
端的に言うとありとあらゆるインフラの技術を習得しています。巷では技術の化身と呼ばれています。
Webのインフラエンジニアと呼ばれる L3のVLANの設定、仮想化されたネットワーク機器の設定をするだけのエンジニアがインフラエンジニアではないんじゃないかな~と思っていたりしますが、ここに書いてあるような仕事をする人はネットワークエンジニアと世間一般では呼ぶらしい。
SDN、NFVなど、ストレージ・サーバ・ネットワークにおけるありとあらゆる物が仮想化されており年々複雑になっていますが運用が簡単になったりAWSのようなサービスが生まれてきています。仮想化されインフラがソフトウェアで制御されたことにより複雑になろうがなんだろうが基本的にフルスタックエンジニアには関係ありません。
個人的にインフラ側の技術はHypervisor、VXLANあたりが好き。
参考資格: Cisco CCIE
サーバ
LinuxなどのOSがインストールされたサーバ上でシステムに必要な様々なミドルウェアの環境を設計・構築・運用ができ、OSの設定もすべてすることができます。
ただ動作させるだけでなく、アプリの特性に合わせ適切な設定やパフォーマンスチューニングができミドルウェアに対して深い知見を持っています。
ミドルウェアの種類は多岐にわたりさまざまな処理を行うことができます。昨今のシステム開発で使われているミドルウェアはRDB、NoSQL、Cache、Webサーバ、分散処理、ストリーミング処理などがあります。
さいきょうのフルスタックエンジニアなので全てのミドルウェアをソースコードレベルで理解しているのが当たり前です。
フルスタックエンジニアは膨大な量のトラフィックや大量のトランザクション処理のような難しい課題を好む傾向があります。
参考資格: LIPC
アプリ
インフラ、サーバの特性を生かしプログラミング言語を駆使しソフトウェアを高速に開発する高度な開発能力が必要です。また、開発能力に加え開発行程についても深い知見を持っています。
アプリ側は各種プログラミング言語を駆使し、ミドルウェアやアプリケーションFrameworkを使い高速にアプリケーションを開発する必要がありますが既存のフレームワークが気に入らず自分でフレームワークを作ってしてしまうようなスキルも持ち合わせています。 Webアプリケーションやスマホアプリが多く最も技術の入れ替わりが早い花形の仕事です。CI/CD、UI/UXに対しても高いスキルを持っています。
みんなの仕事を効率化するようなソフトウェアから、コンシューマー向けのサービスやゲームを開発したり基本的に何でも作れます。破壊的なイノベーションを何度も自ら起こしてしまいます。
まとめ
ITの技術のは入れ替わりが早いため全ての技術を習得することはほぼ不可能ですが、ベースになっている技術が共通だったりするので基礎を徹底的に固めるとよかったりします。新しい技術を習得する方法も技術力だったり、日々新しい技術を習得しようとするモチベーションを保つのも難しかったりします。
1つの分野を掘り下げてプロフェッショナルになるか、複数の分野を広くカバーできるエンジニアになるかまたは両方かいろいろな道がありそうですね。
エンジニアはずーっと勉強だよね。
おわり。