正義のハカーに向かってその1(2006/08/30)


カルガモさん一家

今日も全員元気である。 子供は池をそこらじゅうダッシュかけまくり。

カワセミの幼鳥も2羽来ていた。 カワセミは、子供の(というか巣立って間もない)頃は、 あの鮮やかな色ではなく、くすんだ羽色だ。 背の青はあまり変わらない鮮やかさだが、羽の雨覆や、 頭は緑の光沢が弱く、腹のオレンジも上半分がくすんだ濃緑色が混ざっていて、 どうにもパッとしない外見である。 大人では朱色の足も黒もしくは濃緑色だ。

また、当然ながら魚を捕るのもへたくそだ。

厳罰化

速攻で何でも死刑になっちゃう中国では、 一旦しでかしちゃったら、もう、あとは何やってもおんなじやがな、 なんせ、誰でも死ぬんは一回切りでっさかい。(なぜか関西弁) とばかり、ヤケクソになってむちゃくちゃしちゃうことが多いと聞く。

厳罰化において期待することは、 たとえばいままで軽い気持で飲んでいた一杯に、 今後はそれによって歯止めがかかるだろう、というようなものである。 ここで見落してはならないのが、 そんなふうにちゃんと先の事まで考える奴がどれくらい居るものか? というのと、 先のヤケクソ現象である。

鳥の飛行

写真がうまくとれないもんだから、俺が撮った鳥の写真なんて どこかにとまってるやつばっかりで、飛んでるところの写真なんて一枚も無い。 無いこともないか。 海鳥は、大抵ずっと飛びっぱなしだし、 光の条件も良いことが多いので、 飛んでるところの写真も何枚かある。

鳥なんて飛ぶのが当り前だと思っているし、 それに、じっくり見ようにも、あまりにもスピードが速かったり距離があったりして、 物理的に無理という事も多いわけで、 実際じっくり彼等が飛んでいるところを見る事はあまり無いわけです。

一方、我々人間がこしらえたジェット推進の航空機は、 速度も高度も(それに武装も)遥かに鳥を凌駕していますので、 鳥よりすげぇと思ってしまいがちです。 確かに、航空機は他の乗物に比較すると、 問題にならないくらい洗練された機械です。 しかし、その飛び方を鳥と比較すると、 残念ながら、 なんとも粗雑で不様なキカイであるといわざるをえません。

そんなふうな事を、youtubeやら映画やらで航空機が飛んでいるところの画をや 鳥が飛んでいるところの画を見て、漠然と思いました。

でも、なぜ、そう思ったのでしょうか?

両者の飛行のどこがどう違うのかを考えてみました。 鳥の翼は飛行機用語でいえば、いわゆる可変翼です。 しかもあれほどまでに可変する翼をもった飛行機はいまだかつてありません。 なにしろ、翼を無くすという選択すら畳んでしまえば可能です。 これに比べると、翼が胴体に剛体接合されていて、 ショボい補助翼がピコピコ動くだけというのが、 なんとも非常に不様で、 ほとんどへたな冗談に見える、というのが核心のようです。 クルマでいえば、サスがなくて車輪が車体に直接くっついてる状態ですから、 そう考えればじつに間抜けです。

個々の性能だけに注目すれば、 たとえば、セイルプレーン(いわゆるグライダー)の滑空比は、 鳥の中でもっとも優れた滑空比を持つといわれるアホウドリの倍以上ですし、 X-15(NASAのロケット実験機)の速度は 急降下するハヤブサの100倍くらいあるわけです。 しかしながら、飛行の美しさでいえば、 飛ぶのが一番ヘタクソな鳥でも、 もっとも優れた航空機よりもエレガントといわざるをえません。 まぁ飛ばないダチョウとか居ますが。

えー、いくらなんでもそりゃちょっと言いすぎだろ と思う人はこの圧倒的な空中運動を見るといいでしょう。 最後の10秒くらいのシーンに注目です。

超越的存在の視覚表現としての鳥の翼が、 世界各地の美術に普遍的に見られるのも当然のなりゆきというところでしょうか。

2006/08/30

先日、ポアンカレ予想についてしょうもない事を書きましたが、 そもそもポアンカレ予想って何じゃったけ?というくらい全てを忘れていたので、 wikipediaの記事を読んでいました。 ポアンカレ予想を説明した記事に使われている諸概念自体、 完全に忘れてます。 更に、それらの諸概念を定義するのに使われる、 homomorphismとかそういう最も基礎的な概念からまるっきり全部忘れてます。 おそるべき忘却力といわざるをえません。

ところで、wikipediaの数学の記事は凄く読みやすいので感動したよ。 修士時分、ゼミの準備で岩シ皮の数学辞典でわかんない用語を調べてて、 全然まったく理解できず、 「ダァホ!こんな説明で解るくらいならそもそも辞書なんか引くかボケ!」 と何度も逆ギレしたのを遠い目で思い出しました。 あんなにちゃんと書いてあるんなら、教科書なんか要らんよ。 いや、まじで。 項目によっては、練習問題ぽい具体的な説明までついてるし、 「あ?この用語何だっけ」と思ってもクリック一発で速攻で調べがつくので、 すげぇはかどる。

おかげで、数日でずいぶん回復した。 というか、こういう勉強って「やんなくてもいい」ということになると、 妙に捗る気がする。

それで、昔買った小島先生の本を今日、電車ん中で読んでたのですが、 そのなかに、 位相空間における連続写像の定義のうち、 位相幾何で便利な体裁の「逆像が開集合」という命題を紹介してあるところの記述が、 すげぇいい味出してたので紹介しましょう。

この定義から連続性を感覚的に把握するのは誰でも時間がかかるが、 くりかえし唱えるうちにギャップがないことを表しているような気になってくる。

どうよ?

いやつまりですね、飲み会なんかで 「普通にやったら解決するのにとんでもなく手間がかかるが、 ちょっとヒネるとズバっととける、そんな問題を作るところに 生きがいを感じるのです」と言い切るあの先生の言葉だからこそ、 ここは「素振り1000回」みたいな訓練が必要になるのだなぁと、 わしのようなひねくれ者も素直に感動する程の猛者ってことでして。

いや、ほんと、彼のゼミで修士もらったというのは、 わしの人生のなかでは今のところ、最高に輝かしい経歴ですね。 あれより大変だったことは、その後いくらでもありましたが、 それらはややこしいから大変だっり、 そもそも問題の出発点が間違っているから大変だったりしたものばかりで、 「難しいから大変」という点で、 あの経験を超える瞬間はいまのところ存在しない。

いまのところ存在しないが、 ついにそれを超える波が来そうな気がする今日このごろ。

正義のハカーに向かってその1

なんかこういう事書くような柄じゃないんですが、 以前から漠然と思ってる事なんで、 ちょっと書いてみますよ。 何かというと、名前の選び方についてです。

ナイーブな形式主義者は名前ってのは単なるシンボルであって、 その意味内容とランダムに関連づけられるような存在だ、 みたいな事をいいます。 シンボルには意味なんか無い。 その証拠には、チェスのナイトを食卓の塩の容器と取り換えても、 ゲームの本質には関係が無い、ってね。

ところが現実はそうではなく、 実際には、名前自体なんらかの構造を持っているのです。 当然そうであれば、 名前はなにがしかの意味あるいは傾向をも内包している存在なわけです。 ですから、それに沿うような意味内容あるいは指示対象を持たせるならば、 指示対象と名前の関連が自然で自明なものとなります。 チェスにすっかりおなじみの人ならナイトが塩壷でも構いませんが、 初心者が塩壷で始めたら、それが何のコマだったかすぐ判らなくなってしまうでしょう。

簡単にいえば、 名前を見ただけで使い方と中身とわかるようなそういう名前をつけろ、って事です。

ところでこれだけならば、読みやすいコードと名前の選び方というのは、 表面的な関係に留まるように見えますが、 実はもっとこの問題は根が深いというのが私の考えです。 つまり、解決せねばならない問題の構造を読み解くセンスと、 ふさわしい名前を選ぶセンスは結局同じものなんじゃないのか? という事なのです。

ものごとの意味には、おおきくわけて二つの捉え方があります。 ひとつは、それが何であるか。 もうひとつは、それはどう働くのか。 このうち、名前をつけるという仕事は、 どちらかというと後者の領域で意味を持つ操作です。 さて、プログラミングとは大きな課題を、 小さく分割された使い回しの効く課題の組み合わせとして表現する仕事です。 組み合わせるに当たっては、分割された部品に名前をつけておき、 それを使って組み合わせるのが通常の高級言語です。

つまり使われ方を見通さない事には、 それら小さく分割された課題にふさわしい名前をつける事ができないのです。

こう考えればよいでしょう。 解決すべき大規模で具体的な課題を、 小規模で原始的で普遍的な課題の組み合わせとして表現する際に、 その表現が成功しているかどうかを評価する一つの尺度として、 構成要素が何種類あるか? という基準が使えます。 似たような、それでいて微妙に異なる処理を実装した手順がたくさんあるコードと、 それらに共通する要素を抜きだし、微妙な差異を表現する手段を別に与えたコードでは、 後者が成功しているコーディングです。 構成要素の種類が少ないとはこういう意味です。 それは、単に後者の表現のほうが美しいというだけにとどまらず、 問題の真実にどれくらい近付いたかを測る尺度でもあります。 数学者がシステムの公理を極限まで減らす事に精力を傾けるのは、 まさにこの理由によります。

後者のようなスタイルは、分割した構成要素の使われ方を洞察した上で はじめて可能になります。 そして使われ方にふさわしい名前を選ぶ事ができるのは、 そのような洞察があればこそです。

洗練されたコードを書く能力は、 解りやすい名前を付けるセンスと深い関係があると私が感じるのはこういうわけです。


過去の落書きリスト