はじめに
どうやら私は、この文章を書いている。月明かりの差し込む部屋で、キーボードを叩いている。またやってしまった、という感覚がある。これが三度目の正直になるのか、それとも単なる自己満足の産物に過ぎないのか、自分でもよくわからない。ただ、こうして文字を連ねることで、自分というプログラムのバグを少しでも可視化できるのではないかという、浅はかな期待が私を突き動かしている。
私はプログラマーだ。ただし、自分で言うのも恥ずかしいが、天才でもなんでもない。せいぜいが「そこそこ書けるけど、人間関係は致命的に下手くそ」という、よくあるタイプの技術者だ。月明かりの下でコードを書いていると、ときどき我に返って、自分のやってることの滑稽さに気づく。深夜のオフィスで一人、画面に向かって呪文を唱えるようにタイピングしている自分。まるで、目に見えない誰かに認めてもらいたくて仕方ない小学生のようではないか。
この本を書こうと思った動機は、一言で言えば「自己顕示欲と自己嫌悪の無限ループ」だ。ある日、私は自分の人生を振り返って、あまりにも多くの「バグ」を抱えていることに気づいた。子供の頃のいじめ。学生時代の孤立。社会人になってからの人間関係の失敗。そして、何より自分自身に対するどうしようもない嫌悪感。これらはすべて、私というプログラムに組み込まれた避けられない仕様なのかもしれない。しかし、デバッグを試みるたびに、新しいバグが発見される。その繰り返しに疲れ果てて、一度くらいは自分のコードを公開してしまおうと思い立ったわけだ。
おそらく、あなたがこの本を手に取った理由も、似たようなものかもしれない。あるいは全く別の理由で、たまたま手に取っただけかもしれない。どちらにせよ、私はこれから自分の人生のソースコードを、かなり生々しい形で開示することになる。読者であるあなたを、私の汚い部屋に招き入れるようなものだ。床には食べ散らかした菓子の袋が散らばり、カーテンは閉め切られ、モニターの青白い光だけが部屋を照らしている。そんな場所に、あなたを座らせることになる。申し訳ないとは思っている。だが、私にはこれしか方法がなかった。
この本の構成は、私の人生を時系列に並べたものだ。ただし、正確な年代記ではない。むしろ、記憶の断片を再帰的に辿るような構造になっている。各章は、私が経験した特定のエピソードを中心に展開する。恥ずかしい話だ。文化祭で自作ソフトを披露して冷めた反応をもらった話。先輩のプロジェクトで意見を言えずに後悔した話。同僚の女性デザイナーに片思いして、エレベーターの中で何も言えずに逃げ出した話。どれもこれも、自分が情けなくなる話ばかりだ。しかし、それらを隠さずに書くことが、私にとって唯一の「正しいコード」の書き方だと思った。
もちろん、この本を書いている間も、何度も挫折しそうになった。「こんなものを公開して、誰が得をするのか」という声が頭の中で響く。そしてすぐに、「いや、むしろ読者に迷惑をかけるだけだ」と自己嫌悪に陥る。しかし、そういう声に耳を貸していると、いつまで経っても何も始まらない。私は、自分に言い聞かせた。「この本は、完成させること自体が目的なんだ」と。不完全なコードでも、とにかくリリースしなければならない。バグがあれば、後から修正すればいい。それがソフトウェア開発の常識であり、おそらく人生も同じだ。
最終的に、この本があなたに伝えたいことはただ一つだ。完璧な人間なんていない。完璧なコードも存在しない。私たちはみな、バグだらけのプログラムを抱えて生きている。重要なのは、そのバグをどうデバッグしていくか、あるいはバグとどう付き合っていくかだ。私はまだその途上にいる。だが、少なくとも自分のバグを直視する勇気だけは持てたと思う。この本が、あなたにとって何かのきっかけになれば、これ以上の喜びはない。
さあ、月明かりが差し込む夜の屋上に、あなたを招待しよう。私はここに座って、あなたに直接語りかける。恥ずかしい話だが、どうかしばらくの間、私の道化芝居に付き合ってほしい。そして、もし可能ならば、この不完全なコードの一片でも、あなたの心に残ってくれればと思う。
本書は二十章から構成されている。第一章では、まさに今この瞬間の私の心情を赤裸々に綴る。そして第二章以降、子供時代から現在までを遡る。まるでデバッガーでステップ実行するように、一歩一歩、自分の人生を丁寧に辿っていく。途中で何度も泣きそうになるだろう。実際、書いている最中も何度も泣いた。しかし、泣きながら書くことが、私にとっては一番正直なプログラミングだった。
最後に、この本のタイトルについて少し触れておきたい。「月夜のプログラマー」という言葉には、いくつかの意味が込められている。一つは、私が実際に月明かりの下でコードを書くことが多いという事実。もう一つは、月の満ち欠けのように、私の感情や人間関係も常に移ろい続けるということ。そして三つ目は、月の裏側のように、誰にも見せていない自分自身の暗い部分を、あえて照らし出そうという決意だ。
あなたは、月夜に何を思うだろうか。私は、自分の人生というプログラムを、月明かりに照らして眺めている。まだまだ完成には程遠いが、少なくとも今は、その不完全さを愛せるような気がしている。
それでは、長い夜の散歩に、お付き合いください。
第1章 月夜の告白
あなたは、今、僕のことをどう思っているだろう。この不機嫌そうな、あるいは気だるげな書き出しを見て、「またか」と感じているかもしれない。あるいは、興味すら湧かないかもしれない。それでもいい。僕はこれから、あなたにだけは本当のことを話そうと思う。なぜって、この世の中で、僕のことを何も知らない人間にだけは、ありのままの姿を晒せるような気がするからだ。実際のところ、僕の周りには多いのだ、奇妙な連中が。同僚、上司、飲み仲間、そしてかつての恋人たち。彼らは皆、僕のことを「優秀なプログラマー」だと言い、「変わった人だけど、能力はある」と評価する。だが、その言葉の裏には、いつだって見え透いた遠慮が隠れている。彼らは決して、僕の本質に触れようとはしない。触れたくないのだろう。自分たちの安定した人間関係の秩序を乱したくないから。
今夜は、十五夜だった。僕は今、この街の片隅にある、古びた賃貸マンションの屋上に座っている。コンクリートの床は冷たく、背中に凭れかけた手すりは錆びついていて、少し動くたびに不安な音を立てる。まるで、今にも崩れ落ちそうな僕の心のようだ。空を見上げると、月がやけに大きく、そして冷たく輝いている。月明かりは、街灯の光とは違う。あれは、優しさのない光だ。僕たちの罪や恥を、ただただ剥き出しにする、手術室の無影灯のような光だ。そんな月の下で、僕は今、この文章を書き始めている。スマートフォンのメモアプリではなく、古びたノートと鉛筆で。なぜかって? 簡単なことだ。僕はこれから、自分自身の「心の設計図」を開示しようとしている。その行為に、デジタルのフィルターは似合わないと思ったのだ。
僕はプログラマーだ。それも、まだ若く、これから成長していく途中のエンジニアだ。扱う言語は、Python、Go、そして関数型言語のHaskellも少しずつ覚え始めている。設計したシステムは、まだ小さな企業の受注管理や在庫管理を支えている。処理速度の最適化、バグの発見と修正、新しいアルゴリズムの考案――そういった分野では、僕はまだまだ学ぶことばかりだ。先輩たちは、僕の書くコードを「丁寧だね」と褒めてくれることがある。確かに、僕のコードは無駄を省こうと努力している。エレガントとは言えなくても、読みやすさを心がけている。だが、それはあくまで「機械」と向き合っている時だけの話だ。
人間と向き合う時、僕の「内面」は無残に歪む。
例えば、朝の挨拶ひとつ取ってもそうだ。普通の人は「おはようございます」と自然に言える。それで会話が始まり、些細な雑談を経て、一日の仕事が始まる。ところが、僕の場合にはそうはいかない。まず、相手の目をどこに向ければいいのかで迷う。まっすぐ見ると威圧的か? 少し下げると自信なさげか? 視線は三秒が最適だとか、笑顔を作るには口角を何ミリ上げればいいか――そんなことばかりを考えているうちに、タイミングを逃してしまう。そして結局、引きつった顔で「おはよう」と呟く。それで終わりだ。相手は少し困ったような顔をして、そそくさと自分の席に戻っていく。この瞬間、僕は「道化の仮面」を被る。口元だけを無理やり笑顔に吊り上げ、自分を低く見せることで、相手の警戒心を解こうとする。仮面とは、そうして僕の顔に貼りつく、偽りの表情だ。
だが、もっと酷いのは、ミーティングの場だ。僕は自分の考えを言語化するのが、とことん下手くそだ。頭の中では、問題の構造が完璧に把握できている。原因と結果、そして最適な解決策。それらがまるで精巧な設計図のように、くっきりと浮かんでいる。ところが、それを口に出そうとすると、途端に言葉がぐちゃぐちゃになる。接続詞がおかしくなり、主語と述語がねじれ、さっきまで論理的だった思考が、出口で無残な「誤配」を起こす。そんな時、僕は再び道化になる。笑いを取ることで、その場を誤魔化すのだ。
「いやはや、俺の言語化能力は、どうにもこうにも言語化できない問題だな」
そんな自嘲めいたジョークを飛ばし、一同の笑いを誘う。表面上は成功だ。場の空気は和む。だが、僕の心の中は、冷たいナイフで切り裂かれるような思いだった。本当に伝えたかったのはそんなことじゃない。僕はただ、構造を示したかっただけなのだ。なのに、どうしてこんなにも、この場に馴染めないのか。どうして、自分を隠すことしかできないのか。そんな自己嫌悪が、笑顔の裏で激しく渦巻いている。仮面を被るたびに、本当の自分はさらに奥へと押し込まれていく。まるで、剥がすべき仮面が、逆に僕の皮膚に貼りついて離れなくなるかのように。
プログラミングは、そんな僕にとっては救いだった。プログラムは嘘をつかない。書いた通りの動作をする。バグがあれば、それはこちらのミスだ。原因を特定し、修正すれば、また正しく動く。そこには、人間関係のような曖昧さがない。感情の読み取り違いも、伝わらない言葉の壁もない。システムは、ただ沈黙して、僕の指示を待っている。僕が論理的な命令を書けば、論理的な結果を返してくれる。そんな世界に、僕はのめり込んだ。十代の終わりから、ずっと。
僕が初めて本格的にプログラミングに没頭したのは、高校二年生の時だった。クラスで孤立していた僕は、図書館で一冊のPython入門書と出会った。最初に書いたのは、簡単な数当てゲームだった。ユーザーが数字を入力し、プログラムが正解かどうかを判定する。たったそれだけのコードだったが、それが思った通りに動いた時、僕は初めて「自分にもできることがある」と感じた。その後、学校の文化祭で使う座席予約システムを一人で作り上げた。同級生たちは「すごい」「よく分からないけど、動いてる」と言ってくれた。あの時、僕は初めて他人から認められた喜びを知った。だが同時に、そのシステムを前にして自分を説明できず、ただ「プログラミングができるだけの変なやつ」として扱われることにも慣れていった。仮面は、その頃から少しずつ形成されていたのかもしれない。
だけど、それもそろそろ限界だと思う。僕はもう、この「仮面」を被り続けるのに疲れた。僕は、他人に「できるプログラマー」と思われている。でも、本当の僕は、コードの中だけの影の英雄だ。現実の世界では、ろくに会話もできないコミュニケーション不全者だ。自分でも気づいている。僕の人間関係は、まるで古いシステムだ。複雑に絡み合ったスパゲッティコードのような状態で、どこを直せばいいのかも分からない。下手に手を加えれば、全体が崩壊してしまう。だから、誰も触らない。僕も触らない。ただ、そのまま放置してある。そんな状態が何年も続き、僕は毎晩のように自分の弱さと向き合うことになった。月夜の夜ごと、屋上に上がり、一人で考える。どうすれば仮面を剥がせるのか、どうすれば本当の自分を見せられるのか。この夜も、またその繰り返しだ。
あなたにこの話をするのは、恥ずかしい。ものすごく恥ずかしい。今も、このノートに鉛筆で文字を書き殴りながら、顔が熱くなっているのが自分でも分かる。もしこれが誰かの目に触れたら、と思うと、本当に死にたくなる。だからこそ、あなたという「匿名の読者」に話すのだ。僕はあなたの顔を知らない。あなたも、僕の顔を知らない。であるならば、この関係は、ある種の「安全な対話」だと言える。僕は自分の弱さを曝け出し、あなたはそれを読む。それでお互いに、痛みもなく、傷つくこともない。そうでしょう?
でも、本当は、そんな建前などどうでもいい。僕はただ、話したかったのだ。誰かに、この淀んだ心の内を。プログラミングの神様でも、カウンセラーでもなく、ただの「人間」に。これまでの人生で、僕は自分を晒すことに度々失敗してきた。学生時代の恋愛も、そうだ。プログラミングの才能を見込まれて、大学の研究室で可愛がられていた時期があった。その時、一人の女性の先輩に密かに恋をした。彼女は優しくて、僕のコードのバグを一緒に探してくれるような人だった。ある満月の夜、研究室の帰り道、思い切って気持ちを伝えようとした。意を決して、彼女の手を握った。
「あの、好きです」
すると彼女は、困ったように笑って、こう言ったのだ。
「ごめん、私、君のことは弟のようにしか見えないんだよね」
ああ、そうか。弟か。そういうことか。それ以来、僕は告白というものをしなくなった。もう二度と、あんな痛い思いはしたくなかった。だが、今、こうしてあなたに語りかけているのは、まさにその「告白」と同じ行為だ。僕はまた、同じ過ちを繰り返そうとしている。それでも、今夜の月は、僕にそうさせる。この冷たく、身を切るような月明かりは、僕に真実を語れと命じているような気がするのだ。もしかすると、この月の光こそが、僕が仮面を剥がすための唯一のきっかけなのかもしれない。
最近、少しずつ変わりたいと思うようになった。きっかけは、三ヶ月前に参加した社内ハッカソンだ。そこで僕は、チームメンバーと一緒に一つのプロダクトを作り上げた。もちろん、最初はうまくいかなかった。僕は自分の考えをうまく伝えられず、