「動くものを作る」という呪縛

前回の記事では自分の経験に基づいてどうやってプログラミングで食うに至れたかについて書いたが,ここでずっと不思議に思っていたことがある。

soudai.hatenablog.com

ここでも言及されていたのだが,

もし、質問者がすでにプログラミングとしての基礎、言語はなんでもいいけどを書くことができるなら次は「動くもの」を一つ作ることをお勧めする。 

この「動くものを一つ作る」という,10年以上前から言われ続けていたワードだ。私に関しては,仕事を始める前には,自分が果たしたい目的を満たすようなものはたくさん作ってきたが,人に見せられるクオリティのものを作れたためしがない。前回の記事から,職を得るまでに1人で作って一応完成したものを列挙すると

  • 2004年(工学系学部1年):mixiからスクレイピングして今で言うソーシャルグラフを取ってきて,ネットワーク構造の特性を分析するソフトウェア。既存のソフトウェアだと取れる特徴量が限られていたし,恐らくRにはあったがゼロから覚えるのが面倒くさかったので数式から実装した。例えばレコメンデーションエンジンの基礎的なものを作れたとしたら,その手の会社にアピールできただろうが,関心はなかった。
  • 2009年(社会学修士1年):iOSで写真を回りながら撮っていくと合成して1枚のパノラマにするアプリケーション。当時画像処理やコンピュータビジョンに対する認識が欠けていたので,自動で特徴点をマッチング→アフィン変換という方法などをとれなかった。球体に貼る形にするとうまくいくらしく,既存のアプリでそのような実装があった。本アプリではUIでカバーする方針をとり,前に撮った画像を右端に半透明でオーバーラップさせることで,それっぽいものを人が目で見て判断して貼り付けるという方針をとった。ただ,作った段階で面白くて満足してしまい,大量に存在するカメラアプリの中で自分一人で完成度を高める自信もなく,頓挫。
  • 2010年-11年:(社会学修士2年):半球ミラーを上から撮影した画像を,OpenCVで処理して全方位画像を作るアプリケーション。それ自体は悪くないし,RICOH THETAVRコンテンツなどを見るに,需要はそこそこあったように思う。しかし,そもそも半球ミラーを東急ハンズで買ってくる必要があるアプリケーションは敷居が高いし,落とし所がなかった。結果としてどうせならもっと高度にしようということで,3Dで半球のオブジェクトにマッピングしなおし,さらにARマーカーを使うことで手で操作できるようにして卓上でパノラマを見られるようにした。しかし,そもそも人間の視覚に対して不自然なものだったので,有効性を実験して学会発表の草稿を提出した。学会発表は当日体調を崩したので行けなかったのだが,その日東日本大震災が発生した。

 プログラミングを仕事にしている今なら,どれに対してもそれなりの落とし所は考えられる。ソーシャルグラフからのマイニングなんて枯れた技術だし,データを持ってるところならいろいろ組み合わせたり機械学習をやったりすればそれなりの成果は出るだろう。カメラアプリにしても画像処理の一連の知識はあるし,iPhone XのTrueDepthカメラなどを使えばより幅が広がるだろう。ARも地味にソリューションとして浸透しつつあるので,全方位画像と組み合わせれば情報提示の幅が広がるんじゃないか。当然どれも簡単ではない。しかし良いものに広げていくには何が足りないかはわかる。

 しかし,しかしだ。仕事にする前は全然そこまで思いつかず,中途半端なものを作り続けていた。はっきりいって「人に見せられる動くものを作る」というのはハードルが高かったし,むしろ「動くものを作る」という言葉が呪いのように劣等感を刺激していった。既存のものと比較し,こんなもの人に見せられない…と嘆いていた。

 結局自分がものを作れるようになったのは機会である。Railsで何度も挫折した私も,仕事でLAMP環境でのMVCフレームワークを使った開発に参加したら割とすんなりできた。全方位画像で培った技術は詳細は言えないが仕事で十二分に役立っている。やればできるくらいのスキルセットはあったといえる。しかし,仕事でないとできなかった。

 はっきり言おう。私はプログラミングで仕事をしようとする人に対する「動くものを作る」というアドバイスが嫌いである。それは自身の経験もあれば,人に無責任にアドバイスして不毛だった経験でもある。

 そもそも,「動くもの」というスコープが曖昧である。単に何でも動きゃいいというのなら,Hello World!で良い。そうでないことは明らかで,それ以上のものが求められている。その中で,「動くものを作る」というアドバイスは具体的に何を要求しているかを覆い隠してしまう。

 次に,敷居の高さである。自分で目標を設定してゼロから登頂するというのは,仕事で人から言われたものを作るより難しい側面がある。完成品を作るより,技術自体に関心を持って掘って,未完成でもいいからいろいろ触った痕跡を見せるだけじゃだめなのだろうか。そもそも「動くもの」で見られるものは,動くもので使われているスキル以上のものではなく,関心を持っていろいろやっている人間からしたら氷山の一角に過ぎない。プロダクトに現れない埋もれた技術をどう引き出すかは,今働いている人にとっての問題でもあると思う。

 じゃあある人を採用するにあたってどのように見たらいいかというと,やはりタスクを与えてみることじゃないかなーと思った。元記事ではインターンについて言及されていたが,インターンやバイトの門戸が広がると良いと思う。やばい会社を事前に見つけて逃げることもできるだろうし。