数理的手法を使いやすくするためのソフトウェア開発

科学技術計算とデータサイエンスについて

テクノロジーを民主化するには、ソフトウェア開発の民主化から

グーグルなどの言う「機械学習民主化^1 ^2 が文字通りの意味ならば、彼らが目指しているのは、 多数の機械学習エンジニアが、多数の人々の利益のために、 という理想だと思います。 これに対して、現実では、 少数のエンジニアリングを理解しない人々が、少数の人々の利益のために、 ということが起こりがちです。 このギャップを解消することは可能なのでしょうか?

テクノロジーを民主化するために

民主化といえば、 リンカーンのゲティスバーク演説 ^3

「人民による、人民のための、人民の統治」

のフレーズが有名です。これにならえば、テクノロジーの民主化とは、

「エンジニアによる、エンジニアのための、エンジニアリング」

ではないでしょうか。

リンカーンのフレーズは、フランス革命やアメリカ建国がされる前には、 統治のありかたが、人民ではない貴族や専制君主によって決定されていた、 という問題があったことを踏まえています。 同様に、テクノロジーの民主化がされる前、現在では、 エンジニアリングのありかたが、エンジニアではなく、 エンジニアリングを理解しない人々によって決められがちであること が問題なのだと思います。

ソフトウェア・エンジニアリングを理解しない人々によるエンジニアリング

例えば、日本の家電メーカーには次のような問題があります。

日本経済新聞「日の丸家電、打倒アップルの条件 ソフト重視へ転換せよ」中島聡^14

魅力的なソフトウエアを作り出すための全体仕様(アーキテクチャー)を設計することは、机上だけでは決して不可能だ。シェフが実際の料理を作りながらレシピを作るのと同様に、設計を担当するエンジニア自らがプログラムを書き「作っては壊し」の過程を経てはじめてよいアーキテクチャーを作ることができる。

アップル・アマゾン・グーグルをはじめソフトで勝負をしている企業は、どこもそうした開発体制をとっている。…

一方、日本のメーカーでは自分自身がプログラムを書いたこともない幹部候補生が頭の中だけでソフトを設計し、プログラミング作業は子会社に丸投げしている。…

ここで問題なのは、プログラミングを理解しない人が、 ソフトウェアの設計をして、プログラミングのありかたを決めていることです。 こうして、生み出されるソフトウェアに競争力がないために ^4 、利益率が低くなり、エンジニアの待遇は悪くなっています ^5

そして似たような問題は、伝統的な計算科学分野にもあります。

というのは、この分野では、ソフトウェア開発のありかたを決めている人々は ハードウェアや計算科学については十分に理解していますが、ソフトウェア開発についての理解は、 フォートラン時代のままで不十分だからです。 それでも、新しい計算科学分野では、さすがにFortranは廃れつつありますが、 伝統的な分野では、昔から残っているレガシーコードに慮って、 今でもFortranのような古い言語が使われることが少なくありません。 そして、フォートラン時代の手法を使ってシミュレーションを開発することになります。 その結果、近代的なプログラミング言語とスタイルで開発している アメリカとの競争において不利になるという問題が生じるのです。

ソフトウェア・エンジニアリングを理解する人々によるエンジニアリング

日本に比べて、 アメリカのソフトウェアが高い競争力を持っているのは、 ソフトウェア開発者を理解している人々がソフトウェア開発のありかたを決めているからです ^4

そこには、プログラミングを理解しない人が、 プログラミングのありかたを決めてしまうという愚行はありません。 また、フォートラン時代のプログラミングしか知らない人が、 開発言語や手法を左右することも少なくなっています。

このようなソフトウェア開発の民主化によって、 機械学習民主化も実現されつつあります。

具体的に言うと、 昔は、機械学習のアプリケーションプログラムを書くときに、 CやC++でゴリゴリと書いていたのが、 まず、C++Pythonで包み込んだライブラリやソフトウェアフレームワークが普及して、 scikit-learn ^6 などで python スクリプトによって楽にアプリを開発できるようになりました。 そのうちに、TensorFlow ^7 , Chainer ^8 のようにニューラルネットワーク記述のための 領域特化言語が埋め込まれたフレームワークが出てきて、更に楽になりました。 そして、今では、クラウド機械学習 ^9 ^10 ^11 が提供されて、 アプリ開発はプラモデル並みの気楽さになりつつあります ^12 ^13

これに対して、日本の計算科学分野では、ソフトウェア開発が民主化されていないので、 FortranやCでゴリゴリと書くしかなく、 そのような前近代的なプログラミングスタイルには、 オブジェクト指向フレームワークや領域特化言語を使うことによる 素早さや楽しさはありません。

このように、ソフトウェア開発のありかたが、 フォートラン時代なのか近代的なのかによって、 生み出されるソフトウェアやテクノロジーの競争力はまるで違ってきます。

数理的手法を民主化する鍵は、ソフトウェア開発の民主化

以上のように見ていくと、アメリカで機械学習や科学シミュレーションといった数理的手法 が民主化されつつあるのは、ソフトウェア開発が民主化されていたからだと思います。 近代的なソフトウェア開発手法や、 ソフトウェア部品を利用するというプログラミングスタイルが広まっていたからこそ、 大勢の人々がテクノロジーのアプリケーション開発に参加することができ、 その利益が大勢の人々に分配されるのです。

対照的に、日本では、数理的手法に基づくテクノロジー分野において、 ソフトウェア開発が民主化されていないために、 ソフトウェアの生産性と競争力は低く、 その利益は小さいままです。

このように、経済的な利益からいえば、 ソフトウェア開発を民主化したほうが、つまりは、 ソフトウェア・エンジニアリングを理解している人がソフトウェア開発のありかたを 決めたほうが、良さそうです。 しかし、日本企業は労働集約型のビジネスモデル ^4 に合わせて組織を固めてしまっているので、 ソフトウェア・エンジニアリングに基づく知識集約型のビジネスモデルに 転換するのは難しそうです。

そんなわけで、テクロジーの民主化についてのギャップは、日本企業では、 なかなか解消されないのではないかと思います。 ただ、個人にはとっては悪いことばかりではないと思います。 仕事のソフトウェア開発には、取り入れられずにいるテクノロジーが、 趣味の開発には、民主化によって、取り入れやすくなっていくのですから。


参考

^1:Quara “Why is it important to democratize machine learning?”

^2:なぜ、機械学習の民主化は重要か?

^3:ゲティスバーク演説 - wiki

^4:gihyo.jp » Software is Beautiful » 第3回 なぜ日本のソフトウェアが世界で通用しないのか

^5:ITエンジニアの地位とは?国別、職種別の年収比較

^6:scikit-learn

^7:TensorFlow

^8:Chainer

^9:Amazon Machine Learning

^10:Machine Learning - Microsoft Azure

^11:Google Cloud Machine Learning at Scale | Google Cloud Platform

^12:Gigazine「Googleが自社で使っている「クラウド機械学習」を一般に開放、こんなスゴイことが簡単にできる」

^13:Cloud Vision APIの凄さを伝えるべくRasPi botとビデオを作った話

^14:日本経済新聞2014/01/15「日の丸家電、打倒アップルの条件 ソフト重視へ転換せよ」中島聡