2000年6月

[前月][次月][一覧]:[表紙][映画][King][BBS]


6/28 (Wed)

現在のプロジェクトで、4週間後にちょっとしたデモをやる。 移動と仕込みの日程を除くと実質3週間。オフィスにも良い意味での緊張感が出て来た。 今日までの結果を皆で眺めながら、目標値を叩き出すにはどうすれば良いかを ディスカッション。ゴールが明確な作業は話が早くて良い。 あとは、短期的なゴール解決のための力技的仕事と、長期的なゴール達成のための じっくり手をかけた仕事とのバランスをどう取るかってとこか。

6/26 (Mon)

朝、ホノルル空港に到着してそのまま出勤。連日夜更しして飲んでいたせいか、 時差ボケはあんまりないようだ。日本は梅雨にしてはやや肌寒かったような気がしたが、 ハワイの気候に慣れたせいか。

今回飛行機の友にピックアップしたのは Thomas Harris "Hannibal"。 目を離せない展開で一気に読ませてもらった。 やっぱり悪役とは常に冷静沈着、恐ろしく頭のきれるやつでなくてはならない。 残虐な場面を読んでる時に限って機内食が出て来るのには参ったけど。

友人の芝居には、社会人劇団の運営の難しさを感じたなあ。 完成度を高めるには時間があまりに限られている。役者間の経験の差がもろに 出てしまっていて、演出にも苦労の跡が見えた。 芝居が要求するdedicationの大きさは、趣味のレベルで何とかなるものではない。 形にするだけでも、睡眠時間を削り、仕事は最低限にして、 生活の多くの部分を芝居のために割かねばならない。 そこまでしても、得たいものはなかなか得られない。

6/21 (Wed) やっぱり知識なのか

しつこく、プログラミングの話題を引っ張る。

昨日は知識よりセンスが必要、なんて書いたのだが、今日職場でいろいろ話をしてて、 やっぱり知識も要るなあと思った。コンピュータエンジニアリングと一口に言っても、 中身はいろんな知識が相互参照しつつ複雑に絡み合った体系なわけだ。アルゴリズムの効率の話 をしていても、そのアルゴリズムはメモリアクセスのローカリティがどうの、みたいな話になれば ハードウェアに関する知識を暗黙のうちに参照しているし、 「テキストのデータファイルを読み込んで…」というごく日常的なオーダーでさえ、 データの仕様はどういう文法で表せるのか、正規表現で十分か、Context Free Grammerになるのか、 一部Context Dependentにしなくちゃだめなのか、というようなオートマトン理論への 理解が必要になる。とにかく何を議論するにしても、ハードウェアに近い層から 抽象的なモデルまでの多層構造が、枠組だけで良いから頭に入っていないと話が通じない。

それじゃあいったいどういう知識を押えておけばいいんだろう、と思い付くままに 書き出してみたら、結局情報工学課程の学部2〜3年次のカリキュラムみたいな項目に 落ち着いてしまった。そのリストを元に、非情報工学系出身の 初級プログラマ氏と話をしてみたら、やはり基礎的な部分の知識に本人もかなり不安を 感じているようだ。 OJTの中でそういう部分のフォローをしていかないと、 本人にとっても周囲にとってもきついことになる。 センス云々、って話はその先なのだろう。 この業界、独学で知識をつけて来た人も多いから、 「技は教わるんじゃない、盗むもんだ」みたいな空気もあるのだけれど、 全体の効率を上げるのには向かないしな。

とりあえず、アルゴリズムとデータ構造一般(ソートやらサーチやら)、 情報理論のさわり(情報量とはとか圧縮の原理とか)、 オートマトン(理論と、yaccやlexの使い方)、 OSの基礎、通信プロトコルの基礎、あたりを教えたいのだが、 良い教科書はないかなあ。


友人の劇団の公演があるので、明日から週末にかけて東京にゆく。 10年ぶりの再演作品。初演のメンバーはほとんど散ってしまったのだが、 当時の演出家が再演への執念を燃やし続けて、ついに実現させたのだ。 私は初演の時に出演していた。今回は観客。 なんか悔しいけど、良いものを作って欲しい。

Tea for two 「さくらサクラ」、駒場アゴラ劇場、6/23(金)〜6/25(日)。 ささやかに宣伝してみる。

6/20 (Tue) プログラミングを教えること

昨日はプログラミングに関して偉そうにいろいろ書いたが、 結局自分も、自己流にプログラミング作法を身に付けて来たに過ぎない。 「オープンソースのコードを読め」というのは、自分がそうしてきたからであって、 それが最善の方法であったり普遍的な方法であるとは限らないわけだ。 それでも、まあ何とかなっている。ただ、自己流でひとつ困るのは、 人に体系的に教えることが出来ないということだ。

大学でいくつか言語の講義は取ったから、言語の使い方やアルゴリズムの紹介はできる。 昨日書いたような、実用に供するプログラムのテクニックみたいなのも教えられると思う。 それらは知識だから。ただ、プログラミングには「センス」みたいなものがあり、 それは知識よりずっと重要なものだ。センスの有る無しで生産性が10倍のオーダーで違ってくる ことはざらにある。 与えられた具体的な問題から、抽象的な構造を見出して、それをプログラミングの体系に マッピングする能力みたいなものだと思うのだが、 そういうのをうまく身につけてもらう体系的な方法ってのはあるんだろうか。

個人個人で独立に仕事をしているのなら、センスが無い人は向いてないんだと 割り切ってしまうことも出来る。また、話が通じる人とだけ仕事が出来れば楽なことこの上ない。 しかし現実には一人でできるプロジェクトの大きさというのには限界があるわけで、 ある程度の規模のプロジェクトを長期に渡って進行させてゆく ためには、様々なスキルレベルのスタッフにうまく仕事を振って行かねばならない。 その中で、初級のスキルのプログラマが、センスを磨いて育っていってくれれば良い。 自発的に育ってくれる人は問題無いのだが、実際には大きな個人差がある。 がんばってるんだけどなかなかセンスが身につかない人に、体系的な講座みたいなものを 開けたら良いな、と考えてはいるのだが…

6/19 (Mon) プログラミング

ビタミンの摂取不足を感じる昨今、スーパーのいちご大安売りに思わず手が出た。 1箱$4.99。買ってすぐはすごくハッピーだったのだけれど、今週は木曜から出かける のを失念していた。普通のパックで言えば4個分くらい、を、3日で食べなければならない。 うーむ。会社に持って行くか…


独学でプログラミング(のれん日記6/20)。 do-while文は、ある操作にリトライが必要になる場面でよく使うなあ (複文が必要なマクロを単文にするために使うことが一番多いけど)。 あと、goto文はevilだと言われるけれど、例外処理ブロックが書けないという Cの構文的な欠点を補うために使う限りにおいては、むしろすっきりした 記述になると思う。Cでは末尾呼び出しの最適化が保障されていないので、 末尾再帰をきちんと処理するインタプリタなんてのもgoto文無しでは非常に書きづらいし。

プログラミングスタイルというのは案外どうにでもなるものなので、 独学によって変な癖がつく、なんてことはあまり気にしないでも良いのではなかろうか。 プログラミング作法みたいなものは、広く使われているオープンソースのソフトの ソースを読んでゆけば自然と身につくのでは、と思う。 色々読んでいると、世の中には実にいろんなスタイルがあるものだということもわかるし。 語学と似てて、たくさん読んでたくさん書くことが重要で、それは基本的に独学でしか 出来ないことだろう。

ただ、アルゴリズムに関しては体系的な学習をしておいた方が便利。 アルゴリズムそのものは資料を調べればいくらでもあるので、暗記する必要は無いけれど、 「この手の問題にはあのへんのアルゴリズムが使えそうだ」という知識が無いと、 無駄な労力を使ったり、仕事上コミュニケーションがとりづらいことがあるから。 プログラミングの授業を取るメリットというのは、そのへんの情報をまとめて入手できることだ。

仕事で、人に使ってもらうプログラムを書いて行く際に、 プログラミングの授業を取っただけ、もしくは自分が使うプログラムを書いてきただけの人が 突き当たる壁というのはある。これは経験値を積むしか無いのだろうけど、ここでも 実用レベルのオープンソースのコードを読むというのは大いに役に経つはずだ。

* * *

ちなみに、この「壁」。私見では、「境界条件を意識できるか」という点にまとめられるのでは ないかと思っている。プログラムは何らかの形で外界と情報のやりとりをするわけだが、 どんな情報でもやりとりできるわけではなく、ある一定の条件を仮定してやりとりするわけだ。 四則演算の入力は数値でなければ意味がない、とか。しばしばその条件は、プログラムの作成者 本人にとって常識であるために、意識されないことがある。しかし、ユーザというものは、 いつでもプログラマが予想だにしなかった使い方を発明する天才だし、 入力にはいつだって予想しないデータが紛れているものだ。 その「予想だにしない事態」にどれだけ強いかで、 使えるプログラムと使えないプログラムの差が出てくるのだと思っている。

おおざっぱに言って、プログラムと外界との接点は3つある、と考えると設計しやすい。 入力と、出力と、例外だ。そのプログラムはどのような入力を想定しているか。 どのような出力を出し得るか。そして、想定外の事態が起きた時にどうやって システムを安全側に落とすか。それぞれについて、そのプログラムが対応出来ることと 対応出来ないことを明確に意識しながら書けるかどうか。

特に、例外処理は盲点になりやすい。 例えば、"PerlによるCGI入門" みたいな記事で時々見るのだが、 掲示版などのプログラムで、書き込みがある度に、記事を格納したデータファイルを開いて読み込み、 データを変更して、同じファイルに書き出すということをしているものがある。 仕事でプログラムを書いている人は普通そういうコーディングはしない。 何故なら、プログラムがファイルの書き出し中に何らかの理由で中断されると、 データファイルが壊れた状態になってしまうから。 一旦テンポラリファイルに書き出してリネームするのがよく使う手。 それだと例外が起きても、元のデータは手つかずで残る。

もっとも現実の問題は上の例のようにわかりやすいものばかりではなく、 何重にも入れ子になった処理のどこかで上の例に似たようなミスをやっていて、 それがたまにバグとして出現するってな具合だ。 例外処理がらみのバグというのにはいつでも一番悩まされる。

6/18 (Sun) Perlへのアンビバレンス

数種類のプロトコルを処理するサーバプログラムを2〜3日ででっちあげる必要性に迫られて、 Perlをごりごり書いていた。Perlの言語仕様は好きではない。 セマンティクスが文脈に依存していたり、 同一の動作を実現する異なる規則が無闇に多く用意されていたりするからだ。 これらの点は、人によってはむしろPerlの良いところと讃えられることもあるが、 私の感覚では、美しくない。

なるべく少ない規則で多くの表現がコンパクトに書けること、 その言語によって言語自体の拡張が出来ること、というのが私にとって綺麗な言語だ。 万能な言語というものは無く、解決したい問題領域によって、求められる言語仕様は異なる。 もし言語そのものを、問題領域に合わせて変化させることが出来れば、プログラムを書くのは ずっと容易になる。例えば、多くの言語では条件分岐の構文と意味は言語組み込みになっていて 変えられない。しかし、そうである必然性は無い。 SchemeやLispでは、ごく少数の決まり事を除いて、基本的な構文や意味の定義がユーザプログラミングと 同レベルにあるので、ユーザが変えようと思えば構文の動作や意味を変えることができる。 中規模以上のプログラミングでは、それが役立つことも多い。

しかし、美しいかどうかと、便利かどうかは全く別問題であるというのを 思い知らせてくれるのがPerlという言語である。前述のサーバプログラムは結局、 エラー処理や最低限のユーザインタフェースを含めた、プロダクションレディの実装が、 2000行程のPerlスクリプトで実現できてしまった。悔しいが認めざるを得ない。 Perlは便利な言語だ。Schemeで同じ事が出来るかどうか、ライブラリを充実させたとしても怪しい。

Perlの、文脈に依存するセマンティクスとか、構文がかなり自由で同じことを いろいろな方法で書けるところなんかは、自然言語に似ている。Perlで書いた詩、なんてのも あるくらいだから。すべてを少数の明快な規則で表そうとする立場とは反対方向なのだが、 そのPerlの柔軟性が、現実の問題の解決に必要なのかもしれない。 現実に解決すべき問題ってのは、少数の規則で明確に定義できるようなもので無いことが 多いのだから。

6/14 (Wed)

ひとつの問題を考え出すと、他のすべてがうわの空になる。 食事もどうでもよくなる。システム開発は危険な麻薬だ。 うーむ。何故あそこでハングするのだ。


おっとこりゃ失敬 (6/14)、一昨日のリンクも修正しときました。

文中リンクにはリファレンスの役割もあるので、なるべく参照している月日のものへ張るように 気をつけてはいる。ただ、当日のものを翌日から別URLに移している方へのリンクの場合、 つい後で修正するのを 忘れることが多いのだが。この日記はindex.htmlが最新の月を指しているが、シンボリック リンクなので常にYYMM.html (YYは西暦下二桁、MMは月) でも参照可能。ほんとは 各日付にアンカー打った方が良いのだろうけれど。

6/13 (Tue)

加州と東京から某社のお客さんが来ているので、まっとうな社会人並に出勤。 たびたび眠気に襲われそうになるが、お客さんの方は昨日朝来て今日夜帰るという 強行スケジュールであるので(しかも飛行機の中でごりごりコーディングしてたらしい)、 こっちが気を抜いているわけにはいかない。 次々と新戦略を発表して実行してゆく某社の無茶なスケジュールはこうやって 支えられているのか。

しかし、自分で書いてて何だが、「社会人」というのも変な言葉だ。 一般には学生が就職したら社会人と呼ばれるんだろうが、 それじゃまるで学生は社会に参加してないみたいだなあ。 生産する人と消費する人、支える人と支えられる人、両方いて社会というシステムは成り立ってるのに。

アイディアを実現するには黙々と手を動かし続けなければならないんだけど、 ディスカッションしないとアイディアが健全に成長しない。両方やってると時間が圧倒的に 足りなくなる。

6/12 (Mon) 仕事・苦労・幸福

カメハメハデーの休日。人のいない時にやっておきたいメンテナンス作業があったので オフィスに出る。今使っているシステムは、大抵の作業はオンラインのままできるように 作ったのだが、一部の最適化作業はオフラインで行わなければならない。24時間回る プロダクションでは、オフラインに出来る機会があまり無いのだ---が、最適化の過程で データが欠損しているのを発見。これはサードパーティのシステムのバグをつついて しまったんだと思うのだが… 条件を変えて再現してみようとしたが、一回の作業に 一時間以上かかるのではかどらない。


まついさん (地震によって)不幸な職員が叩き起こされ…(6/12) と書かれていたのでふと思った。患者の急変で叩き起こされる当直の医師は不幸なのだろうか。 深夜の119番で飛び起きる消防士は? 夜勤の監視員からの「サーバが死んでる」という 電話を受けて眠い目をこすりながらリモートログインするシステム屋さんは? 大変であることは確か。人によってはそういうのが当たって不運だと言うかもしれない。 苦労、とまで言えるかどうかは、程度の問題か。しかし、不幸、なのだろうか。

何を不幸とするか、すなわち何を幸福とするかは、具体的な事項としてはもう人それぞれなのだけれども。 スキナーに言わせれば好子がもたらされるがゆえに行動している状態ってことか。 ただ、数多くの好子を、人はある価値観で比較して、より価値を見出せるもの (客観的な見返りは少ないとしても) を得ようとするようにも思える。 ちょっと今はまとめられないが、おいおい考えてみたい。

6/11 (Sun) Makapuu-Waimanalo

島の東側、MakapuuからWaimanaloまでハイキング。 切り立った崖が海に迫っている場所で、 海岸沿いの道路から見上げると首が痛くなるような崖が続いている。 その上を通るトレイルを歩いて来た。全長4マイル。それほど難しく無いトレイルだが、 得られる景色は素晴らしい。ほとんど全行程に渡って眺めが良いというお得なコースである。 以下、リンク先の写真はそれぞれ30〜50KBあるので注意。

6/9 (Fri)

最近、一週間経つのがむやみに速い。良い兆候なのか、悪い兆候なのか。 いくつも並行して進めていると、成果が見えにくいので不安。

在外選挙人登録に行った。手続きに2〜3ヵ月かかるそうなので、今回の衆院選は 間に合わないそうだ。受付の人に「まあ来年には参院選もありますから…」と変な なぐさめられかたをしてしまった。ぎりぎりになって登録に行く方が悪いんだけどさ。 普段、仕事関係でもプライベートでも日本とは電子的に情報をやりとりしているので、 つい、日本での手続きでも2〜3日で済むような気になってしまう。

なんか最近はそそられる映画が無い。Woody Allen の "Small Time Crooks" など観に行く。まあ、それなりに、おもしろい。

6/6 (Tue)

うーむ、大ハマリの事例: Knee Deep in a Dream: The Story of Daikatana。 どんなプロダクションでも起こり得ることだけに、他人事と思えぬ恐さじゃ。


M:I-2と香港映画(6/7)。しかし、同様に香港映画のテイストを多く採り入れている "Matrix" はカッコ良いいのに、 "M:I-2" は滑稽に見えてしまうのだな。 "M:I-2" ではスタイルだけが採り入れられて、男達の熱い闘い、という ジョン・ウーらしさが消えてしまったせいか。 "Face/Off" にあったハラハラ感も、"Bullet in the Head" なんかの銃と暴力の圧倒感も無くて、 ただトンデモな演出に突っ込んで楽しむお笑い映画になってしまっていた。 プロダクションにおいてトム・クルーズとの力関係がどうのという噂も聞いたが…。

6/4 (Sun)

丘に立ち、ヤシの木の波の先の藍色の海を眺める。 千数百年前、長距離航海用の巨大なカヌーに乗り込んだ一群のポリネシアの 人々が、その海の向こう、4,500km先にあるタヒチ近辺の島を出発した。 南太平洋の多くの島は当時までに知られていたが、 北太平洋は遥かに島の密度が低い。茫漠とした海洋の中、 最も近い陸地からでも3,000kmは離れている孤立したハワイ諸島を、 彼等はいかにして発見したのだろう。未知の大洋へ乗り出して行った人々を 想像しようとする度に、思わず身ぶるいする。なんという勇気、あるいはなんという無謀。

6/3 (Sat) ハワイッイ

インラインスケートのホイールを取り換えたついでに、Ala Moana Parkを走り回る。 週一回のゲームくらいでは体力の低下は防げないのかもしれない。すぐに息が上がってしまう のが情けない。

ハワイ語の発音について。ハワイは "Hawai`i" と表記する。ここでバッククオート (`) はglottal stopという、ごく短い無音を示す。表記通りなら「ハワイイ」と「ハワイッイ」の 中間くらいになるはず。なのに、誰もそうは発音していない。何故だ。

ハワイ語のテキストで、口語では同じ母音がglottal stopを挟んでいる場合は 前の母音が落ちることが多い、との記述を発見。"Hawai`i" は "Hawa`i" となる。ローカルの人は 「ワ」に強いアクセントを置いて、跳ねるように軽く「イ」を添えるのだが、そういうわけだったのか。 そういや、前に、名前を聞かれた時に、ローカルの人の「ハワ`イ」という発音を真似て「カワ`イ」と 言っていたら、しばしば "kawaii" と綴られてしまうことがあった。 「ワ」のアクセントを弱めてみたら、今度は "kauai" と綴られた。

アラモアナショッピングセンターから北に伸びる Ke`eaumoku という通りがある。 けっこう美味しいレストランなんかが並んでいるので観光客も多い。 この通りの名前を一発で発音するのは難しそうだ。素直に読めば 「ケエアウモク」で、何かのガイドブックでそういう表記を見たこともあるが、 誰もそうは発音しない。普通は「ケ`アモク」で通じる。 どういう規則でそうなったのかはちょっとわからない。

6/2 (Fri) 迷惑と我儘/Mission Impossble 2

「良い迷惑」(6/2) なんてものはあるのかなあ。衝突があって、その衝突が ネガティブに受け取られたら「迷惑」、ポジティブに受け取られたら「刺激」と 解釈されるだけのように思える。

「人に迷惑をかけてはいけない」というのは私の嫌いなお題目の一つだ。 確かに私も普段はなるべく人に迷惑と思われるであろう行動を避けるようにしているが、 それは相手に迷惑と思われることで余分な摩擦を生じたりトラブルに巻き込まれたり する時間が勿体無いから、というかなりエゴイスティックな理由による。

そもそも、何を迷惑と感じるかなんて、人によって、また状況によって全然違う。 例えばエスカレーターは片側を開けて乗るのがマナーで、そうしないのは急いでいる人に 迷惑なんだそうで、東京ではわざわざその旨を表記したステッカーが駅なんかに張ってあったり する。私はこれが不思議でならない。 エスカレーターの一つや二つ駆け上がったところで大した差は無いと思うし、 稀に緊急の用事を持っている人がいたらその人は声をかけて開けて貰えば良いと 思うのだけれど、どうも東京などでは緊急の用事を持つ人がものすごくたくさん いるらしい。でも、エスカレーターを急いで登っている人のうち99%は習慣でそうしている だけだと推測している。

電車内での携帯が迷惑だ、という話もあって、これはペースメーカーへの影響が あるからややこしいのだけれど、世論としては満員電車の中で耳元で話されると不快だ、 という感情が多いみたいに感じる。私は別に不快じゃないんで、これもまた良くわからない。 あ、でも映画館や劇場の上演中に鳴らすのは受け入れられないけどね。 そう言えば一時期、電車内でヘッドフォンから盛れるシャカシャカ音が不快で迷惑だって 話もあったなあ。

他にはどうかな。集団の中で一人だけ突出すると、周囲がこれまでのやり方を 変えなければいけないから迷惑だ、とか。前例が無い例外処理は迷惑だ、とか。 自分の美的感覚にそぐわないから目障りだ、迷惑だ、とか。 実に人それぞれに基準があるんで、人に迷惑をかけないでいるなんてことはそもそも 不可能だと思う。しかし、「人に迷惑をかけてはいけない」という場合の多くは、 自分の基準を中心にした「迷惑」を無批判に他人にも適用しているだけなんではないか。 傲慢だと思う。人に迷惑をかけないで生きようなんて甘いんだ。 その覚悟無しで発せられる「人に迷惑を…」という言葉にはうんざりする。

ただ、こういう迷惑だけはかけたくない、ということはある。 人が、何かの目的、夢に向かってコミットして、その実現のために他の全てを 懸けている時、その道筋を邪魔すること。もちろんその目的が他の多くの人の 目的と相反しない場合だけど。

もし、その人が目的を実現するための手段が、世間一般のマナーとしては迷惑だと 考えられていることであったとして、常識を理由にその人の目的を潰すようなことが あれば、私はそちらの方が罪が重い(あくまで私の中で、ね)と思う。極端な話、 何も生み出さず、何のコミットメントも持たずに生きている人は、それも一つの 生き方だから否定しないけれど、邪魔にならないところにどいててね、ということだ。 ああこれも傲慢だな、と書いてて思った。読んでて不快になった方が居たら失敬。


Mission: Impossible 2。分かりやすすぎる設定、都合の良いストーリー展開、 大技ばかりのアクションで、Tom Cruiseはまるで道化だけど、それなりに楽しめた。 「そんなわけあるかい」「おまえらさっきまで何処に居たんじゃ」 「そんなことやってる間に死ぬるで」等と突っ込みを入れながら観るのが吉。 や、ずいぶん笑わせて頂きました。


[前月][次月][一覧]:[表紙][映画][King][BBS]

Shiro Kawai
shiro@lava.net