tech
ハッカーの遺言状──竹内郁雄の徒然苔
第23回:やっぱりプログラミングは楽しい
元祖ハッカー、竹内郁雄先生による書き下ろし連載の第23回。今回のお題は「やっぱりプログラミングは楽しい」。
ハッカーは、今際の際(いまわのきわ)に何を思うのか──。ハッカーが、ハッカー人生を振り返って思うことは、これからハッカーに少しでも近づこうとする人にとって、貴重な「道しるべ」になるはずです(これまでの連載一覧)。
文:竹内 郁雄
カバー写真: Goto Aki
多くの読者はご存知だと思うが、情報処理学会という学会がある。コンピュータ関係では日本最大の学会だ。創立は1960年4月22日とある。ところが「第57回プログラミング・シンポジウム」(略称プロシン、以下プロシンと書く)という名前のシンポジウムが2016年1月に開催される。プロシンの第1回は大磯で開かれた。1年に1回、1月開催なので、第1回は1960年1月である。これは故山内二郎先生の努力のおかげである。要するに、情報処理学会よりも古い「プログラミング」に関するシンポジウムだった。プロシンが完全に情報処理学会の管轄になったのは割合最近のはずだ。
山内先生については、故浦昭二先生、有山正孝先生による以下の記述がある。
先生は会場では常に最前列に端然と着席されて講演・討論に耳を傾けておいでになり、しばしば鋭い質問を発して討論をリードされた。夜の自由討論の席でも深更に到るまで、時には酒盃を片手に、孫のような若者達の論争に加わって楽しそうに時を過されるのが常であった。このシンポジウムの伝統となった自由な雰囲気と率直な討論の習慣は、先生のお人柄と学問に対する姿勢から醸し出されたものと言っても過言ではなく、またそれあればこそこのシンポジウムが四半世紀にわたって熱心な共鳴者に支持され、活気と高い存在意義を保ち続けることができたのである。
(「プログラミング・シンポジウム こと始め」より)
その後1964年に、1月開催の「プログラミング・シンポジウム」ではなく、もっと気楽に将来の計算機の夢を語るシンポジウム、つまり「夢のプログラミング・シンポジウム」が企画され、1月ではなく夏に開催されることになった。当時日本にあったコンピュータが512語(キロもメガもついていなことに注意)程度のメモリだったのに、人工知能とか偏微分方程式の数値解法とかが平気で議論されていたようだ。私がまだ大学に入りたてのときだった。
夢のプロシンは現在「夏のプロシン」と呼ばれていて、ややテーマを絞って、夏・秋口に多いときは年2回開催されている。それに対して本家のほうは「冬のプロシン」と呼ばれるようになった。上記の引用には「四半世紀」とあるが、もう「半世紀」を超えて続いている。
くどくどとプロシンの紹介をしてきたが、山内先生の理念と行動「時には酒盃を片手に、孫のような若者達の論争に加わって楽しそうに時を過されるのが常であった。このシンポジウムの伝統となった自由な雰囲気と率直な討論の習慣」はどちらも脈々と生きている。もちろん「時には酒盃を片手に」は「常時酒盃を両手に」という正常進化をしているが(もちろん昼は飲みません)、自由闊達で率直な討論という伝統をしっかりと守っている。つまり、いまや冬も夏も「夢のプロシン」の精神を受け継いでいるのだ。
私が大学院に進んで初めて計算機に触れて虜になり、そのままの流れ(?)でNTTの研究所でコンピュータ関連の仕事をするようになったのと、プロシンに参加させてもらえるようになったのとは絶妙なる同期だった。
話は脱線するが、コンピュータに触ったのも、アルコールと友達になったのも大学院に進んでからであった。つまり、超晩生だった。最近の優れた若い子が小学生ぐらいにもうパソコンに触れ、中学生あたりでプログラミングに開眼したというのとでは大違いである。でも、晩生だったからこそ、50歳過ぎてもマイクロコードを書くという異常生活が送れたのかもしれない。プログラマ35歳定年説という悲しい説があるが、プログラミング35年間可能説のほうが嬉しい。
いまでこそ大酒飲みと思われている私が初めてアルコールを飲んだのは何と修士2年のときだった。下宿で角瓶か何かを独りで一晩で飲み干して、あぁ、そんなものかと思った記憶がある。どうもアルコールに強いことが分かってしまった。しかし、いまでも日本酒は絶対に飲まない。悪酔いするからだ。
私はNTTの研究室でもかなり自由にいろんなことをやらせてもらっていたが、プロシンに参加して、本当に多種多彩な諸先輩や似たような若い連中とお付き合いできるようになった。私にとってこれは複利がついて増殖するような財産になった。
1970年代のオンラインコミュニケーションは電話だけだった。だからこそ、プロシンでの夜を徹してのオフラインコミュニケーションはとても濃密なものであった。プロシンも例外ではないが、このごろのワークショップでは発表を聞きながらのチャットが大流行だ。私には話を聞きながらのチャットがもう無理という言い訳というより、せっかくオフラインの場でオンラインやるのかねぇ、という感想のほうが強い。でも、チャットを見ながら発表を聞くのも楽しい。
人が集まるシンポジウムやワークショップには、face-to-faceの良さが確実にある。同じ釜の飯には、人種を問わず大きな価値がある。
第15回の遺言状で、ダラス・フォートワース空港で私が麻薬の売人に間違われた事件について書いたが、それはIFIP(情報処理国際連合)の会議に行くときのことだった。会場はモハメド・アリと誰だったか忘れたボクサーとの世紀の対決が行われた、もの凄く大きなドームだった。そのドームでの開会式。何と客がガラーンとした会場全体の片隅の30分の1ぐらいしかいない。超寂しい開会式だった。学会の大会が総花主義の百貨店のような大会ではなく、専門分野の近い人たちが集まって濃密な議論をできるようなワークショップ形式に変遷する節目の年だったのだと思う。
しかし、実はプロシンは、プログラミングという共通のキーワードを除けば専門分野のまるで異なる人どころか、長老から若い学生、男女、つまり老若男女が集うシンポジウムなのである(写真1)。
冬のプロシンはちょうどお屠蘇気分が抜けたころというか、別の言葉で言えば、新年会のような時期なので、みんな新しい年に何か面白い話ないかなぁと寄り集まってくるような雰囲気である。若い人には、学術的な面以外でもとてもいい刺激になる。真面目な人から見ると、「え、それ何?」かもしれないが、山内先生の精神を受け継ぐ、こういう価値をもつシンポジウムはほとんど類例がないのではなかろうか。
夏のプロシンはそれこそ20〜30人程度の小人数なのでもっと遊び心が豊かだ。というか、私が勝手にそう思って、そう仕向けているだけかもしれない。紙の資料が手元にないので、過去の履歴を全部列挙することができないが、私の夏のプロシンの発表のタイトルを並べるだけでも、雰囲気の想像がつくだろう。ほとんどの発表の事後に執筆された報告のPDFは
鵺のエッセイ
で見ることができる。
- 1998年「プログラミングとTaoism」(プログラミングと老子の「道徳経」との関係についてジョーク混じりに述べたもの)
- 1999年「21世紀大予言とその検証」(要するにホラ話)
- 2001年「Programming on the Noisy SILENT」(SILENTという自作マシン上でのプログラミング)
- 2005年「プログラム問題の創造」(主に「数学セミナー」誌や「bit」誌に出した問題の紹介)
- 2006年「不定」(何を話すかが最後まで不定だった)
- 2009年「プロトコル指向プログラミングとは?」(どうもそれまで「プロトコル指向プログラミング」という言葉がなかったようなので、適当な話をぶち上げた)
- 2011年「こんなのもプログラミング」(狭義のプログラミングを超えたプログラミングの事例の紹介)
- 2012年「プログラミング美学(仮題)」(美学の観点からプログラミングを分析?)
これだけやっていると夏のプロシンの幹事もよくやらされる。印象に残っているのが、岐阜県の下呂温泉で開催した2002年、お題が「リソース・コンシャス・プログラミング」の夏のプロシンである。主幹事だったので、いわゆるCFP(Call for Participation)を書いた。
2002年度 夏のプログラミングシンポジウムのご案内
この中では、リソース(資源)制約に関わる多種多様なキーフレーズが並んでいる。納期に間に合わせるためのプログラミング、その大胆な手法、人生訓、処世訓、管理手法、顧客対応、……、とか、電池状態・寿命コンシャスプログラムとか、制約のもとでプログラムのどこに力を入れ、どこを手抜きするかのノウハウとか、(もともと/疲れていて/酔っ払っていて)頭が悪い場合のプログラミングとか。
しかし、主幹事のくせに約束のプロジェクタを持っていくのを忘れてしまった! 誰かのアイデアで下呂市の教育委員会に駆け込み、大学教員の身分証明書を見せて借りることができたが、この失策はいまでも語り種になっている。
もちろん、下呂は日本三大名泉と言われているくらいだから、温泉入浴に制約があってはならない。またお昼の散歩も重要である。温泉街の中を流れる飛騨川を渡る高山本線の鉄橋のすぐ横に、主に通学の生徒が使うと思われる、人が歩ける幅の狭い橋が付随しているのだが、この橋には赤い服を着て歩かないようにと書いた看板があった。赤い布を振るのは列車の緊急停止を知らせる合図になるからだそうだ。
これよりずっと以前に下呂で開かれた科学研究費の集会に呼ばれたことがある。そのころまだ私はサッカー中年だったのだが、右膝を痛めてしまい、(医者に行かなかったのだから当り前だが)半年もの間何をやっても治らず、キックは左足だけでやっていた。おかげで左足のキックの精度は向上したものの、ちゃんと試合に出るのは無理だった。ところが、下呂の温泉に入った直後に、痛みがすっ飛んでしまったのである。だから、私にとって下呂は奇跡の温泉なのである。
そして今年9月、私も幹事の一員だったことが功を奏したか、第14回の遺言状の「プログラムで一句詠む」ではないが、「プログラム詠み会」と題する夏のプロシンが奇しくも再び下呂で開かれた。もともとはプログラミングのハッカソン、つまり「プロソン」という新しい試みをやろうという意図だった。具体的なお題はわりと直前に公開されるという仕掛けである。実際、約1週間前に「Raspberry Piで何か作る」、「下呂でしかできないプログラム」、「対戦型2048のプログラム」(2048というパズルゲームを対戦型にしたもののプレイヤを作る)の3つのお題に決まった。
私は幹事のくせにやたらと雑事に追われて非常に忙しく、幹事としての仕事がまったくできないどころか、参加して何をやろうかを考えることもできなかった。行きの新幹線もその雑事の延長で忙殺。高山本線に乗ってから、さてどうしようかと考えた。特急列車が下呂駅の1つの前の飛騨金山駅に着いてから、「そうか、2と3で問題を作ろう」と思い立った。
2と3は最初の2つの素数だが、実に奥深い。沢山の例があるが、1つだけ例を挙げると、1937年にCollatzが提唱した予想、別名「3n+1問題」が有名だ。任意の正整数から出発して、
その数が偶数だったら2で割る
その数が奇数だったら3倍して1を足す
を繰り返す。こうすると、どの正整数から出発しても、いつかは1になるというのがCollatzの予想だが、いまだに証明ができていない。Wikipediaによると5x260までは予想が成立している。
「よし、2と3でまた新しい問題を作ろう」と考え始めたら下呂に着く前に以下の問題を思いついた。0から出発して
2を足す、3を足す、2を掛ける、3を掛ける
という4種類の演算を繰り返して、2以上のどんな正整数でも作れる。例えば、10=0+2+3x2=0+2+2+3+3=0+2x2+2+2+2だ(演算は左から順に実行する)。一番演算数の少ない方法を見つけなさい、という問題である。これだったら、下呂に着いてからでも簡単にプログラムを作れそうだ。
と思って、会場で泥縄。「二と三」というスライドを作って、その中の1つの例題、出来立てほやほやの問題としてこれを紹介した。そしたら、開智国際大学の田中二郎さんがすぐプログラムを書いてしまった。そしていろいろな分析をしてくれた。いつのまにか「下呂数」と命名されたので、「下呂でしかできないプログラム」の恰好の例になったものの、私は完全に先を越されてしまった。なので、2日目のプロソンでは別の2つのプログラムを書かざるを得なくなった。
それにしても2日目、朝から夕方まで、みんなずーっと黙々とノートPCに向かってプログラムを書いているという風景はプロシンとして過去に例のない風景であった(写真2)。ホテルの人々は相当不思議なものを見たという顔をしていた。
途中で適当に散歩するもよし、温泉に入るもよし。私は以前から気になっていた問題を2つ選んでプログラミングを始めた。1つ目は午前中に完成した! しめしめと思い、2つ目に取り掛かったが、これが結構大変だった。まさに、賢者の思考を愚者(私のこと)がシミュレートできるかという問題だったが、「賢者は他の賢者を完全にシミュレートできる」ことをシミュレートすることが大変で、段々込み入ってきてしまった。頭を治すために温泉に入って気合いを入れたのは良かったが、4時ごろ、ついビールを飲んでしまった。これが敗因で、ビールを飲んだ愚者にはもう面倒なプログラミングは無理となったのである(※1)。1つ目のプログラミングでちょっと面白い発見をできたのが不幸中の幸いであった(記事末の「付録」参照)。いずれにしても、忙中閑ありの「下呂でしかできないプログラミング」だったことに間違いはない。
プロシンから帰ってからも忙殺され続けたが、時間制約のない中でじっくりプログラムを書いたら、何とか賢者の思考をシミュレートできたように思う(まだ、100%の自信はない)。この話を2016年1月の冬のプロシンで喋ろうかといま目論んでいる。
やっぱりプログラミングは楽しい、と実感した先日の夏のプロシンであった。みなさんも、こんな面白い夏のプロシンに参加されたらいかがでしょう。(つづく)
※1:1日18時間もマイクロプログラムを書いていたころは、ビールを飲みながらガンガン書いていた。昔は胆力も根性もあった。
【付録】
1つ目のプログラムの中で一番キモとなった部分を紹介しておく。答えは次回に書くので、腕に覚えのある方はぜひ取り組んでほしい。私はすっきりした効率のいいプログラムに到達するのに30分かかった。えーっ、この程度の問題に、と思ったが、結果が予想外に面白い形だったので、まぁ30分の価値はあったかと思う。
4, 9, 16, 25といった平方数(ほかの数の2乗になる数)を抜いた2以上の数の列
2,3,5,6,7,8,10,11,12,13,14,15,17,18,19,20,21,22,23,24,26,……
のn番目の数を求める関数を作れ。例えば、n=3なら5を返す。
竹内先生への質問や相談を広く受け付けますので、編集部、または担当編集の風穴まで、お気軽にお寄せください。(編集部)
変更履歴:
2015年10月01日:「込み入ってる」の意図を分かりやすくするため、「『賢者は他の賢者を完全にシミュレートできる』ことが大変で」を「『賢者は他の賢者を完全にシミュレートできる』ことをシミュレートすることが大変で」に変更しました。
SNSシェア