いまを生きるエンジニア像

Posted by joeartsea on 2013-09-26

現在の情報技術を取り巻く環境を広い視野で見て以下のようにまとめてみました。

※今回は個別具体的な技術やサービスは触れません。それらを利用してユーザへ提供する方法、それらを追いかけて自分のものにする方法について書いていきます。

  • イノベーションが加速している(イノベーションの間隔が短縮傾向)
  • 多分野に及ぶ融合的なイノベーションが起きつつある(起きている)
  • クラウドという大きなエコシステムが形成されつつある
  • ビジネスの急速な変化にインテグレーションが追いついていない
  • 大量のデータから導き出された結果を瞬時にユーザ体験したい

まず、何を以てイノベーションと捉えるかは人それぞれではありますが、クラウドサービスの増加やモバイル端末の普及、更にはビッグデータやオープンデータへの対応など、昨今のエンジニアがカバーすべき範囲が急速に拡がっています。

また、Google Glassに代表されるようなウェアラブルコンピュータや3Dプリンタなど、今後も様々な分野が融合したイノベーションが多数発生することが予想され、将来的に必要な守備範囲が多分野に及ぶことも容易に想像できます。

更に、これらのイノベーションにより形成されつつあるエコシステムの中で、様々なサービスやデバイスを組み合わせたソリューションをエンドユーザへ提供することはもちろん、何を利用し何を利用しないかの判断と自分のコアコンピタンスを見出すための情報収集と取捨選択を行わなくてはなりません。

この取捨選択をする上で必要になるのがインフラやアプリケーションなど各レイヤーに偏らないフルスタックな知識やスキルです。最近はクラウド任せだからと言ってインフラ系技術に疎いとCIやDevOpsの恩恵はもちろん、オープンIaaSやオープンPaaSから予測されるハイブリッドクラウドへの対応にも乗り遅れてしまいます。

また、近年のイノベーションはオープンソースな世界で起きています。そもそも、イノベーションを構成するオープンソースプロジェクトの成果物を検証する環境さえ自ら構築することができないようではスタートラインにも立てません。

更に、最近UX(ユーザエクスペリエンス)で声高に叫ばれている、アプリケーションのユーザ体験への対応も必要でしょう。裏を返せばアプリケーションがユーザ体験勝負にまで成熟したことであり、エンジニアは単に機能を実装するだけでなく常により良いユーザ体験が何か模索しなければいけません。

また、ユーザからビジネスに関するデータを全て吸い上げて様々な判断材料にする要求も増えています。そのために各クラウドサービスやオンプレミスに散らばったデータをかき集めて、分散処理にて短時間で大量なデータを処理して結果をUIへ迅速に提供しなければいけません。

そして、そこから導き出される判断にシステムは柔軟に対応することが求められます。それは往々にして短期間での改善・増設を求められ、確実に成果を得られる品質でなければいけません(ここで言う品質とは単に不具合の少ないシステムという意味だけではなく、システムの目的をどれだけ果たすことができるかのバロメータも含みます)

以上のように、いまを生きるエンジニアに求められる知識やスキルは加速度的に増えていて、具体的に業務として携わっていなくても「やらないといけないのでは?」という危機感を何となく感じている人も多いと思います。

では、これらの要求に対応していくために何かセンターピンになるようなものはあるのでしょうか?

上記のことを考えていく中で一つの共通点が見つかります。それは「反復」というキーワードです。

まず、情報収集と取捨選択を行うための検証ですが、情報収集自体は正に毎日の反復作業であり、収集した情報を検証することも情報収集ほどの頻度ではないにしろ繰り返される作業だということが解ります。

次にUXですが、優れたUXを提供するアプリケーションはA/Bテストを行ったり操作ログを分析するなど、優れたUXを見出すための反復型検証を行っていることが多いようです。

最後にユーザのデータ分析要求やシステムの変更要求に継続的に答え、更にその品質を向上させていくためには、同じく反復型開発にて効果測定と改良を繰り返すことが最も確実な方法です。

そして、それぞれの分野に対して何も恐れることなくインフラ構築やアプリケーションのリリースを繰り返して行くためには、ビルドツールやプロビジョニングツールをはじめとする自動化技術の導入が必要不可欠です。

この「何も恐れず」ということが肝心で、必要なサーバ環境や必要なアプリケーション構成を何度も何度も気軽に再構築できる環境と、その信頼に足るリリース版の存在を常に保証するユニットテスト環境を持ち、それらを極限まで自動化した体制を持つことにより安心を得ることが出来ます。

上記のような体制を構築することで以下のような効果が生まれます。

  • 未知のツールや技術の検証スピードが向上する
  • 効果測定などに必要な本番環境と同様の環境を瞬時に構築できる
  • プロジェクトに同じルールや体制を強制できる
  • コミット毎の自動テストにより不具合を早めに排除できる
  • 更にフレームワークを用いるなどして変更に強い開発ができる

つまり、いまを生きるエンジニア像は、上記の個別具体的なイノベーションに対応しているかどうかではなく、反復を継続的に行っていける体制を持ち(または作る気がある)その体制を維持していけるエンジニアです。

実際、上記のように偉そうに語っておきながら私も個別具体的には着手していない分野もあります。しかし、反復開発を行う体制を構築し日々維持しています。

最後にこれらのことを「誰かがやってくれる」という時代は終わりつつあります。

旧態依然とした企業でエンジニアとして働いていると気付かないですが、誰かがやってくれているインフラ整備・ミドルウェア整備・デプロイ&テスト環境構築・フレームワーク整備・etc… は普遍的なことではありません。

これまで技術的または物理的な限界があったから分担されていただけのことであって、その限界が解消された時にエンジニア1人で開発することは可能ですし、私はとっくに限界は突破されていると思っています。