プログラミングの楽しい所

 連休はあっという間に過ぎ去って、気がつけばもう九月が終わろうとしている。すっかり暗くなった道を歩いていると、雲の合間に、まぶしいほどの満月が見えた。ただの晴天よりもずっと情緒があるように感じられた。普段、単純さを好むくせに、このようなものに心引かれるというのは、いったいどういうことだろう。

 長めの休日があったので、個人的にゲームを作っていた。なかでも一番面白かったのは、モンスターを考える作業だった。最初は弱そうなモンスターを考える。弱いとはいえ、少しは気持ち悪い要素がほしい。そうすると、どんなRPGでも出現する「スライム」が、やはり適任だと感じる。もちろん、一匹では寂しいのでもっと数を考える。頭のなかで弱そうな生き物を探す。ダンゴムシなんてどうだろうか。小さく丸まって身を守る技を持っていそうだ。ダンゴだと弱そうだから鎧をつけていることにしてヨロイムシにしよう。

 こんな風に、モノとモノを組み合わせて何かしらモンスターを作る。名前から姿まで分かりそうなものにして、能力を一つだけ付け加える。他のモンスターと協力するような奴はどうだろうか。戦っていると成長して強くなるような奴はどうか。そいつと戦う時、プレイヤーはどんなふうに苦しむのか。うまい対策はあるのか。さすがに何十年もゲームばかりやっているおかげで、するすると次のアイデアが浮かんでくる。出てこなくなったら、生物図鑑を眺めたりするのも良さそうだ。

 二十個くらい思いついたところで、一番楽しい時間はお預けにする。どんなにモンスターを書きあげたところで、動かすための舞台が必要なのだ。そういうわけで、プログラミングに着手する。プログラミングが楽しくないかというと、そうでもないのだけれど、一番楽しい時間には劣る。だんだん飽きてくるので、続けるために、プログラミングの楽しい側面をもう見つめてみよう。

 わかりやすい面白さの一つは、プログラマの指示に対して、コンピュータが反応してくれることにあると思う。あらゆるプログラミング言語で最初にやることといえば、コンピュータに Hello World と表示させることだ。自分以外のものが、自分の命令に従ってくれる、意図通りに動いてくれるという単純な喜び。もしかしたら、犬にお手を覚えさせるように、コンピュータに愛情を持っているプログラマもいるかもしれない。

 それからもう一つは、全能感。プログラミングができれば、なんでもできるという錯覚を与えてくれるほど、コンピュータは万能な力を持っている。スマートフォンを見てみれば、そう感じるのも納得できるかもしれない。iPhone に入っているあらゆるアプリは、プログラミングによって生み出される。いくつかの工程があるとはいえ、プログラミングなしにアプリが生まれることはない。それを支配している、使いこなすことができる、という感覚は、うっとりするほどの魅力がある。

 後もう一つ。美しさを追求する楽しさがある。プログラミングはコンピュータに対する命令書(プログラム)を作ることだ。命令書というとそっけないものだけれど、それは意味を持つ文の連なりだ。言葉があって、表現があって、順序がある。こうして言い換えてみれば、なんとなく個性や創作性が生まれてくるということが伝わらないだろうか。美しさにも色々な基準がある。一番プログラミングと関わりが深いのは、無駄なく、的確な動作をする機能美だと思う。数学の証明のように、発想を一般化して、無駄な表現を削って、問題を解決する。オイラーの等式が美しいと認められているように、完成されたプログラムもきっと美しい。

 思いついたことを書いただけなので、他にも、まだ楽しい要素があると思う。わざわざ日頃、こんな会話をすることもないけれど、プログラマは皆、何かしらの思いがあってプログラミングをしているんじゃないだろうか。酒の入ったところで、上のような話をふっかけてみるのも面白いかもしれない。

囲碁の見かた

 気温はゆっくりと下り、蝉ももう鳴くのをやめてしまった。遠くで打ち上がる花火の音が聞こえる。窓越しに空を探してみたが、暗い雲があるばかりだった。聞き間違いだったかもしれない。

 食事時、ぼんやりとテレビを見ていた。NHK囲碁番組が流れている。囲碁なんてルールもろくに理解していない。石で囲めば石が取れる、ということだけしか知らない。それでも、解説を聞きながら注意深く眺めていると、基本的な駆け引きが少しだけ分かった。

 相手が白石を打つ。その石を取るには四つの黒石で上下左右を囲む必要がある。まずは黒石を白石の隣に置いてみる。相手は白石が取られるのを嫌がって、白石の隣にもう一つ白石を並べる。すると、白石の面積が大きくなって、それらを囲むのに最低六個の黒石が必要になる。黒のプレイヤーが攻めるのに手数がかかるので、白のプレイヤーは他のところを攻めることができる。これが、シンプルな攻防だ。

 攻めようとする石は斜めに置かれる。斜めに並んだ石は、上下左右が空いているために、分断されやすい。それを防ぐために、L字につないだりすることも多い。

 攻めに手数がかかるゲームなので、簡単に石を取ることはできない。そこで、置き石を使う。もし、相手の石を囲うための石が一つ置いてあるなら、攻め手を省略できる。たとえば、もし相手が置き石の隣に石を置いたなら、すぐさま四個の石で囲む攻めができる。これはもちろん、守りにも使うことができる。

 囲碁の定石では、いきなり中央で戦うのではなく、盤面を上下に四つ折りした区画に分かれて戦うようだ。囲まれる、勝てないとわかった区画は諦めて、他の場所を攻める。そうすることで、負けそうな区画に石をつないだり、敵の攻め石を奪ったりすることができる。

 実に不思議なことに、ある戦場で、どうがんばっても石が囲まれてしまう、ということがわかったとしても、その戦場の決着はつかない。なぜかというと、手数がかかるため。攻め側が決着をつけようと動いたとしても、守り側が他の戦場を攻めてしまう。ゲーム全体としての勝ちを狙うなら、どの戦場にも気を配らなければならない。各戦場は離れているとはいえ盤面はつながっているので、異なる戦場の石が、置き石として機能する。そのため、一旦勝ちが確定した戦場であっても、油断することはできない。

 四つの小さなコロニーがライフゲームのように成長していく。終局の盤面を一目見ても、白黒の散りばめられたキレイな模様にしか見えない。極めてシンプルなルールから生じる、複雑な駆け引き。脈絡なく石を並べているように見えて、確かにそこには理屈がある。思いがけない魅力を発見して、ゲーマーとして成長したような満足感を覚えた。

「CHAOS;HEAD NOAH」の感想と、ある種のオタクの生き方について

 梅雨と台風が過ぎてから、殴りこむように猛暑が訪れた。もはや冷房なしではいられない。アイスクリームだのなんだの氷菓子を父が大量に買ってくるのだが、僕の気が向いた時には冷凍庫は空である。それもまた暑さのバロメーターなのかもしれない。

 「CHAOS; HEAD NOAH」の一周目をクリアした。主人公の西條拓巳を見ていると、オタクのみっともない部分を見せつけられているかのようで辛い。自己中心的で、被害妄想が強い。臆病なくせにプライドは人一倍高く、他人を見下している。

 彼のふるまいを見ていて、なぜそうなってしまうのかと、始終やきもきしていた。それでも、さんざん逡巡した後でヒロインを救うために立ち上がり、剣を見出す場面は心を揺さぶるものがあった。それまでストレスを溜めに溜めたぶん、開放感がすばらしかった。

 ところで、彼の心の不安定さ、未熟さはどこから来るのだろうか。いったい、どうだったら見ていて安心できるのだろうか。

 アニメやゲームは、現実と切り離して楽しむことができるものが多い。どこかへ出かける必要もなく、誰かと関わることもない。つまり、容姿、衣装、立場、礼儀など、あらゆることを気にする必要がない。どんな人でも、閉ざされた精神の世界で、物語だけに浸ることができる。

 このことが、現実世界を嫌う人々の安らぎの場になっている。スポーツも駄目で勉強もできず、顔のつくりは不細工で、恋人も友人もなく、現実世界に期待できそうなことは何もない。楽しく過ごしている人がいる中で、どうしようもない焦りや、閉塞感を抱いている。現実にコンプレックスを抱いている人にとって、精神だけで成立する世界は、心地よい居場所になるだろう。

 しかし、アニメやゲームを愛するあまり現実をおろそかにすると、悪循環が起こりうる。出かけずともコンテンツが配信されるから出無精になる。運動もしないから肥満になり、健康を損なう。誰とも会わないから髪は伸び風呂にも入らず、着替えもしない。不衛生になる。人との関係が疎遠になる。そうして、社会で好まれない人間になる。社会で好まれない人間は、つまはじきにされる。自分の生きる場所は現実ではないと思い込んでしまう。辛い現実を見たくないがために、追い立てられるようにゲームやアニメに没入する。現実に生きるための営みをほぼ切り捨てて、コンテンツを消費するだけの存在になる。

 拓巳の場合はそこまで悲惨ではないけれど、このコースに片足を突っ込んだような状態だ。そうならないためには、どうしたら良いのだろうか。

 辛く苦しい現実を見ようとしない、ということが問題のように思う。そのことが後ろめたさになり、弱点として残り続けるからだ。ダメな自分を知っているのに、それを認めないこと。本当は自分は優れているのだ、と思い込むこと。それは、自分自身を否定することだ。「こんなのは自分じゃない。もっとうまくいきられるはずなんだ」と考えたところで、現実の自分は変わらない。うまくやれる本当の自分はいつまでたっても姿を表さない。それは、自分が自分の価値を認めないということだ。皆でよってたかって、無能だと中傷するなかに、自分が混ざっているようなものだ。そんなことを考えていたら、生きていく力が失われて当然である。

 だからもし、そんな考えにとらわれて、現実から目をそらしているなら、自分をゆるし、受け入れることが必要だと思う。

 自分の肉体、容姿、能力、性格が、いわゆる社会の理想にそぐわないこと。ほとんど必要とされてないと認めること。その上で「しょうがないじゃん」とゆるす。諦めてもよいし、気が向くなら改善の努力をしてもよい。今はダメだけど、いつか良くなるかもしれない。ずっとダメなままだったとしても、まあしょうがない。今以上に他者からの評価が落ちることもない。落ちたとしてどうということもない。そういった寛容さ。ことさらに振りかざす価値よりも、そんなふうに染み出してくるものが良い。

 CHAOS; HEAD NOAH の物語は「現実を書き換えるほどの強力な妄想」の話で、上で言ったような現実を認めることとは逆の答えを見出している。刺激的だったと思うけれど、寄る辺のない妄想の先に幸せがあるとは、僕は思わない。

映画ラブライブの感想

 毎週のように雨が降った。激しい雨は少なかったが、だらだらと降り続く長雨が多かったように思う。中途半端な優しさが梅雨らしい。色あせた紫陽花が崩れそうになっている。やがて夏らしい夏が来るだろう。

 ラブライブの映画を観た。聞き覚えのあるピアノのメロディと、タイトル文字が出てくるだけで涙が出そうになる。思い返してみれば、この一年はかなりラブライブに浸かっていたように思う。アニメから入って、スクフェスをやって、ラジオを聞くようになった。今でも印象深いのはアニメのファーストライブのシーン。それまで、歌とダンスの練習をしたり、チラシを手配りしたり、努力を積み重ねてきたシーンがあったから、成功するのだろうと思っていた。幼稚園のお遊戯会みたいな、受け入れられてしかるべき舞台なのだろう。そう高をくくっていた。けれど、幕が上がってみれば、がらんどうの客席。目をうるませて立ちすくむ三人。思いがけない厳しさに驚いた。いったいこれからどうするんだ、と急激に引きこまれていった。μ'sというグループが生まれて、失敗して、笑って、成長していく姿を見ているのは、本当に面白かった。

 映画では旅をする九人の姿や、沢山のライブシーンが見れて満足だったのだけれど、一度観たくらいではよくわからないシーンもいくつかあった。特に、穂乃果が水たまりを飛ぶシーン。「とべるよ」と声をかけた女性シンガーは何だったのだろうか。

 映画の中でμ'sが解散することははっきりと宣言された。スクールアイドルだったということ、短い時間の中で、学校の中で活動してきたことを大切にしたいと言っていた。最後のライブが流れているわずかの時間が、今までにないほど鮮やかに感じられた。μ's の物語はこれで終わる。そう思うと、言いようのない焦りのような、時間がボロボロとこぼれ落ちていく様が見えるような気がした。砂が落ちるような、花火が弾けるような儚さだ。ライブの映像が切り替わり、スタッフロールが流れる。やがて劇場は暗くなった。

 終わった。すっと力が抜けた。こういう受け止めかたは初めてかもしれない。アニメの最終回は涙がでるほど心を揺さぶられたものだけれど、こうも簡単にスイッチできるのが、自分でも奇妙に思えた。それでも、だいたい物語を終えれば、なにか一言二言と語りたくなる。友人に向かっていつものごとく、整理されてない頭でなにか適当な事を言った。そしてすぐに家路につく。また何事もなかったように日常と仕事が始まる。現実は少し冷淡だ。

プログラミングの試行錯誤と最後の手段

 夜風を取り入れるために窓を開けると、蛙の鳴く声が聞こえた。もうしばらくすると蚊が入ってくるようになるので、この空気を味わえる季節は長くはない。遠くから聞こえる、表現しがたい滑らかな音は風の音だろうか。あまり考えたこともなかったが、風の音にも色々な種類があるものだと感心した。

 特別な話題もないので、仕事のことを思い浮かべる。他の人と協力する仕事がちらほらとあって、なんとなく人がプログラムを書く様子を見ていた。書いたプログラムが一発で動くのは稀なことで、たいていの場合は、ああでもないこうでもないと試行錯誤することになる。

 一つ目。プログラムを一行ずつ読んで間違いがないか探す。誤字がないか、命令が漏れてないか確かめる。だいたい自分でプログラムを書いたばかりなので、間違いはみつからない。

 二つ目。似た処理をしている箇所を真似してみる。よく知らないライブラリやフレームワークを使うときには、よくやる。確かな根拠があってそうしているわけではないので、動いても動かなくても理屈はわからない。もし、それが成功したなら、失敗した時と何が違うのかを確かめるのが好ましい。雑にこれをやると、コピペが氾濫してプログラムは著しく劣化する。

 三つ目。プログラムを少しずつ変えながら実行する。入力を変えた時に、出力がどのように変化するかを観察する。変数をプリントする、というデバッグ方法は、これに当たると思う。

 四つ目。ググる。エラーメッセージが出ているならそれを使ってキーワード検索する。英語が出てきても逃げずに良さそうなところを探す。個人の日記は信頼性に難があるので、ほどほどに見る。技術を提供している公式のドキュメントを見るのが安全(公式がクソな場合もあるが、その場合は技術の選択を誤ったのだと思う)。技術者向けの質問サイトでも良い。ここでの調査の質が最後の手段の説得力に関わってくる。

 五つ目。先輩や同僚に泣きつく。相談の体でもよいが、愚痴気味に声をかけるという手もある。こんな方法やあんな方法を試したけれどうまく行かなかった、と語る。とにかく話を聞いてもらう。何かヒントになることが得られれば良いが、そうでなくても良い。少なくとも「自分以外の人でも、動かない原因は突き止められなかった」という安心感が得られて、次のステップに進むことができる。

 六つ目。諦める。採用しようとした方法は、ダメな方法だったのだと割りきって、別の解決策を探す。たとえば代わりとなるツールを探すとか、別のライブラリを使うとか、設計が変わっても仕様が満たされれば良い。それでも実現できないか、実現するのが果てしなく面倒な場合は、仕様を変えることもあるかもしれない。仕様を変えるには、仕様が変わっても目的が果たされることを説明しなければならない。

 だいたい順番は入れ替わり戻ったりもする。人によってはもっと別なアプローチがあるかもしれない。なんとなく新入社員や学生の世話をしてみた感じでは、彼らは五つ目と六つ目の方法を取らないことが多い。声をかけてやると、だいたいそういう流れになるけれど、自分から踏み込んでくる人はほぼいない。

 相談できない理由はいろいろ考えられる。話しかけるのが怖い、説明が下手でどもる、失敗しているのを見られたくない、とか色々。それでも、相談という手法は強力なので、できれば使ってほしいと思う。

「楽園追放」と人間らしさについて少し

 窓を開けていると学生たちのはしゃぐ声が聞こえる。元気が良いなと見下ろすことができるのは、大人の特権だ。社会人になってから、卒業も進級もなく、一定の速度で生きている。どちらも幸せなことだと思う。

 楽園追放というSF映画を見た。映画自体の面白さはさておき、なんとなく人工知能について思い出したことを、少しだけ書いておこうと思う。

 人ではないものに知能を与えるということは、機械に人間らしさを与えることなのだと思っていた。恥ずかしいことだが、錬金術のような神秘に満ちた学問なのだと思っていた。人間らしい発想、ひらめき、曖昧さ、柔軟性、飛躍、そういった表現しがたいものこそが知能であるように思えた。しかし勉強してみると、そのような思想ではなく、実利のある工学的解決を目指す分野が主流だった。言い換えると、結果が役に立つならば、人間らしさなど備えている必要はない、という方針で研究を進めるのが普通だった。

 問題はデータと解の条件によって表現される。数式とアルゴリズムによって、解決される。教わった知識のほとんどは、いかなるアルゴリズムを用いるか、いかなるデータ構造を用いるかということだった。それなら教養の数学でもやっているほうが、よっぽど知的で面白いんじゃないだろうかと思った。

 当時はそんな風に思っていたけれど、そもそも人間らしさというのは何なのだろう。楽園追放の作中に出てくるロボット、フロンティアセッターはとても人間らしく見えた。ひとつには、完璧に会話ができていた事があると思う。今の人工知能でも、まともな会話はほとんどできない。何か悩みを相談して解決するだとか、好きな音楽について語るとかはもちろんできないし、もっと簡単に、最近あった出来事を話し合うとか、自己紹介を聞いて受け答えするとか、そういったこともできないだろう。

 現代のコンピュータが会話できないのは、彼らに経験というものが不足しているからだと思う。人の会話には背景とか文脈とかがあるけれど、コンピュータにはそれがない。逆に言うと、人間は背景とか文脈とか言った部分に情報を溜め込んでいて、それを出し入れしているから、色々な話題に対して「似たようなことが合った」「共感できる」「こうしたらうまくいくかもしれない」「もしそうだとしたらどんなことが起こるだろうか?」とかいろんな反応が返せるのだと思う。こういった文脈とか背景とかいうものは、データとして表現しがたい。また、経験から感情を導き出したりする技術もない。

 フロンティアセッターにそれができていたのは、自身の開発者たちと会話しながら過ごしてきたからだろう。また彼は、何百年という時間をかけて、作業用ロボットを作成したり、燃料を蓄えるために取引をしたりして、外宇宙探索の準備をしていた。その過程で、色々なアクシデントを経験してきたのだろう。だから、会話をできるだけの下地がある。

 さて、こうして書いてみたわけだが、ここまでの文章は、自分の経験や背景から引っ張り出してきた話題なわけで、まさに人間らしさの要因を備えているはずだ。他の人にどう見えているかわからないけれど、俺は人間らしいのだと感じられてささやかな満足感がある。

火のゆらめき

 今日はとても暖かく、良い天気だった。ただ駅まで歩く短い時間でさえも、特別な穏やかさに包まれているかのように感じられる。母に言われてようやく気づいたのだけれど、庭の衰えた桜も、どうにか花を咲かせていた。

 つい先日、ボードゲームに参加させてもらった。非常に面白かったのだけれど、プレイを終えてからしばらく、熱っぽさと頭痛、それから強い疲労感があった。それでも、いつもどおりに帰宅して、毎日続けているビデオゲームを再開した。疲れているはずなのに、妙に眠気がなくていつも以上に夜更かしをしてしまった。

 翌日、昼過ぎに目覚めて、朝食も取らずにタブレットに触れていると、突然、何かのスイッチが切れたように、脱力感に襲われた。そこでゲームをすることが酷く億劫で無意味に感じられた。この虚無感は何だろう。タブレットを手放して、じっとしていた。何もしないと、何かを考えてしまう。何のためにゲームを続けているのだろうか。

 まずは、除外しておきたい考えが真っ先に浮かんでくる。終わりが無いから続けている。他にすることがないから続けている。悪くはないが、暗い話になりそうなので止めておく。それから、何かのために続けているわけではない、すべてのことに理由があるわけではない、という冷たい考え方。嘘ではないが、何にでも当てはまることを大げさに言ってもつまらない。

 有名な誰かが言っていたことを思い出す。その人は、ゲームを続けていられるのは、自身の成長を目的としているからだ、と言っていた。過去の対戦を観察し改善点を探す。改善点を身体に覚えさせ、正確に再現できるように反復練習する。実戦で改善されたかどうか検証する。そのプロセス、確かに強くなる手応えが楽しい。天辺を探すのではなくて、いつだって、今の自分よりほんの少し強ければ良い、と言っていた。少しずつ少しずつ、その積み重ねが、達人への道のりなのだろう。寒気のするような考え方だ。そんな求道者みたいな考えは持てそうにない。

 自分の考え方とは一致しないけれど、そういう情熱的な考えに触れると、意味もなく前向きな気持ちになってくる。マラソンの観客もそんな気持ちなのかもしれない。何の答えも見出してはいないけれど、達人の見る世界を思い描くだけで愉快な気持ちになれたので、今日はそれで良しとする。