直交する技術から複数のものを学ぶ

一年前に CNET でインターネット時代のエンジニアの価値という記事を書いたのですが、それと関連する、先週 Binary 2.0 カンファレンスや PofEAA 読書会に行って来て、感じたことを書いてみたいと思います。

まず、Binary 2.0 カンファレンスに行って来て感じたことというのが、先日ちょっと述べたとおり、ソフトウェア開発の世界は多様化していて、それぞれのレイヤの間で断絶がある、ということ。断絶というとちょっとネガティブな印象があるので、それぞれ違うレイヤというかカテゴリの技術の関係を、直行する技術カテゴリ、とでも言ってみます。

Binary 2.0 カンファレンスでもうひとつ発見があったのは、ローレベルレイヤを極めているバイナリアンは、どことなく数学的にコンピュータにアプローチすることに長けている人たちというイメージだったけど、それはちょっと違うということ。もちろん、それに長けた人は多いわけですが、必ずしもそれが必要かつ十分条件じゃないんだなと。たとえばメモリ上にあるプロセスのアドレス空間を調べて livepatch を当てるという話がありましたが、その実行に必要なのはカーネルやOSの挙動に関する知識であり、バイナリの知識であり、数学の知識ではないんだなと。

一方、そういう数学的にコンピュータにアプローチすることに長けた人たちはどういう所にいるかというとのをある方に質問してみたところ、「machine learning 一般?」という答えが返ってきました。音声処理、言語処理、ロボット、画像処理などだそうです。

話は変わり、PofEAA読書会に集う方々は、業務アプリケーション開発において設計を中心に行っている人たちが多いのですが、案の定読書会にいくと周囲の人たちの知識に圧倒される自分がいます。バイナリアンな世界に比べると普段やってることに近いレイヤなので、まだ理解できる話は多いのですが、それでも分からない話、知らない話が結構多くてとほほ、となることもしばしば。

他方、そんな PofEAA 読書会の飲み会でみんなと話していると、業務アプリケーション開発の世界と僕らのようなウェブサービス開発の世界はやはり直交しているという話にもなります。

あと、最近そんな技術レイヤと直交しているんだけど、ひとつ重要なレイヤが確立されつつあるなあと思うのが、ウェブにおけるユーザーインタフェースプログラマの層。はてなだと id:wanparkid:kambara あたりが得意とする層なのですが、フレームワークがどうしたこうしたというレイヤからみるとかなり近い位置にあるとは言え、必要とされる技術要素とか作りこみの方法論とかを見てると、これはやはり別の層なのかなという気がしています。

そうやって直交する技術カテゴリ、技術レイヤっていうのを考えていくと色々出てくるのですが、結論はそこじゃなくって、そのレイヤを二つ以上またがって知ってるとすごく価値があるんだなあと感じたという話です。

たとえばユーザーインタフェースプログラミングが出来て、ウェブサービスの開発手法に長けていると、37Signals が作るような新しいタイプのアプリケーション開発が可能になるし、バイナリアン且つ数学的アプローチに詳しいと、Google のような企業で真価を発揮できるでしょう。ウェブサービス開発に詳しく、バイナリアンな人は、自分で作ったサービスにローレベルレイヤのテクノロジーでスケーラビリティを持たせることができます。ウェブや Web APIアーキテクチャに詳しい人で開発手法を知ってる人は、自分で考えた仕様を使って実際にそれを具体化することができる( で、Web 2.0 だ! :P )...などなど。

CNET で記事を書いたときは、文章が書けるエンジニアとか、営業ができるプログラマとかそんな例を挙げたわけですが、同じエンジニアの中でもこれだけ領域が多様化してくると、その中から複数のものをピックアップすることで、自分を差別化することができるんだなと思った、というのが結論です。

もうひとつ、面白い話。おそらくライブラリやフレームワークに頼ってウェブアプリケーションを作っている人は、「技術的には他人が作ったライブラリやフレームワークを使ってるだけだ」とそれを引け目に感じることがあるかと思います。先の質問に答えてくれた人は「数学的には他人が作った数式やアルゴリズムを使っているだけだ」とそれを引け目に感じることがあるということを言っていました。そして彼らはいつか自分で Rails のようなフレームワークを作れるようになりたいと思い、彼らはいつか自分で優れたアルゴリズムを考えられるようになりたい、と思うのでしょう。この両者はとても似ていて、面白いです。

先の結論から行くと、それができるようになると同時に、もうひとつ別のカテゴリの技術を身につけることで、飛躍することができるんだとも思います。そのもうひとつ別の技術が、いま持っている技術と近いほうがいいのか、遠い方がいいのか、需要があるものがいいのか、未開拓の分野のものがいいのか、それは組み合わせのバランスなんでしょうね。