paiza開発日誌

IT/Webエンジニア向け総合求人・学習サービス「paiza」(https://paiza.jp ギノ株式会社)の開発者が開発の事、プログラミングネタ、ITエンジニアの転職などについて書いています。

35歳定年説より怖いフルスタックエンジニアしか生残れない未来とは

f:id:paiza:20140512211843j:plain
Photo by Joi

f:id:paiza:20130918201254g:plain今回のpaiza開発日誌は片山がお送りします。

今後も技術(開発)を中心にエンジニアとしてのキャリアを歩んでいきたいなと考えている方向けに最近騒がれているフルスタックエンジニアとは何か、という事と、何故今後フルスタックエンジニアしか生き残っていけないのか?という事について書いてみました。

■最近よく見かける【フルスタックエンジニア】とは何か?

まずStackって何だろう?、というところで海外の記事などを読むと"LAMP stack"という言葉が良く出てきます。LAMPの場合、OSはLinux、WebサーバはApache、データベースはMySQLプログラミング言語PHP(もしくはPerlPython)という形で組み合わせたものの事を言います。つまりOS、Webサーバ、DB、プログラミング言語の組み合わせ≒積み重ね、なのでStackという事のようです。こういった組み合わせは"Solution stack"と言われます。

f:id:paiza:20140512212217j:plain
Photo by StuartWebster

しかしLAMPは現在では若干古くなりつつあります。WebサーバはApacheだけでなくnginxが選択されるケースも多いですし、データベースはMongoDBやCassandraなどのNoSQLを組み合わせて使う事もあります。プログラミング言語RubyJavaScalaなどの言語や、フロントエンドではJavaScriptがほぼ必須になるなど、色々な選択肢が出てきています。MongoDB, Express, AngularJS, Node.jsを組み合わせた、MEANスタックなども徐々にはやり始めています。


そこでPHPMySQLといった固有の名称ではなく、OS、Webサーバ、データベース、プログラミング、フロントエンドまでを包括する概念として"Full stack"という言葉(時と場合によりどこまで包含するかは異なりますが)が出てきたと考えられられます。

LAMPエンジニア募集という求人は一時期よく見かけましたが、それがフルスタックエンジニアに変わった、と考えるとわかりやすいでしょう。

ただよく言われるフルスタックエンジニアというのはそれだけではなく、コンピュータサイエンスの知識があり、設計やフロントエンド、デザインの領域まで含まれる事もあります。Webサービスの設計製造のすべての部分について一通りこなす事が出来るエンジニア、という意味合いです。

フルスタックエンジニアが必要とされる潮流

では何故このような何でもできる人(フルスタックエンジニア)が求められるようになってきたのでしょうか?

「そりゃ全部出来る人が良いって当たり前な話でしょ」という声も勿論あるでしょう。しかし従来のSIer目線で考えてみると、SIerは設計と製造を分離していますし、保守、インフラチームもいます。つまりSIerにとっては幅広いスキルよりかは、各分野での専門性の方が重視されており、これまでむしろ分業化を進めてきたという歴史があります。(専門性を高めるというより単純化して属人性を排した結果のように思えますが。。)

流れが変わってきた原因としては下記の3点が考えられます。

  1. エンジニアの立ち位置の変化
  2. SIerの変化
  3. 技術のコモデティ化、学習コストの低下


それでは一つづつ順番に見ていきましょう。

◆1.エンジニアの立ち位置の変化

以前こちらのブログで書いた「日本のエンジニア採用で、技術力が軽視される理由」こちらの記事でも同様の事を書きましたが、エンジニアの役割が「業務効率化、コスト削減」から「製品・サービス開発」や「ビジネスモデル変革」に変わったというのが非常に大きいと考えられます。

これはDevOpsの流れにも繋がりますが、システム開発が行われる現場が、受託開発のSIer中心から、事業者、サービス提供者の内製中心へと切り替わりつつあるという事です。事業の根幹をなす開発を外に出していては競争力が失われてしまうため内製化するという流れです。米国ではこの流れが主流になっています。

SIer側で考えると、納品したらそこで開発はおしまいなので、保守メンテナンスを考えずに、取りあえず動くものを作ってさえいれば仕事としてまわっていました。

しかし事業者側で考えると、初期開発の完了がゴールではなく、サービスローンチ後からがむしろ本番となります。ソフトウェアの場合、製造業とは違い素早い製品の改修、継続的な製品の改修が可能です。設計と製造を分離して長期間かけて開発するよりは、スピードを速めて継続的に改善し続ける事が重要になります。

エンジニアに求められる事も、「市場の求めるニーズに素早く到達するための開発」という事になります。分業化しウォーターフォールで開発をするより、小さくスタートして市場とプロダクトをフィットさせる部分に時間をかける、アジャイルやリーンに開発する事が求められるようになったという事です。

こういった環境に適しているのは少人数で素早くプロダクトを作れるフルスタックエンジニア、という事になります。

◆2.SIerの変化

ずいぶん前から言われていはいますが、オフショア、クラウドの登場によってSIerの立ち位置は随分と悪い方向に変化してきています。

こちらについても以前ブログで書いた「日本も米国もSIerは同じ」は本当か?日米SIerの構造的な差とはの中で解説をしましたが、「日本は雇用流動性が低い(プロジェクトが終わっても人が切れない)ため、SIerは人材派遣サービス的な役割として必要」なので、エンジニアの立ち位置が事業者サイドに寄ったからと言ってSIerがなくなるという事は無いと思われます。

しかしSIerは製造業のように設計と製造を分離しているため、製造側にいるSIerプログラマーはスキルがなかなか上がらず、オフショアの低賃金の労働者に仕事をどんどん奪われるという事が本格化してきています。

またクラウドの登場により、スクラッチ開発は下火化して、SaaS等でのカスタマイズ中心に移行していく事になるでしょう。そうなるとSIer内での設計に関してもニーズが減っていくという事が予想されます。

某銀行の巨大案件の話などもありますが、DevOpsのDの字も知らないようなスーツエンジニアの行く末は明るいとは言えません。となると事業側に移ってフルスタック化を目指すか、1次受けのPMになるしかない(開発は出来なくなり、技術で食べていく道を捨てる事に成りますが)でしょう。

◆3.技術のコモデティ化、学習コストの低下

ここ数年でWebサービスを始めるためのハードルは劇的に下がったと言えます。

AWSやHeroku、Windows Azureなどの登場でインフラ関係の構築はハードウェアの話ではなく、ソフトウェアの話に切り替わっていたり、サーバサイドではRailsCakePHPなど、フロントエンドではjQueyといったフレームワークやSass、CoffeeScriptHamlなどの可読性の高い言語の登場、デザイン面ではBootstrapといったように、Webサービスを作るために必要な技術がコモデティ化し、学習コストは以前に比べると劇的に下がっています。(Bootstrapで実現されるクオリティのデザインをエンジニアが0からPhotoshop覚えて、とかやろうとすると莫大な時間がかかりますよね)
これ以外にも上げたらきりがないほどWeb開発を助けてくれるツールが登場しています。

全てを完全に理解しようとすると気の遠くなる年月が必要でしょうが、インフラの構築からアプリケーションの設計、実装、デザイン、デプロイ、運用というフルスタックエンジニアに求められる一連の流れは一人で十分こなせる範囲になってきています。


フルスタックエンジニアじゃないとどうなるか?

今回の記事のタイトルと相反してしまいますが、もしあなたが検索エンジンを作れるとか、機械学習のレコメンドエンジンを作れるというようなレベルで技術的に尖っていれば、余り怖がる必要は有りません。フルスタックエンジニアを目指す必要も全くないでしょう。そのまま是非技術を突き詰めてください。(レベル的にいうとpaizaのプログラミング問題でランクSを余裕で取れて、かつ業務経験がそれなりに長い人、という感じでしょうか。)

しかしそれ以外の大多数のエンジニアは、ここまで述べてきたことを総合すると「今後も技術で食べていきたければフルスタックエンジニアになるしかないという事になります。

今後国内では、サービス開発のコア人材となるフルスタックエンジニアかスペシャリストのみが生き残り、それ以外は自動化されるか、単価の安いオフショアかに置き換わっていくと考えられます。

特定の会社、特定のフレームワークに最適化したエンジニアなどは特に危険でしょう。動作原理を知らずコピペ中心に仕事をしていると、新しい言語やフレームワークに対応が出来ないからです。

現時点でフルスタック化していなくても、Webサービス側、事業者側に身を置いていれば、ある程度周辺領域の技術は身に着けやすい環境なので良いとしても、最悪なのはSIer、受託側で分業化された中で、設計にタッチせずに開発を続けているエンジニアです。

SIerは今後アウトソーシングとしての機能(つまり外だししても良い事業的価値の低い仕事)しか回ってこなくなる事が想定されます。また設計、製造、保守と分業化されているため、事業に貢献するための技術力は身に付きません。一次請けのプロマネを目指せないのならばSIerにいるのは危険でしょう。(ただSIerプロマネだと開発からは遠ざかってしまい、「技術で食べていく」とは言えないと思いますが。。)

■技術で食べていくためにすべきたった一つの事

f:id:paiza:20140512213406j:plain
Photo by Thomas Leuthard

技術で食べていくためにすべき事は、

 「勉強し続ける」技術を身に着ける事

これに尽きると思います。勉強する技術、ともいえるかもしれません。好奇心を持ち続け、勉強し続けられるか? これは日本が高度経済成長期を脱してしまった今、どの職業にもいえる事のようにも思えます。家に帰ったらプログラミングは一切しない、所謂サラリーマンエンジニアは今後生き残る事は出来ないでしょう。

フルスタックエンジニアを目指すのであれば、一つ一つの技術を覚えこむのではなく、そもそも何故それらは実現できているのか?裏側で何が起きているのか?という大元のコアな部分を理解する事が重要です。個別事象をすべて覚えていく事には限界がありますが、コア部分を理解出来ると学ぶ速度はぐっと上がるでしょう。

一見回り道のように思えるかもしれませんが、エンジニアをやっていてコンピューターサイエンスを学んでいない人は、そのあたりを学んでみる、というのが一つの道ではないかと思います。paizaのプログラミング問題でいうと、少なくともランクB、出来ればランクAが取れるレベルです。
(サービスを作る、という面においてはザッカーバーグも専攻していたようですが、心理学を学んでみるなど、開発技術以外の事にも興味を持つと更に視野が広がると思います)


■まとめ:二つ以上の専門分野を持とう

インドや中国といったオフショア先から見て給与水準の高い日本は、長期的に見るとそれらの国のエンジニアよりも高い価値を生み出していかないと職を奪われる事になります。

サポートエンジニアのような、現場に行って日本語でコミュニケーションしないと成り立たない地域性のある職を見つけるというのは一つの方法でしょう。ただし開発の現場からは離れる事になります。

日本国内でそれなりの給与水準で開発を続けていきたいのであれば、モノバレント(単能工)からポリバレント多能工)へ転換していくしかありません。SIerはいわゆるI型人材のモノバレント。(下記図のような特定分野スペシャリストは殆ど居ないと思いますが。。) 今後はポリバレントのT型人材ないしはN型人材でないと生き残れない時代に成るでしょう。

■人材累計タイプ
f:id:paiza:20140513105124g:plain
縦は知識、経験レベル、横は分野です。N型がフルスタックエンジニアのイメージに一番近いでしょう

N型人材は二つの専門分野をもち周辺領域もカバーしている事を表します。二つの専門分野を持つというのは単純に二つの事が出来るだけでなく、「二つの専門分野の間に立って物事を考えられる」という新たなスキルを手に入れる事でもあります。またカバーできる領域が広いと、物事を決める際のコミュニケーションコストも下がるため、開発スピードも単純に上がります。一見器用貧乏に成ってしまいそうですが、実は二人の専門家を相手に一人で勝てる可能性が高い領域なのです。

具体的な例で言うと、SIerのPMの方々は「コードなんて書けなくても設計は出来る」とよく言います。しかし運用に耐えうるシステムは、コードが書け、運用したことのある人でなければ設計出来ない、というのは事業者側から見れば当たり前の話です。設計と製造の専門家二人と、一人のフルスタックエンジニアだとすると後者の方が明らかに生産性が高いのです。

IT/Webの世界は変化が非常に早いため、どうサバイバルしていくか?という観点からも特定技術に偏らず幅広く経験を積みつつ、二つ以上の専門領域を目指す事が重要と言えるでしょう。

『最も強い者が生き残るのではなく、
 最も賢い者が生き延びるでもない。
 唯一生き残るのは、変化できる者である』

チャールズ・ダーウィン

ダーウィン→上記の言葉にも有りますが、エンジニアの場合生き残るのは「学び続け変化できる者」という事に成るでしょう。(※ 5/19 調べてみたところダーウィンはこのような事は言ってないようです。Leon C. Megginson というルイジアナ州立大学経営学の先生だった人の言葉ではないかとの事です。)

ちなみに35歳定年説は現在では崩れつつあります。今でも35歳以上は選考が厳しくは成るものの、フルスタック系の人であればpaizaからも35歳以上で技術者として転職している方が多く居ますし、paiza運営事務局にも先日38歳のフルスタックエンジニアが入社して活躍しています。

■自分のスキルレベルを知る方法

フルスタックエンジニアの話をしておきながら、paizaではまだプログラミングの領域しかカバーしていませんが、コンピューターサイエンスの基礎力や、テストケースを想定できるかの力(テストコードを書く力)などが問われる問題をpaizaでは出題しています。自分のプログラミング力を客観的に知りたいという方は是非チャレンジしてみてください。

http://paiza.jp

今後paizaではフルスタックエンジニアとしての力を測ったり、学習できるようなコンテンツを展開していきたいと考えていますのでご期待ください!



paizaオンラインハッカソン! Vol.2 「女子大生とペアプロするだけの簡単なお仕事です!」
2014/4/16〜2014/5/14で開催中です!


プログラミング入門講座|paizaラーニング

PHP入門編Ruby入門編Python入門編Java入門編JavaScript入門編C言語入門編C#入門編アルゴリズム入門編