小俣泰明(TAIMEI)@taimeidrive
NTTコミュニケーションズなどの大手ITベンダーでシステム運用やネットワーク構築の技術を磨いた後、面白法人カヤックでディレクターを担当。その後、2009年4月に上場企業の取締役に就任。2012年8月にトライフォートを共同設立、代表取締役Co-Founder/CTOに就任。スマートフォンアプリ・ソーシャル領域に特化した開発・運営を展開している
連載第4回目もよろしくお願いします。
ベンチャー企業において「技術者」というと、プログラミングをする人を指すケースが多いですよね。そして、ベンチャー界隈の人材紹介でも、圧倒的にプログラマーの募集が多い。
そんな中、採用段階でプログラマー同士が技術力を探り合う際、しきりに行われているのが、「使ってる言語」とか、「○○志向であるか」といった会話です(プログラミングというレイヤーの中の話に終始するケースですね)。
そもそも技術は医療なみにレイヤーが分かれています。プログラミングというレイヤーの中の話にだけ終始するのは、例えるなら内科だけの話をしているようなものです。
当然、医者が何かしらの診療をする際は、外科、眼科、精神科などなど、多くの分野に分かれるわけで……。
ということで、まずは、私なりに考えた「技術レイヤー」についてご説明します。
私見でまとめた「IT技術レイヤー分け」2015年版
From Army Medicine
プログラムの「レイヤー」は高度な医療の現場のように分野が分かれている
■コロケーションレイヤー
■ネットワークレイヤー
■ハードウエアレイヤー
■サーバレイヤー
■ミドルウエアサーバーレイヤー
- ロジック、アプリケーション
- キャッシュ、アクセラレーション
- 分散処理
■データベースレイヤー
(ミドルウエアの一つだが役割が大きいため外出し)
■クラウド/ネットワークサービスレイヤー
(PaasとかIaasとかSaasとか言われるものなど)
- APIレイヤー(世界中のAPIもいわば大きくクラウド連携している領域だと考える)
■サーバサイドプログラミングレイヤー
■クライアントサイドプログラミングレイヤー
(一番企業の影響を受けやすいところ。3D touchとか、Androidバックボタンなど独自機能だがしっかり対応する必要があるレイヤー)
- Web
- スマートフォン(iPhone、Android etc)
- タブレット(iOS、Android、Windows、Kindle etc)
- デスクトップ(Windows、Mac etc)
■UI/UXレイヤー
■デザインレイヤー
■モーションレイヤー
■プロモーション/広告レイヤー
(「これもIT技術?」って言われそうですが、ITスキルによるプロモーション手法が重要な時代。立派なレイヤーと考えます)
■そして全て把握し設計する総合医的なアーキテクトレイヤー
■また全てを把握し安全性を確保するセキュリティレイヤー
■最後に全てを把握し運用を継続させていく保守(監視、バックアップ)、分析レイヤー(データマイニング KPIアクセス解析 etc.)
※IT技術に特化しているレイヤー分けのため、ハードウエアレイヤーはざっくりすぎるものになっています。IT ベンチャー企業は上記それぞれのスペシャリスト(リーダー)を集める必要があります。
エキスパートが仇になるケースもある
話を戻して……。つまり、「プログラミング力だけ」では、優秀な技術者を測る物差しにはならないということです。あるレイヤーでのプログラミングは、それ以外のレイヤーに大きく影響を受けるので。分散設計であったり、それぞれのクライアントプラットフォームへの対応であったり。
実際、他レイヤーへの配慮がないプログラマーが開発を担当する場合、新規事業の開発見積もりが正確なものではなくなることが多いです。正確でない予算を設定することで、投資判断を誤ることにつながりかねません。
もちろん、逆の状況もあり得ます。
成熟した体制を持った会社が新規事業に挑戦しようとして、今まで培った運用ルールの上に乗せることを重視してしまうと、最初から過度な運用システムやセキュリティを作ってしまう。結果として、初期投資コストの増額につながってしまうケースです。
それがあまりに大きくなってしまうと、経営判断にすら影響してしまうこともあります。
運用フェーズでは専門分野のエキスパートに頼ることが大切になりますが、新規開発フェーズだとそうしたチームは開発速度を遅らせ、失敗の要因を生み出してしまうこともあると考えられます。分業がかなり進んでいる企業では、それぞれの専門家を呼ぶ必要があり、新規サービスを作る体制を作ることが非常に難しくなります。
会社組織としても技術分野で分けるのではなく、時に「運用」と「新規」で別けるような体制を意識することが重要ということになります(レイヤー分けでなく、フェーズ分けの組織という意味です)。
大切なのは、運用時のエキスパートと、新規開発時のエキスパートは違うということ。
自分がどちらに向いたエンジニアのタイプなのかを知ることは、技術者として成功する上で重要なポイントだと言えるわけです。
己を見極める術は、レイヤーよりも案外のフェーズごとのタイプを見ること
いわゆる「ギーク」の中にも、フェーズごとにハマる人・ハマらない人がいると心得て
プログラミング言語の言語記法や新規言語、新技術に興味がある人間は、実は「運用系に向いたエンジニア」だと僕は思っています。
言語記法やプログラミング言語自体は、プロトタイプ開発においてそこまで重要な要素ではないからです。
「新技術を使う」ということが、そのまま新サービスの成功率につながるケースは非常に少ない。成功したサービスのコスト削減や品質改善というレイヤーで価値が生まれることはあるでしょうが、“ドッグフードを食べる”ことで新規開発の成功率が上がるという状況は、非常に稀だということを認識する必要があるでしょう。
先を見据えた開発ができていないというかもしれませんが、今はどんな言語で書こうとも、3年もすれば「古い記法」と呼ばれる時代です。どんなに品質の良い技術を使ったとしても、10%の開発コストを削減できるといった話は、恩恵を受ける前に頓挫するプロジェクトとなってしまうケースがあるということです。
ごく稀に、新技術、新言語など新しいものを採用しても過去の手法よりも早く開発できてしまうスーパーエンジニアがいますが、かなりの経験者やほんの一握りの天才でないと起こり得ないと思います。
そういう経験者は新技術への扱い方に慣れており、逆に新旧技術の採用バランスを取るため、こういったケースが起こりづらいのです。
で、運用から踏み込む開発者は、たびたびそういった粗悪(?)だったり、古いプログラミングの面倒を見ることになるので不平を言いたくなる。
でもね、それでいいんです。
運用に強い開発者の「過去を否定する力」が、さらに良い品質のサービスを作りあげることになるので。
現状否定のエンジニアは、運用向きのエンジニアといえます。
では、新規事業開発に向いているエンジニアとは?
コードに対するプライドなくプロトタイプ開発ができるエンジニア、自分の書いたソースを後に否定されて全て削除されても気にならないエンジニア、無理に自作せずライブラリや外部システムを効率よく活用するエンジニアなどですね。
言語へのこだわりや記法へのこだわりが少ないタイプは、バグが出ることも恐れない。
ざっくりとしてしまいますが、一言でいうと度胸のあるエンジニアは新規事業向きのエンジニアだと僕は思います。
目的志向の技術者。手段を悩む時間は最小。常に採用できる技術の把握をしている。そんな方ですね。
あなたも自分のタイプをレイヤーではなく、フェーズで判断して、今後のキャリアに活かしてみてはいかがでしょうか?
■関連の外部リンク