ガジェット通信

見たことのないものを見に行こう

プログラマの評価を上げるには、どうすればいい?遠藤侑介・まつもとゆきひろ・増井雄一郎☆鼎談3

DATE:
  • ガジェット通信を≫

日本のプログラマの社会的評価は低いのか

──最近は、企業のビジネスとして、低学年からのプログラミング教育に力を入れるところが出てきていますね。親がそういうキャンプに子どもを通わせると。

まつもと:プログラマって、ずっと「オタク」とか呼ばれてわりとさげすまれてきたので、その風潮を変えるきっかけにはなるかも。

親御さん、いわゆる、社会的評価を持つ立場の人が、自分の子どもにプログラマになってほしいと思って連れて行くというのは、大分イメージが変わってきたんだなと。

その点については、プラスに思っているんですよ。もちろん、連れて行ったからプログラマになるかどうか、わかんないんだけど(笑)。

増井:中高生がそこに参加すると、大学生のお兄さんとかお姉さんのメンターがいる。そういう大学生とかをかっこいいと思うらしいですよ。

──プログラム書ける人がかっこいい。問題を解決する人かっこいいみたいな、そういうイメージの転換は起こりつつあるんじゃないでしょうか。

まつもと:ぜひ起こっていただきたいとは思いますね。

増井:ただ僕は、社会的イメージが低いというのを、自分が感じたことはないんですよね。まあ、僕が気にしないたちだからというのはあるんですけど。

まつもと:社会的イメージ低いと思いますよ(笑)。

増井:低いと思います?

遠藤:僕も情報科学の仲間の中にいるうちは、そんなふうに感じたことはないですね。ただ、製造業のような業種だと、やっぱりプログラミングするよりも、機械を作ったり、ものを売るほうは偉いという感じは、あるかもしれない。

まつもと:僕も、某メーカーに行ったときに、ソフト書くのにちょっと大変なんで、メモリを増やしてくださいって話をしたら「メモリ増やしたら、1個あたりの単価が何百円上がるけど、それでいいのか」って、「おまえが給料の固定費だから」っていうことを聞いたことがある(笑)。

増井:固定費扱い(笑)。そういう意味では、遠藤さんがこの本を書いたことが、プログラマの評価を高める方向に働くといいですね。

まつもと:とある記事で言語別にプログラマの給料を調べたものがあって、一番高いのは、Scala、2番目がPythonで、3番目に何かがあって、4番目がRubyでした。ああ、Rubyは4番目かと思ったんだけど、そのRubyプログラマの平均年収が380万と書いてあった。4番目に多いとか、喜んでられなくなっちゃった(笑)。

※参考:プログラミング言語別☆年収データからトレンドを掴む

増井:それって国内の話ですよね。友だちが今ニューヨークで、スタートアップをやっているんですけど、現地で優秀なエンジニアを雇おうと思ったら、やっぱり、2500万から、3000万ぐらい払わなければ見つからないという話をしていました。

だから、日本のエンジニアでこっちに来たい人が誰かいないか、探してくれないかみたいな話がありましたね。

まつもと:そういう意味で言うと、アメリカではエンジニアの評価は高いんですね。

増井:はい、すごく高いですね。

まつもと:というわけで、やっぱり年収が高くないとだめなのね。社会がこの職業をどう評価するかという話は、やっぱり、年収である程度的確に測れると思うので。そういう意味で言うと、プログラマの評価はまだまだ低いなあという。

増井:それは、だから、トップが上がらないと下が上がらないって。まつもとさんにもぜひ「Pagani Zona HH」みたいな億単位の超高級車に乗っていただいて、レーシングチームを持ってもらうぐらいになってもらわないと。「ああ、プログラマも、あそこまでいくと、レーシングチームを持てるんだ。俺も頑張ろう」という人が出るんじゃないかと(笑)。

まつもとそこまで資産はないなあ。あーあ。

「Rubyの速度を3倍にする」とは

──プログラミングそのもの話題で、何かもっと話したいことがあれば。

遠藤:そうですね。最近、Rubyの速度を3倍にするって言ったんですか。

まつもと:はい、言いました。

遠藤:それでですね、最近、よく速いと主張する言語で、スタートアップ時間が、めっちゃ遅い言語が多いんですよ。そうしないでほしいなと思っていて。プログラムをテストするときって、スタートアップ時間がすごい重要。あと、普段のプログラミングやスクリプティングするときも、スタートアップ時間を犠牲にするというのはよくない選択肢ですよというのは、ちょっと言っておこうかなと(笑)。

まつもと:実際に、私自身も毎回30秒も待つといらいらするので、多分、そういうことにはならないと思いますよ。

遠藤:Juliaとか、Scalaもですけど、Scalaはコンパイルがめっちゃ遅くて、Juliaは、いくつかのライブラリをロードするだけで、めっちゃ時間がかかるんですよ。

まつもと:そうだね、LLVMで全部コンパイルするもんね、あれね。

だからLLVMを実装に使うというのは、Rubyではあんまりよくない選択だとは思っています。LLVMだとすごくでかい外部プロジェクトに依存することになるので、怖いんですよね。
それともう一つ、LLVMって、Rubyがサポートしている全部のCPUをサポートしていないので。それを考えると、まあ、実装としてあんま向いていないなと思って。

遠藤:なるほど。

まつもと:あと、ビットコードってさ、型情報ががっちり入っているので、最初にどのぐらい型解析できるかというとこにかかっていて、実は、正直、Rubyだとできないので。

遠藤:そうですよね。

まつもと:結局、全部何かポインタで渡すみたいな話になって。で、そうすると、全然、速さのうまみがないというところもあって。で、そういういくつかの理由があるので、まあ、ちょっとLLVMは使わないなというふうに思っているけど。

遠藤:なるほど。でも、こないだの情報処理学会のインタビューで、新しい言語を作れというアジテーションをしたじゃないですか、まつもとさん。

結構、僕はそれを受けたほうなんですけども。まあ、でも、LLVM使わないでスクラッチも使わないとなると、超つらいじゃないですか(笑)。

まつもと:まあね。だから、できないと思って20年ほったらかしたんだけど、年末の「Streem」書いたときは、未完成のプログラミング言語のシンタックスチェッカーだけ作ったのね。そしたら、勝手にバズって。

増井:誰かが先に実装しましたよね。

まつもと:勝手に「AST作るコードが書けました」「じゃあ、このAST実行します」とかって、どんどんパッチが来て。何か勝手に動いてる(笑)、僕は何もしていないのに。

増井:だってね、YaccのGrammar rules書いただけで、コードができあがることってないですよ。

まつもと:普通はないよね。ありえん(笑)。

増井:だって、まず動くものがあって、その改善が高速に進むというのが、オープンソースの基本ルールじゃないですか。

まつもと:僕も去年まではそう思っていたよ。

増井:そういう、動くものを、まず、出すことが大事だって。僕の場合も、PukiWikiもずっとそうやってやっていたので。Streemはそういう常識を覆しましたもんね。

まつもと:そもそも公開するつもり全然なくて、自分のとこだけにソースがあると、ディスクが壊れた時に全部失われる。それはまずいと思って、じゃあ、とりあえずGitHubにおこうと。

だけど、まあ、将来、オープンソースで公開するって決めてんだし、別に、プライベートリポジに、おかなくてもいいやと思って、で、YaccのルールをGitHubに置いたのね。

そしたら、何か目ざとい人が見つけて、「Matzが何か作ってる」って。「Hacker News」か何かに「新言語」とか書いてあって。はっ?って。

増井:逆に言えば、まつもとさんはもうこっそり言語作るのが、ほぼ難しくなってきているわけですね(笑)。

まつもと:確かに、プライベートリポジで使わない限りは、こっそり言語作れない。

でも、まあ、楽しくていいけど。みんなで作ったほうが(笑)。

増井:Rubyは、少なくともできた当初は、パフォーマンスを犠牲にして、純粋なオブジェクト指向を採用するというので、結果的には成功したかなと思うんですね。

まつもと:パフォーマンスを気にしないでというのは確かですよね。

増井:少なくとも当初は。ただ、最近はパフォーマンスを、それこそ3倍速くするとかという方向になってますけど。

まつもと:なんだけど、だからといって、速くするために仕様を曲げるみたいなことはしたくないので、仕様の範囲内をどうやって速く実現するか、別で考えるというプロセスですよね。

新しいプログラミング言語の可能性

増井:でも、今から新しい言語作るとしたら、何を犠牲にしてもいいですかね。

まつもと:一つ思うのは、完全性みたいなの捨ててもいいかなとか思っている。というのは、ある種の言語って、モデルがかなり限定されてて、任意のプログラム書くのは大変だけど、ハマると簡単みたいな言語っていうのは、昔から結構あって、awkもそうだけど。

awkの場合だと、最初から与えられたパターンというか言語構造があるので、それでは書きづらいというような点で言うと、決して汎用プログラミング言語ではない。でも、これから作るとき、そういう感じのものって、結構、出てくるんじゃないかなとか思っていて。

増井:もう少し何かに特化したかたち。

増井:そうか、80%の用途に使えるものではなくて、60%とか、50%とか、もっと絞っていくんですね。Rubyに換わるものというのは、そういうイメージで語ってるんですね。

まつもと:いや、何でもいいんですよ、とにかく。プログラミング言語って、どんどん変わっていくシチュエーションに対して、新しいアイデアが出てきて、切磋琢磨しながら進んできた傾向があるでしょ。

例えば、マルチコアが出ました、マルチコアで動く言語が出てきました、あるいは、UNIXが出ました、UNIXのうえで特化したような言語のほうが支配的になってきました、とか。

Webが出ました、Webの上で動く言語が伸びていますとか、そういうような。周りが変わっていく状況に応じて、それに対して強みを発揮できる言語が伸びてきたというのは、当然、あるわけ。

そういう感じで言うと、これから出てくる、何かのパラダイム変化。何でもいいけど、IoTでもいいし、あるいは逆に、Hadoopみたいな感じの、分散環境で強みがある言語かもしれない。

そういうような、ある特定の環境に対しての強みを出すことによって伸びる、というのが、言語の正常な進化の方向じゃないかなというふうに思っているのね。

遠藤:なるほど。

増井:逆に、例えば組み込みがどんどん小さくなってきているので、どんだけ細かいとこで動くというのはあるでしょうね。

まつもと:とかね。

増井:メモリの使用を、逆に最小限にするかとか。まあ、Cを越えるのは難しいと思いますけどね。

まつもと:まあ、そんな感じのものもあるかもしれないし、小さいデバイスで動くんだけど、アセンブラじゃなくて、もっとましな……。

増井:もう少し高級な書き方ができる。

まつもと:というふうなアプローチもあるかもしれないし。つまり、プログラミング環境の変化に応じて、言語が伸びるというのは、過去にもあったことなんですよ。

数値計算が伸びたときは、FORTRANだったけど、数値計算じゃないところだったら、LispやCが伸びたとか。あるいは、事務処理用途ではCOBOLが伸びたとか。

Webが台頭する直前にはJava、PHP、Ruby、JavaScriptが登場して、あれ全部95年生まれだからね。

で、そういうようなタイミングで出た言語っていうのが、場所と狙いがちょうど合った言語というのが、次、伸びるというのは、当然起きると思っているんだけど。

遠藤:なるほど。要するに、言語も、今から作る言語は、最初からこういう分野を狙うというのがあったほうがいいということですかね。Rubyって、最初、それがなかったですよね、実は。別に最初からWebを狙ってたわけではなくて。

まつもと:全然。

増井:だって、そのとき、Webがこういうふうになるとは誰も思っていない。

まつもと:まあ、世の中にはあったらしいけどね。だけど、自分自身が使っていないから、わかんないよね。なんだけど、結局、そのWebのサーバーサイドが、UNIXサーバーがほとんどになる。

Rubyを作ったときは、当然、UNIXで開発してて、そのUNIXが台頭したというのもあるし。それから、WebのベースになっているHTTPみたいなプロトコルって、結局、SMTPとか、そういうテキストプロトコルの流れをくんでいるので、そういうテキストプロトコルが強いというのがRubyの強みでもあった。で、それがそのまま継続したというのもあるし。

たまたまRubyが強かった、テキスト、UNIX、ネットワークプログラミングのあたりが、全部、Webにつながったという流れがあるのね。だいぶラッキーだったとは言えるね。

遠藤:なるほど。いや、これから出てくる言語というのは、どこを狙うということばっかり考えてしまうんですよね。要するに、何か作ろうかなと思ったときに、何に使うのがいいのかなというところから考えてしまう。その一方で、いきなり可能性を絞らずに、汎用的なものを作ったほうが、面白そうだなと思うんだけど。

増井:言語仕様としては汎用的なんだけど、例えば、分散環境にすごく特化しているというのとかはある。

まつもと:言語そのものは、別に今までと違うわけではないんだけども、それを補完するライブラリがあれば、特定用途を直接支援できるようになる。そういうものだったりすると、伸びるかもしれないですね。

増井:言語そのものよりも、今って、結局、コミュニティがないと言語は育たないので、言語設計というのは、コミュニティまで含めて考えるべきなんじゃないかと思います。

IDE(統合開発環境)も、実行環境も、言語を作る人が全部ある程度設計しないと流行らないような気もする。もちろん、コアの部分の設計がきちんとしていれば、あとで誰かが作ってはくれるんだけど、そういう余地を残しておく的な話はありますね。

遠藤:以前から何となく言語を作りたいなと思っていたことがあって、まつもとさんのインタビューを読んで、うおう、とやる気になったんだけれど、自分が全部やらなきゃいけそうだから、大変だなと。

Rubyも最初の半年、Hello worldが動くまでは、すごく苦しかったって話を聞きました。僕はそれに耐えられる気がしないので(笑)。

増井:いや、あの本書けたから耐えられますよ。

まつもと:そうきっと遠藤さんなら耐えられると思うよ。

関連レポート

第一弾・超絶技巧プログラミングはなぜ面白いのか
第二弾・プログラミングは、何歳から始めるべきか?

【超絶技巧初級テク】ソースコード中のデータを限界まで詰め込もう!

遠藤さんのように、超絶技巧テクニックを駆使したプログラミングを楽しんでみたい!という方のため、CodeIQ事務局では言語不問の初級問題をご用意しました。ぜひ、腕試ししてみてくださいね!

正解者の中から抽選で●名に、遠藤さん・まつもとさん・増井さんのサイン入り本をプレゼント!(要確認)
締切:2月10日(水)AM10:00まで
⇒挑戦は、こちらから

ITエンジニアに読んでほしい!技術書・ビジネス書 大賞2016

翔泳社「ITエンジニア本大賞」とのコラボ問題。正解者の中から抽選で人気の技術本をプレゼント!

2016年1月17日23時59分までに挑戦していただいた正解者の中から、抽選で1名様に「ITエンジニアに読んでほしい!技術書・ビジネス書 大賞2016」で選ばれたプレゼン大会参加本(技術書部門)をすべてプレゼントします。

遠藤さんの著書、『あなたの知らない超絶技巧プログラミングの世界』(技術評論社)もCodeIQ推薦本として掲載されていますので、ぜひ清き一票を!

⇒ ☆☆挑戦は、こちらから!☆☆

プレゼン大会参加本(技術書部門)は2016年2月上旬頃に発表予定
ITエンジニアに読んでほしい!技術書・ビジネス書 大賞とは?

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。

TOP