大局観を持って働くことの大切さ
この業界にいてつくづく思うのは、「 大局観を持って働く」ことの大切さである。テクノロジは激しい勢いで進歩しているし、業界全体の勢力図や消費者が求めるものも日々変化している。
私がMicrosoftで働いていた90年代はPCがデバイスの主役だったが、今や主役はモバイルデバイスである。インターネットへの接続方法も、電話線を通したダイアルアップからブロードバンド、そしてワイヤレスへとわずか十数年の間に大きく変化した。
インターネット上のビジネスも当初は「ポータルビジネス」が主役だったが、今はソーシャルネットワークからSaaS(Software as a Service )まで、さまざまなアプローチで多種多彩な企業が競争を繰り広げている。
こんな中で「価値を生み出す仕事」をしつづけるためには(つまり「価値のある人材」でいつづけるためには) 、目の前の仕事を着実にこなしながらもそれに埋没せず、同時に世の中の大きな流れに目を向けて、今やっている仕事の意味や、採用しているテクノロジの是非を再評価し続ける必要がある。会社として決めた戦略が、わずか2~3年の間に陳腐化するなどということが日常茶飯事なのが今の時代だ。
良い例が、モバイルプラットフォームだ。iモードが出たてのころにモバイルアプリでビジネスをするとしたら、CHTML[1] で公式サイトを作る選択肢しかなかった。そしてiアプリやBREWの登場でダウンロード型アプリという選択肢が増えたところに登場したのが、Flash Liteを活用した無料アプリを広告付きで提供するというビジネスモデル。そこにiPhoneとAndroidが登場して主戦場がスマートフォンに移った。ここ10年ほどで、モバイルコンテンツの主戦場が4~5回変わったのである。
[1] iモード用に簡易化したHTMLブラウザの設計をNTTドコモに依頼されたアクセスやNECなどが規定した、モバイルデバイス用に簡易化したHTML。米国のワイヤレス業界が独自企画のWAP(Wireless Application Protocol)を採用するのに対し、サブセットとはいえインターネットの標準に合わせた点は評価できる。実際のiモードでは「iモード対応HTML」と呼ばれる、CHTMLに若干修正を加えたものが利用された。
失敗を恐れず素早く軌道修正する
こんな業界でビジネスをするためには、経営者はもちろんのことエンジニアも常に世の中の流れに目を光らせておく必要がある。市場の先駆者になるためには冒険は必要だが、冒険には失敗はつきものである。失敗を恐れず、しかし失敗をしたときは素直に認めてすばやく軌道修正することが大切なのである。
ニコニコ動画で有名なドワンゴは、iモード向けの「釣りバカ気分」の成功でこの業界で頭角を現した会社だが、iアプリが登場したときに出したRPGゲーム「サムライロマネスク」がビジネスとして成功せず、ゲーム会社としての成長戦略に陰りが見えた。そこで現代表取締役会長の川上量生氏は、起死回生の一手として、それまでまったく手を付けていなかった着メロ市場に進出することにより、会社を次のステージまでに成長させることに成功した。
常に新しい技術を吸収する姿勢が必要
この業界で働いていると「忙しくて新しい技術なんて勉強している暇がない」という人によく出会う。私が「どんなに忙しくても、週末に勉強する時間ぐらいあるだろう」と指摘すると、「 たまの週末ぐらいプログラミングのことを忘れたい」と返事が返ってくる。たしかに人生にはバランスが必要だが、そんな人に出会うと「この人はソフトウェアエンジニアに向いていないんじゃないか」と私は思う。
私がMicrosoftで働いていたときはもっぱらC++でWindows用のソフトウェアばかり書いていたが、2000年に会社を離れてから本腰を入れてソフトウェアを開発した環境は、J2ME/DoJa、BREW、Symbian、Flash、iOS、Google App Engine、Node.jsと多岐に渡る。開発言語だけでもJava、C++、ActionScript、Objective-C、Python、JavaScriptと渡り歩いてきたことになる。
もちろん、新しい開発環境や言語に慣れるのには時間も手間もかかる。しかし、「 iPhoneという新しいデバイスが発売され、そこにビジネスチャンスがあるから」「 リアルタイムコミュニケーションサービスを実装するにはNode.jsが最適だから」などのまっとうな理由がある限り、プロフェッショナルなソフトウェアエンジニアとしては、新しいことを勉強することを嫌がってはいけないと私は考えている。
私にとって、この業界で働いていて最も楽しいときは、新しい技術を吸収し、それを活用して新しいものを作るときである。先週も、Node.jsとd3.js[2] を組み合わせると、今までに存在しなかった体験が提供できる可能性があることに気が付き、それを実現するために寝る間も惜しんでプログラミングをした。普段の仕事とはまったく関係がないし、それがどうビジネスに結び付くのかもまだ見えていないが、こんな風に「今まで誰も実現できなかったこと」にチャレンジし続けることが私の一番の楽しみである。
私がシアトルでUIEvolutionという会社を経営していたときに、面接の際に「私はJavaが得意だからJavaでプログラムを書かせてほしい」というエンジニアに何人か出会った。最初はそんなエンジニアも採用してしまっていたが、間違いだったことがあとになってわかった。そんなことを言うエンジニアに限って融通が利かず、かつ自分の頭で問題を解決しようとせず、これまで習得した知恵や経験に頼って仕事をする傾向があったのである。
そんな経験から、エンジニアを採用するときには「どんな開発環境でも言語でも2週間もあればマスターしてみせます」というような鼻っ柱が強いエンジニアを選ぶようにしている。
流行に踊らされずに自分で判断する
そうは言っても、「 Ruby on Railsだ!」「 Node.jsだ!」と目新しいものにばかり飛びつくことは感心できない。特にRuby on Railsが大人気だったときに、Railsファンのエンジニアの何人かと話をしたが、「 なぜRailsがすばらしいのか」をちゃんと説明できない人が多いのには驚いた。
最近流行のNode.jsに関しても同じである。Node.jsのすばらしさは、「 ソケットを開く」というローレベルな部分から自分で設計できるところや、非同期APIを使ってスケーラビリティを上げることができる点にある。それにもかかわらず、わざわざNode.jsの上に「フルスタック」を載せてHTTPサーバを実装して満足しているエンジニアが数多くいるのには少し呆れてしまう。
そんな状況を避けるためには、「 なぜこのテクノロジを自分が勉強する必要があるのか」をしっかりと意識したうえで取り組む必要があると私は考える。「 流行っているから」「 偉いエンジニアが褒めているから」ではなく、自分なりにちゃんと本質を理解したうえで取捨選択をしてほしい。
私の場合、iPhone SDKがリリースされたときにはすぐに飛びついた。ほかの開発者たちが飛びつく前にiPhoneアプリを作ることができれば、先行者利益を得られることが明確だったからである。
一方Node.jsに関しては、存在は以前から意識してはいたが、本格的に勉強を始めたのは今年に入ってからである。理由は、自分でXMPP[3] サーバを作る必要が生じたからだ。そのためにはソケットを自在に操作できる開発環境がどうしても必要で、それにはNode.jsが最適だと思ったのである[4] 。
Windows 8/Windows RT[5] の開発環境に関しては、一応どんなものがあるかだけは目を通したが、まだ本格的な勉強を始めてはいない。iPadアプリの開発経験を活かせば、Surface向けのアプリの開発もそれほど難しいとは思わないが、「 こんなものをSurface上で動かしたい!」という開発者としての強い思いが自然に湧き上がってくるまで待つつもりでいる。Androidタブレットよりははるかに魅力的だが、iPadアプリの開発時間を削ってまでアプリを開発する価値のあるデバイスだとはまだ思えないのである。
出る杭が必要な日本
私がこんな話をすると、「 僕は下っ端のエンジニアだから、上司から言われたものを作ることしかできません」「 私が次のサービスはNode.jsで作ろうと主張しても、上司はまったく理解してくれません」などと言うエンジニアがいるが、私はこれはただの「言い訳」だと思う。
エンジニアの仕事は、単にコードを書くことではない。たとえ自分がアーキテクチャや開発環境を選ぶ立場になくとも、より正しい答えがあると確信しているのであれば堂々と主張すべきである。
最近の日本には閉塞感が漂っていると言われる。その原因の半分は、保守的な発想で、自分が引退するまで会社が存続すれば十分と考えている「逃げ切りメンタリティ」に捕われた経営陣にあることは事実である。しかし、残りの半分は「こんなことを言っても上司には理解してもらえない」「 会社の方針に反対なんかしたら、反乱分子だとみなされる」とおとなしくクビを引っ込めている若い人たちにあると私は見ている。
日本を閉塞状態から脱却させるには、失敗を恐れずに新しいことにチャレンジする若い人たちのエネルギーが必要である。上司の顔色などうかがわずに、思い切って冒険してほしいとつくづく思う。