読者です 読者をやめる 読者になる 読者になる

狐に騙され覚書

あぁこれ便利だなってことを忘れてもいいように覚書。主にプログラミング言語主体ですよ。

WEBアプリケーションエンジニアが新しい技術を学ぶということ

職業としてのエンジニアになってから 3年が経ったので、主に WEB業界に興味のある方々を対象に、新しい技術を学ぶことについて思うことをつらつらと書いていきます。

その前に

せっかく読んでいただく方の時間を無駄にしないように、定義と対象を書きます。

定義:新しい技術

本稿における「新しい技術」とは、現時点で その人が自在に扱えない技術 のうち、人生の中で 相対的に短い期間で習得可能 なものを言う。

※1「自在に扱える」や「相対的に短い」とは個人の感覚の話になるので、従ってここでいう「新しさ」は個人の感覚に依るものとなります。

対象とするエンジニア

世の中には何種類かのエンジニアが存在します。 例えば技術を鉛筆に例えると、鉛筆を使って本を書くことが専門の人がいたり、木を削って鉛筆を作ることが専門の人がいたり、鉛筆で書いたものを消す消しゴムを作ることが専門の人がいたりします。 ソフトウェアの世界でも同様に、大衆向けアプリケーションを作って多くの人の利便性を追求する人がいたり、アプリケーションを作るためのプログラム言語やフレームワークを開発する人がいたり、はたまたエコシステムなどのミドルウェアを開発する人がいたりします。

表題に挙げた「新しい技術を学ぶことの意義」ということを考えるにあたり、この違いを無視するには差異が大きすぎるので、本稿では「大衆向けアプリケーションを作る人」を対象とします。

なぜこれを書こうと思ったのか

僕個人の、それから会社の技術的方針を示す意味合いが大きいです。 なので、ここに書いてある趣向と異なる人たちを否定しようとかそういう意図は一切ありません。

本編:新しい技術を学ぶということに対して、思うこと

道具箱に入っている工具は多い方が良い

鉛筆を使っていくうちに、芯先が丸くなって書きにくくなったとします。 その時に、道具箱に入っているものがナイフしかなければ、それで削るしかありません。 ナイフはもちろん、他の用途にも広く使える大変優れた発明品ですが、鉛筆を削るのに最適とは言えません。

技術の世界で言う機械学習はまさにそんなメタファーを持ちます。 工学モデルとしてのフィードフォワードニューラルネットワークは任意の(※2)関数を近似できることが知られている非常に強力なツールです。 このニューラルネットワークの中間層(隠れ層とも)を何段も積み重ねた深いネットワーク(DNN: Deep Neural Network)は、 Google などのリーディングカンパニーが示す通り、非常に強力な効果を持ちます。

しかし解こうとしている問題が単純ならば多くの場合、すぐに思いつくソリューションに比べてコストを多く払うことになります。 そのコストと天秤に乗せるのは、次の節で述べる行使の目的です。

※2 厳密には連続である必要があったり有界だったりする必要があります。wikipedia を参考文献とするのはアレですが・・ ref. Universal approximation theorem - Wikipedia

技術の行使には目的が伴う

(本稿で想定する)技術の目的はあくまでユーザーの文化への寄与です。 ユーザーの目的を達成するための経路に乗っていない技術選択はするべきではありません。 この経路を設計する上で必要となるのが、前節で示した道具箱の中身です。 もし道具箱の中身が多様性で溢れているなら、経路選択はより柔軟に行なえます。

ここで注意しなければならないのは、経路は必ず 目的点から 論理展開されていることです。 持っている 道具から 辿っていった目的点への経路は、必ずしも最短とは限りません。

例えば機械学習という道具を持っていたら、四則演算は解くことができるでしょう。 しかし、目的が四則演算であれば、当然ながらそんな大層なツールは不要です。 ただし、そこで機械学習を用いることにより、エンジニアの採用が捗り、 結果として開発が早く進むといったストーリーが描けているのであればその技術を採用する価値はあるかもしれません。

あくまでも、目的が何なのか、そのためにどういう経路が描けるのかをすりあわせておくことが重要と考えています。

新しく手に入れた道具はそれまで持っていたものよりも輝いて見える

消しゴムがすり減ってきて新しく買ってもらったら、古い方はまだ残っているのに使わなくなってしまった、という経験はありませんか? 僕は経済学に明るくないですが、同じものを使い続けているとその限界効用は逓減するので(※3)、新しいものに飛びつきたくなるのではないでしょうか? エンジニアは、システムが完成(※4)することで効用を得ている部分が少なからずありますから、ことエンジニアに関しては限界効用逓減の法則で説明できそう(?)という気がします。

ですが今言及した効用はあくまでも個人の効用の話であり、組織としての効用でないことは注意しなければなりません。組織としての効用はユーザーの体験や文化への寄与、営利団体で言えばその結果として得られる収入に大きく依存します。なので、技術を採用する立場にいる人は、新しい物にバイアスがかかっているという前提の上での、公正な評価、決断をするべきです。

※3 とテレビで林先生がおっしゃっていました ※4 完成とはなんなのかという議論は一旦置いておきます

周りに人が多いと道具を振り回す時に気をつけないといけない

そうは言うものの、組織が大きくなると密度が高くなります。 隣の人との距離は近づき、腕を上げただけで隣の人にぶつかってしまうこともあります。 そうすると徐々に、新しい道具をもらって試すという行動が、個人のときとは比べ物にならないくらい重いものになります。

メタファーばかりで分かりにくいかと思いますが、具体的に言えば、 クラウドサービスを軽く使ってみたいのに申請が必要だったり根回しが必要だったりと、そういうことです。

そういう制約条件の中で生き残っていくのも非常に有意義で、それを楽しいと感じる人も多いことと思います。 ただ、それが窮屈だと感じる人は、技術に対して理解あるスタートアップへの転職をオススメします。

そんなわけで

弊社ではエンジニアを募集中です。 https://corporate.nicogory.co.jp/recruits/engineer

書いてない職種やスキルセットでも、有益であると判断すれば採用させていただく可能性はありますので、お気軽にご連絡ください。

twitter(個人) https://twitter.com/_c_hase

まとめ

(特に法律周りの)文化を変えたい、そのためにはアンテナを広く持ち、新しい技術を取り込みつつもその時々にあった最善の選択でシステムを構築したい!という方を募集中です。 最近オフィスから徒歩30病のところにレストランビルができたので、まずはランチでも。 http://www.gems-daimon.com/