連載
» 2009年10月27日 00時00分 公開

【写真】天才プログラマに聞く10の質問(5):Rubyを最大63%高速化した中学生は超多忙! (2/3)

[荒井亜子,@IT]

Pythonの美しさに一目惚れ。プログラミング言語遍歴 【言語編】

竹内氏 すると、金井君が最初に覚えたプログラミング言語はC?

金井氏 そうです。実は小学生のときに、プログラミングに興味がわき、日本語プログラミング言語「なでしこ」に挑戦しようとしましたが、性に合いませんでした。プログラムの日本語といつも使っている日本語とのギャップに苦しんで止めました。きちんと勉強をすれば使いやすい言語だったのかもしれませんが。

竹内氏 なるほど。日本語は自分が普段から使っている言葉だから、それをプログラムというちょっと日常生活と離れたもので使うのに違和感があったわけね。日本人にとってプログラムは、英語のような記述の方が思考回路が切り替わるので受け止めやすかったりする可能性はある。プログラムが日本語だと本質的なところで違和感を覚えやすい。金井君みたいな感覚はあり得ることです。

金井氏 日本語プログラミング言語では、微妙な助詞の使い方でも普段の感覚で書くとエラーになってしまうことがあるので。

竹内氏 それは日本語独特の深い問題です。金井君は日本語を普通に使いこなしているので規則に縛られたくないわけね。自然言語に近づくほど処理系が複雑になるので、プログラミング言語にはどうしても規則が生じるんですね。

竹内郁雄氏「Rubyは文法規則の量が多いが、文法は複雑にしても、もともと気ままな人間に合わせて自然な言葉に近づけるよう文法が工夫されている。そこが、Rubyのプログラマに受けがいい理由」 竹内郁雄氏「Rubyは文法規則の量が多いが、文法は複雑にしても、もともと気ままな人間に合わせて自然な言葉に近づけるよう文法が工夫されている。そこが、Rubyのプログラマに受けがいい理由」

竹内氏 中学1年の春に始めたCはすぐに馴染めたの?

金井氏 そんなことはないです。ポインタにつまずき、(中学1年の)秋まで悩んでいました。でも、分かってしまえば一瞬なんですよね、ポインタって。

竹内氏 その、ポインタが分かったときの瞬間は覚えている? どこかに頭をコチっとぶつけたとか!

金井氏 春からずっと悩んでいたのですが、秋の文化祭行事で忙しくなってきたので、一旦考えるのをやめ、文化祭に没頭していたんです。文化祭が終わった後、再び考え始めたら「分かるじゃん!!」と、すぐに理解できました。

竹内氏 よくある話だ! これはとても重要です。デバッグ作業でもそうですが、すごく悩んだ後にひとっ走りして帰ってきてシャワーを浴びているとポッと答えが浮かんだりする。ただしこれは十分に悩んでおかないと駄目なんですよ。金井君は十分に悩んだわけね。

金井氏 はい。

竹内氏 世の中のポインタでつまずく人たちにとって、教訓になるいい話です。「犬も歩けばポインタにつまずく」というくらい、入門者にとってポインタはよっぽど太い棒みたいですね。確かに、ポインタはやらしいです。

 プログラミング言語の中では、ポインタが全然出てこない言語もあるので、その意味でCは低レベルな言語といえます。低レベルなだけにコンピュータの仕組みを理解するには勉強になる。Rubyの処理系の下手なところを見つけるには、低レベルなことが分からないとなかなか難しいですから。

 で、ポインタが分かったその後は?

金井氏 ポインタが分かって、『猫C』を終えました。それまでCUI(Character User Interface)を作っていたのですが、先輩たちがGUI(Graphical User Interface)を作っていたのを見て、僕も作ってみたいと思い、「Win32 API」という魔物に手を出してしまいました。使ってみた結果、「何て面倒くさいことをしなければならないんだ! こんなの書いていられない……」と思ったのですが、ふと、先輩が作っている様子を見たら、Visual Studioでフォームをデザインしていたんです。僕は「これだ!」と思い立って、C#に転じました。

今年の夏休みに書いたレポートは「任意の3次元ベクトル周囲での3次元回転行列の導出」。でも実は幾何が苦手なのだとか 今年の夏休みに書いたレポートは「任意の3次元ベクトル周囲での3次元回転行列の導出」。でも実は幾何が苦手なのだとか

竹内氏 マイクロソフトの人が聞いたら興奮しそうな話だね。Cyanの林拓人君(参考:「Cyanを設計した高校生、5カ月で5つの言語を習得」)もJavaは色気がないといって、CyanをC#で作った。JavaとC#を両方使った人は、C#の方が楽でいいと思う人は結構います。C#に転じたのは中学2年?

金井氏 中学2年の初めです。チャールズ・ペゾルト(Charles Petzold)氏の、『C#によるプログラミングWindows』をひたすら読み続けました。

竹内氏 かなり分厚い本だね。

金井氏 本を読んで、タイマーなど自分が日常的に使う簡単なツールを作り続けて、C#にどんどんのめり込んでいきました。

 今年の冬、パ研でセミナー合宿があったのですが、そのときに先輩からRubyについて手ほどきを受けまして、スクリプト言語に挑戦しようと思いました。しかし、RubyではなくPythonを始めたんです。

竹内氏 それはどうして?

金井氏 Rubyの「do〜end構文」の見た目が生理的に嫌なんです……。一方Pythonを見てみると、インデントがとても奇麗ではないでしょうか!! 僕はプログラムを読むとき、(あたかもスクリプトエンジンやコンパイラみたいに)正確に構文解析をしてコードを解釈するのではなく、インデント構造や改行など視覚的にコードを読み解いていくので、見た目の美しさは非常に重要だと思っているんです。Pythonに一目惚れをしてから、Microsoft .NETの機能を利用できるためIronPythonを勉強しました。

竹内氏 do〜end構文が嫌いという感覚はなかなか面白い。長たらしいのが嫌なわけね。キャンプの参加が決まるまではRubyの勉強はしていなかった?

金井氏 はい。Rubyは文法の規約は多いですが、読もうと思えば読めてしまう言語なので。Rubyはひたすら“グーグル先生”に頼って読んでました。

竹内氏 Rubyはいっぱい本が出ているじゃない?

金井氏 きちんと学ぼうとするものは本を買いますが、ちょっとリファレンスしたいものにはグーグル先生が便利です。

竹内氏 Rubyは自らきちんと学ぼうという気は少なくともなかったのですね。

金井氏 キャンプの決定通知がきてから、「やばい!」と焦ってオライリー本を買いました。

竹内氏 あはは。C、C#、Python、Rubyと、一種のプログラミング言語遍歴だよね。面白い。すごいと思うけど、普通中学生だったら学校の勉強がたくさんあるじゃない? ましてや進学校でしょ?

筑駒中の数学は大学レベル 【授業:数学】

金井氏 うちは変わった学校で、一応教科書はあるのですが、先生が選んだ教材や先生が作ったプリントを使う授業が多いんです。特に、数学の授業は先生の興味中心に走っていますね。

――筑駒の授業の実態が明らかに!

(編注)金井氏が鞄から数学の授業で使っているというプリントの束を取り出し、見せてくれた。代数や暗号の問題が載っていた。出典を見ると、「京都大学の入試問題」と書かれたものもあった。

東大では数学科だった竹内氏。「この数学のプリントには感激した」 東大では数学科だった竹内氏。「この数学のプリントには感激した」

金井氏 いま、RSA暗号を実際に解くためにフェルマーの小定理をやっています。先生は、「いま分からなくても高校でもう1回やるので気楽に楽しんでやって」とおっしゃっています。

竹内氏 (プリントを見て)……お〜〜〜、これはすごい!! 普通、高校でもやりません。代数に、双曲線暗号……。RSA解読のためのフェルマーの小定理は事実として提示されるだけ?

金井氏 いえ、証明もあります。

竹内氏 本当だ、あるある! すごい学校だな。こういう話を聞くと、中高一貫はとってもいいと思うな。高校受験がないだけでものびのびいろいろなことができる。

「国語は点は取れるが嫌い」
――独自の作文メソッドを編み出す! 【授業:国語】

竹内氏 ほかの学科はどう? これだけプログラムが書けるなら、国語は苦手ではないでしょう?

金井氏 国語は得点的には得意なんですが、嫌いなんです……。特に、作文が。小学校のときに、原稿用紙を1枚渡され「自由に書きなさい」といわれ、何を書けばいいのか分からなかった経験がトラウマになっていて、作文や文章題に対してはずっと苦手意識がありました。

 中学入試を乗り越えるためには、問題集の解答や作文法に関する本を読んで、研究しました。問題に対する正しい答えや、うまいいい回しの文をひたすら集めて、頭の中でテンプレート化し、「こういう問題に対してはこういう順序で論理を立てていけば丸がくる、少なくとも三角はくる」というやり方で解答を突き詰めました。

竹内氏 白紙に書けといわれて書けなくても、何かについて書けといわれれば書けるでしょ。白紙に書けといわれると選択肢が多すぎて書ける人ほど書けなくなるんです。ガラガラの電車があって、座るまでに迷うことはない? あれと同じ。1つしか席が空いていなければそこに行けるんです。テーマがあれば書けるなら、作文は苦手というよりむしろ得意といえます。逆に、書くべきことが多すぎるという悩みですね。

 選択式問題は、どうやって克服したのですか?

金井氏 設問者の立場に立って考えることに徹しました。例えば、4択問題だったら、設問者は正解にしたい答えがあって間違いの選択肢を3つ作ることが多いんです。間違いの選択肢を作る方法の1つに、例えば、文章にまったく関係ないが世の中的に正しいことを入れるというものがあります。こうした設問者の考えを問題の作り方の本などを読んで研究し、設問者の意図を想像しながら正解を選んでいました。

 作文も同様です。学校ごとに問題に特性がありますから、過去の入試問題をさかのぼって、「家族愛」「友情」といった頻出主題を探すんです。試験で課題文を読んで、主題が読み取れなかったときには頻出キーワードで近そうなものを入れると部分点がもらえることが多いです。ですから国語は嫌いだけど得意になりました。

竹内氏 問題の作り方を覚えたのは大収穫です。これはプログラムを作るときにも使える戦略ですね。ユーザーという不明のものをシミュレートする発想です。それはつまり、傾向と対策なんです。ユーザーが自分と同じ感性を持っているとは限らないですから。金井君には、ユーザーの感性を傾向と対策的に知るセンスがすでに備わっているといえます。

 林拓人君と同じで、文章へのこだわりがある。2回続けて若い人からそういう話を聞けてハッピーです。金井君は自信を持っていいと思いますよ。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。