プログラミング少年。 [2009年10月29日(Thu)]
http://jibun.atmarkit.co.jp/ljibun01/rensai/genius/05/01.html
中学生が、Rubyを高速化なんて ちょっと笑ってしまったw が、ちゃんと読んでいくと こういう子を伸ばす教育が必要だ。 と本気で感じました。 特に中学生にRSAの暗号を解かすなんて その教師バカじゃないの?(最上級の褒め言葉 でも、国語の試験を テンプレート化して解こうとするのは やりすぎな気もしますw あぁ、中学生のころ はまったベーマガが懐かしい。。 中学生とかに戻って、C#とかいじれたら 楽しいんだろうなぁ。perlだけだったなぁ、結局。 http://homepage3.nifty.com/hippo2000/ の中の人に会って、色々教わったのが 懐かしいなぁ、18歳だったなぁ。。 オライリー本を買って読んでいたなぁ。 というわけで、プログラミングと 人生に悩む体験は 若いうち(特に15歳ぐらいまで)に しておけという話でした。ちゃんちゃん。 ---------------------------------------- 竹内氏:セキュリティ&プログラミングキャンプではどんなことをやったの? 金井氏:講師の笹田耕一さんから自由課題を与えられたので、僕はRubyの高速化を選びました。 Rubyでは、メモリ節約のため、ある一定以下の容量の情報は、構造体に直接埋め込まれて保持されます。 Ruby 1.9では、“構造体に埋め込まれているかどうか”の判定を、ループ内でマクロを呼び出したときにいちいち行っていたため、処理速度が遅くなっていました。そこで、ループ内で構造体に埋め込まれてるデータが不変のとき、マクロ(=その判定の条件分岐)をループの外に出し、高速化をしました。 具体的には、array型などが実装されているソースコード、array.c、string.c、struct.cそれぞれから、問題となり得るマクロ、 ・RARRAY_PTR,RARRAY_LEN ・RSTRING_PTR,RSTRING_LEN ・RSTRUCT_PTR,RSTRUCT_LEN を探し、文脈を確認しながら、高速化するという作業(マクロの値がループ内で不変でループの外に出せるものをループ外に出す)です。 竹内氏:中学生でこれに気付くのはすごい。コンピュータでいう低レベルな深いところまで掘っている。そういう根気や気迫があるの素晴らしいと思います。 金井氏:キャンプでは、吉岡弘隆さんからいろいろな指導を受けつつ自分たちでボトルネックを探して修正していくということをしていました。 竹内氏:5日間でしたよね。修正を終えるまでにどれくらいかかった? 金井氏:5日間で一応終わらせたのですが、キャンプ後に笹田さんからskypeでバグを指摘されまして、キャンプ後も必死に修正しました。 竹内氏:修正にバグがあったわけ? 金井氏:make testは通るのですが、rb_yield()の存在によって、arrayに破壊的変更が加わりSEGV(セグメント違反)してしまう可能性がありました。 竹内氏:なるほど。多少そういう課題は残っていても、わたしとしては中学生からこんなことを聞くのは初めてで感心してしまいます。 <中略> ――筑駒の授業の実態が明らかに! (編注)金井氏が鞄から数学の授業で使っているというプリントの束を取り出し、見せてくれた。代数や暗号の問題が載っていた。出典を見ると、「京都大学の入試問題」と書かれたものもあった。 東大では数学科だった竹内氏。「この数学のプリントには感激した」 金井氏:いま、RSA暗号を実際に解くためにフェルマーの小定理をやっています。先生は、「いま分からなくても高校でもう1回やるので気楽に楽しんでやって」とおっしゃっています。 竹内氏:(プリントを見て)……お〜〜〜、これはすごい!! 普通、高校でもやりません。代数に、双曲線暗号……。RSA解読のためのフェルマーの小定理は事実として提示されるだけ? 金井氏:いえ、証明もあります。 竹内氏:本当だ、あるある! すごい学校だな。こういう話を聞くと、中高一貫はとってもいいと思うな。高校受験がないだけでものびのびいろいろなことができる。 ■「国語は点は取れるが嫌い」 ――独自の作文メソッドを編み出す! 【授業:国語】 竹内氏:ほかの学科はどう? これだけプログラムが書けるなら、国語は苦手ではないでしょう? 金井氏:国語は得点的には得意なんですが、嫌いなんです……。特に、作文が。小学校のときに、原稿用紙を1枚渡され「自由に書きなさい」といわれ、何を書けばいいのか分からなかった経験がトラウマになっていて、作文や文章題に対してはずっと苦手意識がありました。 中学入試を乗り越えるためには、問題集の解答や作文法に関する本を読んで、研究しました。問題に対する正しい答えや、うまいいい回しの文をひたすら集めて、頭の中でテンプレート化し、「こういう問題に対してはこういう順序で論理を立てていけば丸がくる、少なくとも三角はくる」というやり方で解答を突き詰めました。 引用:http://jibun.atmarkit.co.jp/ljibun01/rensai/genius/05/01.html |