プログラミング言語とソフトの関係性について

#プログラミング言語とソフトの関係性について
　僕は趣味でいろいろな言語に触れている。それぞれにいろいろな考えがあり、作った人の考えがどうやって言語化されているのかに興味があるからだ。Pythonのガッチリとした設計思想やRubyの柔軟性を重視した設計、そしてLispという関数型の元祖と呼ばれる言語。他にもいろいろと触って、調べてみると人間がどうやって世界を記述しているかが興味深く見れる。
　だが、どれだけ設計のよい言語であっても流行らないこともある。それの最たる例がLispであろう。Lispはできた当時から、優れた言語であると尖った技術者たちから太鼓判を押されているにもかかわらず、知名度はとても低い。（これは、経営者や一般的な技術者などの認知度だ。）
　なぜ、このような事態が起こっているのであろうか？
　僕はソフトととの関係が深いと考えている。これを考える時に必要となってくるのが、日本のゲームハードとソフトの関係を読み解いてくいくと関係性がわかってくるだろう。

#セガと任天堂を例にとって

　よくわかるのは、初期のゲーム市場においてのゲームハード戦争だろう。セガがSG-1000と任天堂のファミコンの戦いがあるだろう。SC-3000の設計は簡単に言うと「超高性能ハード」を作ることだった。それに対してファミコンは「安くていいもの」という設計だった。それに加えて、ファミコンには「マリオ」というキラータイトルがあり、この戦争の軍配は任天堂に上がった。
　このことから、考えられることは必ずしもカタログスペックや実際のマシンパワーの差が戦力の決定的な差でないと言うことがわかる。

#では、なぜこうなったのか。
　考えられることは、利用者がすべて「ヲタクでない人」を相手にしているからだ。これは、一般人からしてみたら、「メモリーが10G！」「ハードディスクが大容量！」「今までにない速さが実施できます！」といってもピンとこない。これは車を一般人に売るのにスポーツカーを買わせるようなものだ。
　それなら、遊べるソフトがある場所にお客が流れる。そして、ファミコンは特殊なCPUを使っていて、開発者が理解しづらい設計だった。これを正確に読めたのは何を隠そう前任天堂社長「岩田聡」社長です！つまり、ファミコンのCPUの挙動を正確に読めるのはそのくらいの大天才でない限り、理解をするのが無理なハードだった。（あの頃のハードに高級言語が存在していなかったのも起因しているが）
　この話を一般人に話したとしてもトリビアの一つとして片付けられてしまい、購買意欲を削がれることもない。
　このように、「ゆりかごから墓場まで」よろしく、「ハードからソフトまで」というのがユーザが求めているものである。
#これをプログラミング言語に置き換えると
　この構造はプログラミング言語にも言えることだ。というのも、プログラミング言語をハードに置き換えて考えてみるとなぜその言語が流行ったのかがわかる。
　この例を上げるのに最たるものはRubyだろう。Rubyは非常に優れた言語だ。柔軟性が高く、さまざまな書き方ができる。だが、これだけでは一般人からは「だからなに？」と言われてしまう。そこに来たのが「Ruby on Rails」だ。これをさえつかっておけば、ウェブ全般の作業がRailsの規約どおりに書くことによってなんでも書ける。
　Pythonにも同じことが言える。Pythonは人工知能、機械学習で有名で駅前のそこそこの書店でも本が扱われているほどに有名になっている。
　このように、キラータイトル、使用用途が明確になっているものは有名になりやすくなっていることがわかる。
　一方、Lispはというと、人工知能にも使えてすごい！という評価はあるが、キラータイトルがないのが現状だ。僕の知る限りでは、Lispは宇宙やロボットに進出をしていて局地仕様の場所に重宝をされているという印象がある。だが、一般人の認知度は低い。以前、就活をしたときにLispが好きです、といったら「Lispってなに？」と言われました。
　つまるところ、みんなハードのことや言語のことなどは見てなく、重要なのは「それが何につかえるのか？」というところなのだ。

#では、用途不明のものがすべて不必要なのだろうか？
　もちろんそんなことはない。むしろ重要なほどだ。一見して不必要に見えたとしてもそれはダイヤが原石の時点でどれだけ美しいかを測定するようなものだ。
　ここでも、一例を申し上げましょう。Grimoire.jsというウェブGLのフレームワークだ。これは、WebGLというブラウザ上で使う３Dのフレームワークであり、簡単にウェブGLを使うことができる仕様になっている。これができたのは一昨年くらいのころで、最初に登壇で見せてもらったときにはすごい威力だった。しかも、この作品は国からも一目置かれている存在になっている。
　だが、まだどう流通させていくのかがわかっていない。というのも、仮にブラウザ上で３Dを使えたとしても、一般的に扱われている３Dゲームをしようとするとブラウザ自体が持たないのだ。携帯機器しかわからなかったが、マックスの容量が５MBしかなかった。この容量でネイティアプリのゲームのようにしたら、クラッシュをしてしまう。
　だが、使い方によっては新しい表現の仕方も見えてくるだろう。例えば、リアルタイム通信とガベージコレクションを利用して描画ごとにリアルタイム通信をしておいて、いらないデータを捨てながら描画をすればもしかしたら、ゲームができるかもしれない。そうでなくても、新しいウェブのあり方を発見することができるかもしれない。
　言語だっておんなじだ。まだ使い方がわからないと言って切り捨ててしまうのはもったいない。僕はLispが好きで、よく書いている。だが、あまり仕事で使われているかと言われるとそうではない。仕事はまだ少ない。だが、Lispの表現方法を模索していけば何かがあるかもしれない。可能性を排除してしまっては新しい表現などできるわけがない。

#参考
セガ SG-1000：
https://ja.wikipedia.org/wiki/SG-1000

ファミコン：https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%83%9F%E3%83%AA%E3%83%BC%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF#%E9%AB%98%E3%81%84%E3%82%B3%E3%82%B9%E3%83%88%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9

Grimoire.js:
https://grimoire.gl/

任天堂ファミコン開発秘話について：
https://trendy.nikkeibp.co.jp/article/special/20081002/1019327/

CPU 6502:
https://ja.wikipedia.org/wiki/MOS_6502

CPU Z80:
https://ja.wikipedia.org/wiki/Z80

#参考文献

熱血！アセンブラ入門（アマゾン）：
https://www.amazon.co.jp/%E5%A4%A7%E7%86%B1%E8%A1%80-%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9%E5%85%A5%E9%96%80-%E5%9D%82%E4%BA%95%E5%BC%98%E4%BA%AE/dp/4798051543/ref=sr_1_1?ie=UTF8&qid=1540100963&sr=8-1&keywords=%E7%86%B1%E8%A1%80+%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%A9%E5%85%A5%E9%96%80