求められる人財像 ~フルスタックエンジニアについて考える~

求められる人財像 ~フルスタックエンジニアについて考える~

10年ひと昔とはよく言いますが、ITに関しては殊更進歩やコモディティ化が早い、その中で今後何を目指すべきかという選択肢に対する道標になればと思います。 なお、内容については一部独断と偏見が入っておりますが、ご了承ください。

私は開発畑の人間です。

皆様、こんにちは。IT教育で禄を食むこと幾星霜、気がつけば15年も経ってしまいました。私も洩れなく新入社員だった時期があったわけですが、入社後しばらくして弊社で扱っていた ネットワーク、OS管理、Java の三分野のうち、どのトレーニングを担当するかという最初の選択がありました。

ネットワークなんて形の見えないものはイヤ!自分の管理もできないのに、きっちりした対応が必要なOSの管理なんて分不相応!クリエイティブで成果物も十人十色のシステム開発関係の Java がいい! 誕生日もなぜか一緒だし!という安直な理由で、私はJavaを生業とすることを選択しました。

Java技術の一般化の波にもまれ。。。

入社当時、Javaはまだ6歳になったばかり。巷にエンジニアの数も少なくコースが開催されれば受講者2ケタ、満員御礼は当たり前。コースキャンセルなんて目の当たりする機会なんて無いほど、教育部署は弊社的に売り上げや技術に関して突出する花形の部署でした。

、、、というのも束の間、世の中そんなに甘いものではない、平家物語の一説にもある通り、まさに盛者必衰の理を垣間見ました。Javaの教育は巷の教育ベンダが自社開発のテキストで実施を始め、新入社員研修はおろか、専門学校、大学、高校とプログラミングの素養を育てる教育要綱の低年齢化も手伝い、わずか数年のうちに受講者数は大幅に減少し、次の技術を追い求めることが必要になりました。

斯くいう私も、プログラミングだけではなく、オブジェクト指向分析・設計、Javaシステムの運用管理、ビジネスプロセスの統合と管理等、いろいろとJavaまたはシステム開発に関する周辺技術に関係するコースを実施できるようにしてきました。

雇用や講師の評価として、技術的に進むべき方向性の模索

そんな私も30近くなり、いわゆる中間管理職になったのですが、外部講師の調達や自分の部下の評価をどうするか、諸々考える必要が出てきました。また、海外のトレンドを情報取集し、弊社で提供すべき技術やコースを考える上での『あるべき姿』を考える必要に駆られ、フルスタックエンジニア という造語を目にすることになりました。

フルスタックエンジニア

スタックという言葉自体はITにおいては非常にポピュラーな用語ですが、コンピュータシステムは様々な技術要素の階層(スタック)で構成されており、今日では各構成技術に関しては顧客の費用感や戦略によってベンダ製品やフレームワーク、オープンソースと様々なものを組み合わせたり、入れ替えたりとビジネスの成長に伴い、構成要素もフレキシブルに変更することができるようになっているのは皆さまもご存じのことかと思います。

フルスタックエンジニアという言葉そのものは、単一の技術に対して精通しているエンジニアより、コンピュータスタック上の技術について2つ、3つと理解の深い分野を持ったエンジニアを指します。

要は一粒で二度も三度もおいしい、様々な顧客要求に様々な側面で対応できる スーパーエンジニア です。

その昔、LAMP(Linux/Apache/MySQL/PHP)エンジニアという言葉がありましたが、今はMEANスタックでしょうか。というと技術技術した話になってしまうので、今回はもう少し視野を拡大して考えてみたいと思います。

フルスタックキューブ

フルスタックエンジニアの必要なことって

そのようになれるかはさておき、私自身が思う フルスタックエンジニア は構成要素の単純な上下関係(X軸)をカバーするのではなく、競合製品の種類(Y軸)、要件定義、分析、設計、実装、運用管理等のシステム開発のライフサイクル(Z軸)の 三次元のスタックを一つでも多く習得する 必要があるかと思います。人目を憚らずに命名するとすれば、フルスタックキューブ とでも言いましょうか。

エンジニアの力量は千差万別、得意分野も専門とする製品やシステムにおけるライフサイクルもまちまちとは思いますが、適合する領域が多ければ多いほど、様々な場面で融通が効き、つぶしが効くエンジニアかどうかを客観的に測れる のではないかと思います。

欧米ではどのような評価を?

ITに関する技術の大半は米国シリコンバレーから、と思い、日本は数年後ろを歩いている、と言われますが、拙い英語で調査してみると、技術者に対してかなり高額な年棒での募集があることが分かります。日本は総合職やPM職に重きを置くのに対して、欧米は個のプロフェッショナルとしてのスキルに重きを置く傾向があるように思います。ただ、単一スキルでの募集はほぼ無く、そのスキルが複数スタックにまたがると、年棒換算で$100,000~$150,000の案件が多くヒットします。(妥当な金額かどうかは不明ですが、日本よりは厚遇と感じます)

実際ショッピングサイトのようなものを構築したい、その陣頭指揮を執るためには、

  • ハードウェア(クラウド)の選定
  • OSの選定、管理
  • ネットワークの設計といったインフラ知識
  • 必要なミドルウェアの選定、管理
  • RDBMSの選定やデータベース設計
  • フレームワークの選択と
  • 上位レイヤにおけるアプリケーションの設計や実装
  • 全体に対するセキュリティの実装

と、非常に多くのスキルが必要であることが分かります。

当然一人で行える業務量には上限がありますが、複雑な顧客要件や複合的な問題に対して一人が何役かこなせるほうが、顧客とのコミュニケーションも円滑になり、顧客要求を実現する速度も加速できることになるでしょう。

世の中はDevOpsへの移行真っ只中?

ところ変わって、DevOps という言葉を耳にしたことはあるでしょうか。顧客やユーザのニーズを早々に取り込みリリースしていくために、開発サイドと運用サイドが協業するための文化的なプロセスです。アジャイル開発手法にも代表されるように、少数精鋭にて顧客ニーズへの迅速な対応も単一スキルを持ったエンジニアの集まりでは実現できず、やはりいくつかのスタックに対する横断的なスキルセットが必要不可欠です。

業種にもよりますが、情報システムのあるべき姿とは、顧客ニーズの変化に対し俊敏に対応することができ、ビジネスの成長に対して下支えをするシステムも最低限の工数で成長できるアーキテクチャや体制が求められています。特に、SNSやスマートフォンに代表されるようなエンターテイメント系のリリース頻度には目を見張るものがあります。

この傾向は今後他分野にも展開されていき、変化に対応できないプロセスで運営しているSierは一部を除いて淘汰されていくことが想像できます。

で、結局どうするのがいいのでしょう。

フルスタックになろうが、DevOpsを実現するための技術を習得しようが、技術はあっという間に陳腐化、コモディティ化し、数年もすれば技術市場の様相は大きく変わることが想定されます。技術をメシの種にしている以上は、随時技術を仕入れ、磨き続ける、自己学習し続けられる ことこそが、シンプルかつ最大のスキル なのではないかと思います。

幸い便利な世の中になり、大いなる好奇心と、ちょっぴりの英語力もとい、Google翻訳を駆使することができれば、各技術を触ってみる、習得するのは造作もありません。継続し続けるにはその技術を好きになることと周辺知識にも関心を持つこと、これに尽きるでしょう。日々忙しい生活を送られているかとは思いますが、SNSやらスマホゲームに興じる暇があれば、各分野のエバンジェリストのtwitterを眺めているだけでも効果はあるでしょう。

自分に今備えられている技術を客観的に評価する

では、自分が現在技術スタックのどこに対してどのような優位点 があるのか、客観的に知るための術あるのでしょうか。

偏りはあるかと思いますが、調べてみました。

中にはそのまま転職活動に直結、なんてものもあります(paiza)。デベロッパの方は腕試しに挑戦してみるのも一つかもしれません。

いずれにしても自身のスキルが定量化できる仕組みがあるのは励みにもなりますし、業務領域が限定された環境で長年業務に従事されてきた方には耳の痛い話ですね。

自身を定量化してみることに臆病なのでは何も始まりません、チャレンジしましょう。

でも、自分の時間も大切にしたいですよね。

効率よく技術を習得するにはやはりベースとなる地盤知識をしっかり固めて、差分をうまく吸収していける習慣を身に着けていきたい ところです。また、日本に顕著な就業形態と感じるのですが、きっちりと役割分担や責務のローテーションを行い、誰か一人倒れても他のメンバーでカバーできる、そんな文化やチーム作りが肝心かなめなのではないかと思います。

記事は、予告なく変更または削除される場合があります。
記載された情報は、執筆・公開された時点のものであり、予告なく変更されている場合があります。
また、社名、製品名、サービス名などは、各社の商標または登録商標の場合があります。