007 - hacker.learn(MagiLanguage);
眠りこけるボスを背負ってオフィスに帰ってきた僕は、僕の部屋である二階の一室でボスをベッドに寝かせたあと、一階に置かれていたソファに横になった。もちろん送り狼をする度胸なんて僕にあるはずがない。
そして、明かりが見当たらず、マギデバイスも持っていない僕には暗い中で本を読む術もないため、早々に眠りにつくしかないのだ。デスマーチ中は眠る暇もなかったのに皮肉だな。
異世界にやってきて初日だというのに、濃厚な一日だった。天井の木目を眺めながら、つらつらと今日あった出来事を考えていると、脳内コンピュータはゆっくりとスリープ状態へ落ちていった。
//----
僕の家には父親が買ってきたパソコンが置かれており、小さい頃からパソコンに触れる機会があった。当時には珍しくインターネットにもつながっていたけど、昔のインターネットというのはとにかく不便で遅くて、画像一枚表示するのにも数分掛かったりする。それでも、同じ趣味を持つ人とチャットするのは眠るのを忘れるほど楽しいし、友達の間で流行っていたゲームの裏技を調べて教えてあげると、一躍クラスのヒーローになれた。
コンピュータは僕にとって切っても切れない存在となり、次第にもっとコンピュータを上手く使いこなしたいという欲求が出てくるようになった。ソフトウェアをインストールする事で、もっと便利になる事がわかったのだ。
インターネットには自分が作ったソフトを無料で公開している人も大勢いたけど、かゆいところに手が届かなかったり、デザインが使いづらかったり、とにかく細かい不満があった。普通なら、無料だし素人が作ってるのだからしょうがないと諦めるところだけど、幼い僕はどうやら少数派に属していた。新しいソフトを自分で作ってみようと考えるようになったのだ。
かくして、僕はプログラミングの世界に飛び込む事になった。
ソフトウェアを作るには、プログラミング言語と呼ばれる専用の言語で、ソフトウェアの元となる「コード」を書く必要がある。この作業の事をプログラミングと呼ぶ。
プログラミング言語は基本的に英語なので、日本人で小学生の僕には少々ハードルが高かったものの、小学生の膨大な暇に飽かしてすぐにスラスラとコードが書けるようになった。人付き合いの苦手な僕にとって、プログラミングは最高の暇つぶしになったのだ。
ところで、プログラミングは大工仕事に例えられる事がある。木を切ったり、削ったり、釘を打ったり、簡単な物を組み合わせて家やビルなど複雑な建物を作り出すのと、プログラミング言語の様々な要素を組み合わせて複雑なソフトウェアを作り出すのが似ているからだ。
熟練の棟梁のような上手な人が書いたコードはシンプルなのに機能的で、「美」を感じる事がある。この「美」はプログラマ独特の感覚で、そうでない人にとっては理解不能だろう。コードの美しい書き方で一日中議論できるのが、プログラマの習性なのだ。
マギランゲージの解説を読んでいる僕も、まさしく、その「美」を感じていた。
確かに、難解である。ただ、この難解さというのは、マギランゲージが極力無駄を省き、最小限の機能しか提供しないよう意図的に『設計』されているためではないかと思えた。
例えば、物理現象を操るのに計算のための加減乗除は欠かせない要素だが、マギランゲージでは計算方法が二つだけしかない。「1増やす」か「1減らす」かだ。それ以外の、1+2や3−2といった簡単な計算ですら、自分で1+(1+1)や(1+1+1)−1−1という形に落とし込まなければならない。これでは、計算一つとっても大仕事になってしまうのも頷けるだろう。
確かに、「1増やす」のと「1減らす」のが出来れば、無理数でもない限り、どんな数字でも表現できる。整数にかぎらず小数であっても、小数点以下を別途計算すればいいだけだ。だが、できるからと言って、それで計算しろと言われても困るだろう。
また、もう一つシンプルなルールが導入されている。それが「命令」だ。
そもそも、現実世界の物理現象を操るとはどういう事だろうか。ボスが掃除の際、マギサービスで風を吹かしていたが、風を吹かすにはどのようにすればいいのだろうか。
科学的な常識から言えば、例えば扇風機のようにファンを回転させて気流を生み出したり、気圧の差を作り出して空気が一方向に流れるようにするだろう。
だが、マギランゲージでは簡単だ。答えは『風』に『吹け』と命令するのである。
具体的には、まず命令の対象となる『風』を決めて、次にそれに『吹け』という命令を送りつける。簡単そうに聞こえるが、これが意外と難しい。マギランゲージでは常に厳密さが求められるからだ。
物語に出てくるようなファンタジーの魔法であれば、白ひげの魔法使いが『風よ吹け!』と唱えるだけで思うがまま風を吹かす事ができる。でも、マギランゲージではそんな
命令の対象となる『風』をどこからどこまでとするか。どの方向に、風速はどの位で、いつまで『吹け』なのか。融通のまるで効かないコンピュータを相手にしているかのように、一つ一つ明確に命令しなくてはならない。ひたすらに面倒だ。
面白いのは、先ほど触れた計算ですら、この「命令」という仕組みで成り立っているところだ。『数』という対象に『1増えろ』『1減らせ』という命令を送りつける事で、計算を表現しているのだ。
要するに、マギランゲージとは何かに対して命令するための方法であり、それ以外の事は何もできない。マギランゲージで書かれたコードは命令に始まり命令に終わる、命令の集まりだという事だ。
一つのルールを決めるだけで様々な事柄が表現できるようになる、こういうシンプルさをプログラマは『美しい』と感じる。かくいう僕も、痺れっぱなしだ。最高にクールだ。
そして、僕にはこの『シンプルなルール』に見覚えがある。なぜならこれは、地球で『オブジェクト指向』という名前で呼ばれていた概念だからだ。
//----
僕が地球と異世界の思わぬ類似点に感動していたところ、二階からこめかみを押さえたボスが唸りながら降りてきた。眉を寄せて、まるで難解なバグに遭遇したプログラマのような顔をしている。
「うう……おはよう。ひどい二日酔いだ……」
「おはようございます、ボス。大丈夫ですか?」
「ああ……。水、水が飲みたい」
そう言われても、コップもないし水を作り出す事もできない。朝起きて顔を洗ってすらいないのだ。自分のマギデバイスを持っていないのがもどかしい。何より、マギランゲージを学んでいると、一刻も早く手を動かしてみたくなるのだ。
そんな僕の困惑と焦燥を見切ったのか、ふと気づいたボスは懐からマギデバイスを取り出すと、僕に手渡してきた。
「そういえば、君はマギデバイスを持っていなかったな。私のを貸してあげよう」
「えっ、いいんですか?」
「ああ、問題ない。私には予備があるからな」
そういう事ならありがたく借り受けよう。ボスから差し出されたマギデバイスを受け取って、まじまじと観察する。長さは20cm程度で、鉛筆より太く、公園にある鉄棒よりは細い。重くはなく、同サイズの木の棒と同程度の軽さだろう。素材はわからないが、表面は黒くスベスベとしていて木製ではない。プラスチックともまた違う、不思議な感触だ。何かの金属だろうか。
「ああそうだ。所有者登録をし直さなくてはならないんだったな」
ボスは僕が手に持つマギデバイスに触れると、呪文を唱える。
「【トランスファー・オーナーシップ】」
ピカッとマギデバイスの先端が光り、それを確認したボスはマギデバイスから手を離した。どうやら、マギデバイスは自身の所有者を認識しているらしい。自分のマギデバイスが他の人に使われないようになっているのか。どうやって個人を識別しているのかはわからないが、よく出来ているな。
「これでそのマギデバイスは君のものだ。マギサービスを利用するには利用者登録する必要があるのでまだ使えないが、マギランゲージを使う事ぐらいは出来るだろう」
「えっ、マギランゲージが使えるんですか!?」
「ああ。確か、【オープン・エディター】だったかな。マギランゲージを書き込むためのスクリーンが出てくるはずだ」
「【オープン・エディター】!」
興奮を抑えられないまま、ボスが教えてくれた通りに呪文を唱える。すると、マギデバイスの先端から一枚の紙のような、白い『板』が出現した。ふわりと重さを感じさせない動きで、僕の目の前の空間に浮いて静止する。
『板』に触れてみるとほのかに暖かく、手に持てば自由に動かす事ができた。これがボスの言っていた「スクリーン」と呼ばれる物なのだろう。すごい。不思議だ。
「そこに、マギデバイスをペンのようにして書き込む事ができるはずだ」
「なるほど!」
早速、マギデバイスをペンのように持ってスクリーンに向かう。書き込むのは、先ほど学びはじめたばかりのマギランゲージだ。マギデバイスという名のペンは、インクもないのにスクリーン上に線を描いていく。マギランゲージの文字を書くと、一文字一文字がまるで文字認識されたかのように、整形されてスクリーン上に書き込まれていく。調子に乗った僕は、スルスルとペンを動かして脳内のコードを吐き出していく。
楽しい。
この時、僕は一心不乱にペンを動かしていたらしい。時折マギランゲージの解説本に目を通しながらコードを書き上げていく様子は、鬼気迫るものがあったとはボスの言だ。
昔から僕は、プログラミングに集中し始めると『ゾーン』に入る事がある。外界からの音がシャットアウトされて目の前のコードしか見えないという、一種のトランス状態になる。この時の僕の生産性は常時に比べると倍以上。定量的に測った事があるので間違いない。
そして、もう一つ、コードを書いている最中の僕には『悪癖』と呼べるものがある。
「ボス! 書いたマギランゲージを実行する方法は!?」
「え? あ、ああ、えーと、何だったかな……」
「なんで肝心な事を覚えてないんですか! いいです、自分で探します!」
これだ。
要するに、コードを書いている僕は、極端に性格が変わる。
短気になり、些細な事にイラつき許せなくなる。
傲慢になり、自分のコードこそが最高だと思うようになる。
怠惰になり、コードを書く以外のあらゆる事が面倒になる。
普段はコミュ障であがり症でまともに人と会話もできない僕だが、この時ばかりはスイッチが切り替わったように強気になる。二重人格というわけではない。こういう性分なのだ。
前職でコードを書いている僕に、いつもの調子で仕事を押し付けようとした同僚が手ひどく撃退されてからというもの、同僚たちの間では
『短気・傲慢・怠惰』と聞くと、人として悪いところばかりのように思えるが、実はこれらは「プログラマの三大美徳」と呼ばれている。言い訳ではないけれど、これらはプログラマにとっての美徳、つまり良い性質とされているのだ。
短気な人は、些細な事が気になり直したくなる。気が利くプログラムを作りたくなる。
傲慢な人は、他人が文句を付けられないような最高のコードを書こうと思うようになる。
怠惰な人は、面倒な事を省くために全てを自動化する。質問に応えるのすら面倒だから、質問されないほどの、わかりやすいプログラムやマニュアルを作る。
「【スタート】! 【エグゼキュート】! 【ラン】!」
スクリーンとマギデバイスに触れながら、思い当たる『実行』を意味する言葉を次々に試していく。最後の【ラン】で反応があった。スクリーンがパッと明るく輝き、そして僕が考えた通りの結果が得られた。
「……これ、は……」
言葉を失ったボスの前に現れたのは、水の球。
直径10cmほどの球状になった水、その体積はおよそ524ml。ペットボトル一本分程度の水の塊が、ちゃぷちゃぷと音を立ててボスの目の前に浮かんでいた。
「お望みの水です。ボス」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます