アルゴ屋さんの仕事の範囲

昨日、会社でメールが回ってきたのだが、うちの部署で研究開発されたアルゴリズムを商品に搭載する際にプログラムレベルで書き直しになる部分が大量にあったということが起こったそうだ。これに対してソフト開発全体を仕切る役員からうちの部署に対して品質レベルまで考えて開発を行うよう注意が来たそうだ。それによりうちの部署でどこまで開発・保障するかの議論になったようだ。
まあ簡単に言えば、研究部門でどこまで商品化に携わるべきかという話。研究部門は研究に徹して商品化は完全に切り離すべきという意見と研究内容に絡む部分までは商品化まで行うべきという二つの意見がぶつかることになる。どちらも一長一短がある。前者は研究に集中できるという利点がある一方で実際に作る人が別ということで研究内容が再現できない可能性があるし後者は研究開発者と実際に作る人が同一人物なので十分な性能保障が出来る一方で研究以外にも力を削がなければいけない。
とはいっても研究分野や商品レベルによって大きく変化するだろうから私の実際の内容である画像認識技術とその応用ソフトウエアを考えてもらえればいいだろう。もっと具体的な例を挙げれば、例えば顔認識のアルゴリズムを考えるのとそれをデジカメに乗せるという役割とか。
個人的見解だが私は圧倒的に後者である。つまり研究者自身が作るべきである。なぜなら、前者の欠点が致命的だからだ。普通のプログラマに高度な画像認識アルゴリズムを実装できるまでに理解できるのかと。確かに時間をかけてじっくり話し合い、そして仮実装でアルゴリズム再現の確認、そして作りこみを行っていけば確かに可能だとは思う。しかし明らかに非効率的だろう。それだったら最初からアルゴリズムを理解している人が作りこんだほうが早いに決まっているし、アルゴレベルでの品質は高くなるだろう。もちろん逆にソフトレベルの品質は劣るかもしれないがしかしそれも開発者本人の意識の問題で、普通のプログラマがアルゴを理解するハードルとアルゴ開発者がキレイにプログラムを書くのでどちらが大変か?といわれれば考えるまでもないだろう。
・・・とまあ考えているのだが私の周りの人もどうやら同意見っぽい。しかし会議の議事録を見る限りはアルゴに徹したいという人もいるようだ。そんな人は本当に自分のアルゴリズムを正確に伝えられる自信があるのだろうか?無理があると思うんだけどなぁ・・・。
まあ、作りこむといってもそこまで完全である必要もないと思う。とはいえ現状は役員がぶち切れてもおかしくない酷さだ。ドキュメントとサンプルソースを渡して作ってもらうというのが今の主流っぽいがそのサンプルソースの酷さが格別。数百行に渡ってメイン関数にベタ書きで変数名は暗号の領域、珍しく関数でモジュール化されているかと思えば一文字グローバル変数の羅列で関数の規則性は不明、コメントは全く無し。それが普通だとか。実装する子会社ではもう有名らしくて「あの部署のソースはドキュメントを理解しても解読不能」と言われているらしい。ちょっとでもそれなりに気を使って書いていればそこまでは言われるわけが無いので本当に全く読んでもらう側のことを考えずにプログラムを書いているのだろう。
実際にうちの部署の責任範囲がどこまでになるかはわからないがしかし今の酷さを改善する必要はあると思う。実装まで責任を持たないにしてもそれでももうちょっとコーディングに対する意識は持ってもらいたいものである。