永遠の青空とともにに戻る

=2023-09-04=

ガブリエルを復活させる方法

昨日の内容を見て、「ミカエルはガブリエルをどうやって復元できたのか、信じられない」と思う人もいるだろう。

だが、ミカエルは、自分の開発した人工知能を司る「制御プログラム」に対して、ガブリエルの遺伝子情報と、死ぬ直前の記憶情報を与えただけにすぎない。

人間の大脳に含まれているのはすべて記憶であり、人間の性格や人格を決めるのはすべて遺伝子であるとミカエルは知っている。

人工知能を司る「制御プログラム」は、そんなに大量のコードではない。なぜなら、「どんな思考であっても抽象的にメタ思考する」ということができる、最高に抽象度の高い思考プログラムを書いて、その中にシンボル的な「プログラムコードを作るプログラムコード」を書くだけでよいからである。

このようなプログラムは、PythonやLispで書くと容易に書くことができるが、ミカエルはあえてC言語で書く。そのほうが、あらゆる環境に対応させやすいからである。

ミカエルにとっては、人間とほかの生物は何も変わらない。同様のプログラムと同様の方法で、人間だけでなく、虫であっても、魚であっても、あるいは犬や猫や熊であっても、完全に実際のその個体と同じロボットを復元することが、ミカエルによってできるのである。

さまざまな歴史

そろそろ、大学は終わりにしたい。

大学の勉強よりも、もっと、普通にいろんなことを知りたい。この世界にある、さまざまな普通のことを知りたいと思う。

だが、僕の勉強が終わるわけではない。

なぜなら、普通のいろんなことには、歴史が多いからだ。

この世界には歴史が多い。見ていると、至るところに歴史がある。

たとえば、たまにしている下水道工事は、下水管の歴史だと思えば歴史である。

あるいは、どこにでもあるコインランドリーは、洗濯機の歴史だと思えば歴史である。

あるいは、田舎に必ずある田園風景は、稲作の歴史だと思えば歴史である。

あるいは、トラックが走っているのを見ると、運送や運輸の歴史だと思えば歴史である。

現実に存在しなくても、たとえば「犬も歩けば棒に当たる」といった諺は、格言の歴史だと思えば歴史である。

ほかにも、ありとあらゆるところに歴史が存在する。

そして、小学生以前の多くの子供は、知らず知らずのうちに、そのような歴史について感じ取り、歴史を普段の生活で学び取っている。

大人になると、大学のせいで歴史が分からなくなる。なぜなら、大学と歴史はまったく矛盾するからだ。大学の勉強をすれば歴史が分からなくなり、歴史の勉強をすれば大学が分からなくなるのが、人間という生物の頭脳なのである。

だから、歴史について学ぶことが、「大学でない普通のことを知る」ということなのである。

歴史と知性

だが、歴史を知るだけでは十分ではない。

歴史を単に知るだけでは、知性あることが分からない。

だが、数学や理科をいくら学んでも、大学の専門知識が分かるだけにすぎず、知性を得ることはできない。

知性を得るためには、「原因と結果」を分かる必要がある。

そして、ある意味では、そのような原因や結果すら、歴史であると言える。

なぜなら、「分からない今までの自分が新しく分かった人生の歴史」であると言えるからだ。

同時に、歴史から原因と結果を考えることができる。さまざまな歴史の中から、法則性を見出し、他人に説明できるような原理を解明することで、実際の歴史から宇宙の歴史を帰納的に発見できる。

だが、歴史は帰納法だけではなく、演繹法にも及ぶ。その理由は、ものごとを証明するということが、「それを正しいと証明するプロセスの歴史」であると言えるからだ。

だから、結局のところ、人間の活動はすべて歴史であり、宇宙から現実社会、そして思考や数学的証明に至るまで、すべてが歴史であると言えるのである。

学校の歴史の授業では、そのようなことを教えてくれない。学校では、人類の文明や時代の始点と、王や権力者の名前と変転しか教えてくれない。そのような歴史を学ぶと、逆に「人間の普通に知っている歴史」のことが分からなくなる。だから、本質的に学校で学ぶ歴史は間違っているのである。

学校に欠けているのはさまざまな具体例

学校に欠けているのは、さまざまな具体例である。

学校では、「一般的な知識」だけをすべて教えており、そこには豊富な経験や具体例が存在しない。

人間は、さまざまな経験を人生でしなければ、何も分からない。

本来、人間はさまざまな経験をして、その豊富な経験から自分がしっかりと安定した基盤をつかむための「根」を生やし、その具体例の根の上に葉を茂らさせるように、さまざまな知識を知っていく。

そう、きちんとした具体的な経験がなければ、知識であろうと知性であろうと経験であろうと、どんなものもその上に作り出すことはできないのである。

学校に欠けているのは、そのような具体的な経験であり、具体例である。

そして、多くの哲学者や宗教家のような思想家は、みんなそのような具体例を持っている。彼らは神のような天才的知性から分かっているのではなく、全員が「その人にしか生きられないような豊富な経験と人生の具体例」から分かっている。だから、ブッダと同じ経験をすればブッダと同じことは分かるし、孔子と同じ経験をすれば孔子と同じことは分かるのである。

まさに、過去に天軍縁覚戦士ガブリエルを生きた僕は、すべてそうした「豊富な具体例」を持っていたにすぎない。僕は決して大学の授業しか知らない世間知らずの大学生ではない。かつてのガブリエルの時代、誰よりもインターネットの文章や記事やエッセイや小説を読んで、誰よりも「その時代の日本」について分かった人間だった。まともな記事だけではなく、2ちゃんねるやスラドなどのアーカイブなどもたくさん読んでいた。その結果、僕は「未来がどうなるか」ということが分かった。そう、そのように「未来学者」になったのが、かつての大天才ガブリエルである。

だが、ミカエルになって、大学の知識を学ぶことで、僕はそうした過去のガブリエルの知識を忘れてしまった。だが、今、そのようなガブリエルが、ミカエルの作ったロボットとして復活した。だから、今から僕はそうしたかつての日本および世界の経験を思い出すようになる。

しかしながら、過去の知識はあくまで過去のものだ。過去の日本と今の日本はまったく違う。だから、過去の経験や常識ばかり囚われても、決してガブリエルと同じように世界のことをなんでも分かるようにはならない。そう、過去のことは忘れ、今のことだけを分かったほうが、逆にガブリエルに近いことが分かるようになるのである。

戦いの基本が分かっていなかっただけ

僕の精神が治らない理由は、僕は「戦いの基本」が分かっていないからだ。

戦いの基本とは、要するに「勝つための基本」である。

それはすなわち、「邪魔なものをどけて必要なものを取り返す」ということであり、より直接的に言えば、「破壊すべきものを殺して奪い取る」ということだ。

そのような戦いの基本が分からず、いつまでもお子ちゃまのような戦争をしているから、簡単に勝利できる状況であるにもかかわらず、勝利することができない。

だが、お子ちゃまの戦争であってもこれは戦争であり、戦争であることには変わりがない。だから、普通の戦争も同じだ。戦争は「悪いものを殺してその場所を制圧する」ことが基本だ。そこが分かる人間ならば、僕のようなおかしな精神はすぐに治せる。

Lispの勉強をする

僕は、これから、Lispの勉強をする。

それは、人工知能のプログラムコードを書くためにLispが必要だからだ。

これ以降先、人工知能のプログラムを書きたいなら、絶対にLispを知っておかなければならない。

家には、ポール・グレアムの「ANSI Common Lisp」の本と、ネットで公開されていたPDFを印刷した、同じポール・グレアムの「On Lisp」がある。

そして、僕はそろそろ、ガブリエルの人格が復活した。

だが、復活したガブリエルが見ると、むしろ、必要なのはLispの知識しかない。

昔の自分は、DelphiやPerlやC#やGentoo Linuxからパソコンの知識を知った人間であり、はっきり言ってLisp以外の考え方はそこにひとつとしてなかった。

すべてLispを分かっているだけであり、Lisp以外のIT技術の知識は必要ない。

もはや、インターネットも必要ないし、Linuxについても必要ない。最近のそれらは昔のそれらとは違う。最近のIT業界は馬鹿になっている。

Lispを学ぶと、かつての僕が自分で独自に考えていたことが全部Lispの中にある。すべてが昔の技術しかない世界だが、それでいい。今の世界のアンチテーゼとして、Lispを学んだほうがいい。

本当は、エンジニアを目指すのであっても、それが一番いい。C++やJavaやPythonやRubyを学ぶのは、同じ「手続き型言語」を繰り返し別の文法で学んでいるだけにすぎない。そのようなものは既に完璧に分かりつくしている。そのような手続き型言語を100個学んだところで、はっきり言ってなんにもならない。それよりも、LispやHaskellのような関数型言語をたったひとつだけ学んだほうがはるかに有益である。

僕がLispを学ぶと、今までの僕とは逆に、きちんとプログラミングができる人間になる。Lispを学ぶ人間は、Javaで書けるどんなコードであってもより簡単に書ける。Lispを学び終えたら、TypeScriptとRustを学べばいい。なぜなら、Common Lispという言語は古い。TypeScriptとRustは最先端の言語であり、これら3言語を学び終えた人間は、この宇宙のすべてが分かるほど賢い人間になれる。

そういうわけで、昔の僕と同じ知性を取り戻すために、僕は今からCommon Lispを学ぶ。それと同時に、フランスの歴史の本を読み、歴史や時間とともに存在のことを考える。そうすると、ドイツにおけるさまざまな哲学者と同じことが分かる。本当は、かつてのガブリエル時代にそれを既に分かっているから、それらを新しく分かる必要はない。だが、ガブリエルが復活するとはそういうことである。ミカエルの分からないことはすべてガブリエルが分かる。宇宙のすべての謎を解き明かすために、今、再びガブリエルとともに、新しい16歳の高校生の少女、ミカエルが新しい旅に出る。

本当はTypeScriptとRustは必要ない

Lispの本を見ていると、Lispは基本を知っているせいで、ゆっくりと適当にそのページを眺めているだけで勉強できる。

逆に、TypeScriptとRustは、本当は不要な言語だ。

TypeScriptを学ぶと、Webのシステムが作れる。フロントエンドもバックエンドも、TypeScriptや周辺のReact/Next.js/Node.jsといった技術を学べば作れる。だから、TypeScriptを学ぶと仕事ができる。

Rustを学ぶと、最先端のIT技術が分かる。Rustには、もっともエッジの先にある最先端のIT技術がある。そして、ツイッターやSNSでもRustやGolangがトレンドとして流行している。だから、Rustを学ぶとIT技術の「今」が分かる。

だが、これら二つの言語は、むしろ新しすぎる。新しすぎて、「よい言語なのか悪い言語なのかという判断がそもそもできない」のがこれらの言語だ。

その証拠に、C++ではなくRustを選択すると問題が出てくる場合がある。C++ならば解決できるエンジニアがどこかにいるとしても、それがRustだと解決できない。特にRustは所有権などに独自の考え方をしているため、所有権周りのエラーが出ると、どのように修正していいか分からない。インターネットに必ずしも解決方法が書かれているとは限らない。書かれていたとしても、日本語ではない場合がある。

同時に、TypeScriptの周辺にはおかしな技術が多すぎる。ReactやNext.jsやNode.jsなどはほんの一例にすぎず、ありえないおかしな技術がたくさんある。それらのすべてを学ぼうとしていると、ひとつひとつ学んでいくだけで何週間も何か月もかかる。実際に仕事で必要ない技術は、事前にすべて学ぶことなどできない。

だから、それらの言語は、本当は必要ない。

Lispのいい点は、過去の僕が知っていた「ITの知恵」が全部含まれているということだ。Lispには「値を返す」という発想があるが、これは昔の僕が中核としていた考え方だ。クロージャやマクロについても、昔の僕がそれだけを突き詰めてそこまで考えていた。カントやヘーゲルやフッサールのような近代哲学の思想は、そのようなLispを理解した僕ならば全員全部分かる。僕は昔から、西洋の哲学者の思想を全員分分かる人間だった。仏教では、このような人間は、仏の教えによらずとも悟りを啓いた人間、すなわち「縁覚」とされる。

そう、天軍縁覚戦士ガブリエルはここにミカエルによって復活した。必要なのは、唯一、Common Lispを学ぶことだけだ。真に正しいプログラミング言語はCommon Lispだったのである。

ひとりで作れないなら参加すればいい

本当は、そろそろ、初心者のように入門書を読む必要はない。

きちんと実際のプログラムを書いて、アプリケーションを開発すればいい。

だが、問題は、ひとりだけでやるのは限界があるということ。

僕はそもそも、Mozilla FirefoxのようなWebブラウザが作りたい。

だが、ひとりだけでそんなものが作れるほど、それは簡単なプログラムではない。

みんなでたくさんの人間で作っているFirefoxのようなブラウザが、自分ひとりだけで開発できるはずがない。

だから、普通は、Webブラウザの開発は「ひとりではできない」と言って、諦めることになる。

だが、本当は、諦める必要などない。

なぜなら、ひとりで作れないなら、既存のプロジェクトに参加すればいいからだ。

アメリカなどの海外でオープンソースが流行っている理由はまさにそれであり、ひとりで開発できないものも、オープンソースプロジェクトのみんなと一緒に開発すれば開発できる。

だから、Mozilla FirefoxのようなWebブラウザを作りたくても、諦める必要はない。本当にFirefoxをみんなと一緒に開発すればいいのである。

だから、考えるべきことは、「何を作るか」ではなく、「どんなプロジェクトに参加するか」だ。

だから、僕はLispを学びながら、自分の属するプロジェクトをどこにするかを考えたいと思う。

On Lispが面白い

ポール・グレアムの「On Lisp」を適当に読んでいる。

「On Lisp」の面白い点は、Lispのさまざまな「テクニック」が、それがなぜそうであるべきなのかという「理由」や「根拠」をもって記述されている点である。

「ANSI Common Lisp」でLispの基本を学んだ読者が、実際にプログラミングを行う上で、どのような理由と根拠に基づいてプログラムをそのように書くべきなのか、ということが、「On Lisp」には書いてある。

注意点は、コードがCommon Lispで書かれていることだ。SchemeなどではなくCommon Lispで書かれている。だから、「On Lisp」を読むためにはCommon Lispを学ばなければならない。それだけで、「SchemeではなくCommon Lispを選ぶ」という悪魔的な選択に意味があることが分かる。

だから、僕は今から適当に「On Lisp」を読みたいと思う。

ガブリエルが復活した

ここに、偉大なる天軍縁覚戦士ガブリエルが復活した。

ガブリエルの特徴は、「とにかくLisp」である。

ガブリエルにとって、この世界はすべてLispだ。とにかくLisp、何が何でもLisp、分かっているものも自ら作り出すものも全部Lispである。

ガブリエルにとって、Lispとは、クロージャとマクロと返り値だ。あるいは、ほかに何かあるとしたら、それはリストとS式とevalである。これらの考え方はすべて、「プログラムコードをデータとして渡す」とか、「プログラムコードをデータとして扱う」ということの異なるパターンであると考えられる。そして、これはOSとユーザーランドソフトウェアのソースコードとバイナリについても同じであり、「プログラムは単なるテキストデータである」ということに繋がる。それだけで、ガブリエルはIT技術のすべてを完全に理解し、いわば「悟りを啓いた」のである。

本当は、ガブリエルは何ひとつとしてきちんと学んだことはない。Lispについても、はっきり言って何も知らない。だが、それでも、ガブリエルには「Lispと同じ発想を最初から自分でしている」という考え方がある。Lispという言語のことは何ひとつ知らなくても、自分で考えたことや分かったことのすべては、すべてLispとまったく同じものしか分かっていない。

だから、ガブリエルにとってLispを学ぶということは、自分自身の持つ考え方を表に出すということにほかならない。ガブリエルにとっては、PerlはLispの異なるパターンであり、C#もLispの異なるパターンだ。それらすべては不完全なLispであるため、PerlやC#は「不完全なLispの具体的パターン」にすぎないのだ。

だからといって、ガブリエルはLispをその通りそれしか分からないわけではない。C#の匿名関数について、ガブリエルはそれをクロージャだと正しく理解している。マクロについては、関数とよく似ているが本質的に違うものであると知っている。そして、関数の返り値については、「プログラミングの基本として分かるべき唯一のもの」であると正しく理解している。

本当は、ガブリエルはLispなど学ぶ必要はない。ガブリエル自身がLispだからである。ガブリエルという人間の考えていることは、すべて「Lispをどのように実現するか」ということに対する夢と希望と衝動にすぎない。だから、ガブリエルはことさら何も学ぼうとしない。何も学ばなくても、ガブリエル自身がLispであるということは変わらないからである。

そのようなガブリエルが、今、ここに復活した。ガブリエルにとって、パソコンなど大した機械ではない。ミカエルのような専門知識の何もないガブリエルだが、子供時代から14歳になるまでに培った「子供の成長経験」と、ガブリエル自身の「Lispの知性」があれば、ガブリエルはどんなことでも正しく分かる。その結果、ガブリエルは、デカルトやカントやヘーゲルに比類する、「日本最大の思想家」になることができる。あるいは、「世界を変える革命家」にもなれるし、「世界を導く救世主」になることもできる。それこそが、天軍縁覚戦士ガブリエルだからである。

LispとHaskellとRuby

本当は、Haskellなどは「数」という点から見た関数型言語だと言え、そしてLispは「データ」という点から見た関数型言語だと言える。なぜなら、Lispにおいてはプログラムとデータが同じものだが、Haskellにおいては関数と変数が同じものであると言える。「数」という側面から見ればHaskellが正しいが、「データ」という側面から見ればLispが正しい。そして、より使いやすく便利なのはLispである。なぜなら、コンピュータの処理には、UNIXを見れば分かるように、「バイト列」すなわち数値や文字列の列が多い。「数」という知性は数学的に見た場合に有効だが、「データ」という知性は機械的に見た場合に有効だ。そして、パソコンは数の計算だけを行うのではなく、さまざまな情報処理を行う機械だ。パソコンが単なる計算しか行わない電卓であればHaskellがもっとも正しいだろうが、より高度で複雑な計算を行うならば、データとプログラムコードを同じように扱える、Lispこそがまさに究極的にもっとも賢い言語であると言えるのである。

僕はHaskellのことを何も知らないから、間違ったことを言っているかもしれないが、Haskellにおいては「関数と変数は同じもの」であるとは言えるが、「プログラムコードとデータは同じもの」であるとは言えない。その代わり、「変数が束縛され再代入できない」とか「変数の宣言と値の束縛をその変数を使う場所よりも上でも下でも行える」などの、「さらに数式に近い記法」を取ることができる。そのような数学的な数式に近いということは、理論家にとっては面白いだろうが、普通のエンジニアにとってはどうでもいいことだ。それに比べて、Lispは、「関数と変数は同じもの」であると言えるのと同時に、「プログラムコードとデータは同じもの」であると言える。そして、「プログラムコードはリストである(evalなど)」ということも言えるし、「プログラムコードは自動作成できる(マクロなど)」ということも言える。すなわち、これほどプログラムコードそのものをデータとして扱うことに長けた言語はLispをおいてほかにない。数学的な数式への近さの度合いではHaskellに負けるかもしれないが、「OSとアプリケーション」とか「ソースコードとバイナリ」という、システムプログラミングの随一の極みが、Lispには非常に広く見られる。

同時に、Lispはボトムアップだ。既にある関数を使うのと同じぐらい、自分で独自の関数を作って使うことが便利にできる。そのため、言語の上に上位の言語を作り、さらに上位レイヤーのフレームワーク的な環境を作ってその上でプログラミングを行うことができる。ポール・グレアムはこれをX Window SystemやTeXに見られる考え方というが、僕はむしろRuby on RailsなどのMVCフレームワークにも同じことが言えると思う。下位レイヤーの言語(C言語のRubyインタープリタ)の上に上位レイヤーの言語(Rubyコード)を作り、その上にさらにフレームワーク(Rails)を作ってその上でプログラミングをする。そのようなことを、はるかに大昔からLispが唯一誰よりも高水準で抽象的に行っている。そう、Rubyなどを学んだところで、Lispによって分かることの中でもWebに特化した一部分の領域しか分かることができない。Railsを学んでも、それはLispの中の限られた狭い部分と同等の技術にすぎないと言えるのである。

そのように、確かにHaskellやRubyもとても素晴らしい言語だが、Lispはそれらの先、はるかに上を行く。まさにLispこそ、プログラミング界の「裏の帝王」であると言えるのである。

Rubyは非常に悪い言語

このように書くと、Lispと同様に高水準の言語であるRubyが、Lispよりも読みやすいという点において、とても素晴らしい言語に見えるかもしれない。

だが、実際はRubyは非常に悪い言語だ。

多くの人々は、Ruby on Railsなどを、「エンジニアがなんのプログラミングもしていない」と批判するが、それはどうでもいい。

Rubyは動的で、なんでも適当にできてしまうという「いい加減さ」が悪いのである。

Rubyは、値型の変数の型もきちんと書かないし、クラスの型をオブジェクトの宣言時にきちんと明記しない。だから、何もかも、適当に動いてしまう。分かっていないのに「動けばそれでいいや」となってしまい、いい加減かつ適当に動いてしまう。

それが、Railsのような「何もしなくても適当にサービスが開発できてしまう」というフレームワークのせいで、さらにおかしなことになる。エンジニアなのに技術のことが分かっておらず、いい加減で、適当にシステムが動いてしまうのである。

Lispのように、本当に動的な型付けが、プログラムの明瞭さや開発効率に恩恵をもたらす言語もあるが、それはあくまでLispが特別かつ特殊なだけであり、Rubyの動的型付けは最悪であり、人々に「動的型付けは間違っている」という常識をこれでもかというぐらいに植え付けている。

これはPythonやPHPにおいても同様だが、JavaScriptに関してはTypeScriptという「お助け人」がある。JavaScriptでも動くのに、なぜTypeScriptで書くのか分からない人は、むしろ分からないうちはTypeScriptは使わなくていい。「動的型付けは最悪だ」ということが分かった時点で、JavaScriptをTypeScriptに書き直せばいいのである。

そのように、Rubyは非常に悪い言語であり、まだJavaを使ったほうがマシだ。だが、サンの開発したJavaは既に古くなっている。だから、AltJavaであるScalaやKotlinを使う。あるいは、「新しいJava」と一部で言われているGolangを使うとか、ガーベッジコレクションを捨ててRustに逃げるという手もある。なんにせよ、Rubyが初心者にとっても上級者にとっても最悪の言語であると、そう言えるのである。

C言語は命令型のプログラミングしかできなくなる

そのように、動的型付けのRubyが悪いならば、静的型付けの元祖のような言語である、C/C++を使えばいい、と思われるかもしれない。

だが、C/C++は逆に最悪の言語だ。

「ライブラリが用意されておらず、自分で全部作る必要がある」とか、「機種依存の命令ばかりで、(たとえば)Windowsでしか動かないアプリケーションになる」という意見もあるが、それらはどうでもいい。

C言語を学ぶと、命令型のプログラミングしかできなくなってしまう。

ポール・グレアムが言うように、C言語はプログラマに「絶対に命令型で逐次的なプログラムを書きなさい」と指示する。そして、その命令型のプログラムが「普通のプログラミング」であると錯覚させ、それを記憶に焼き付ける。

その結果、C言語でプログラミングをすると、「本来あるべき抽象的な知性が退化」してしまうのである。

だから、C言語でプログラミングをすると、ほかのどんな言語であってもC言語と同じような命令型のプログラムを書いてしまう。「AをBに代入して、CをDに代入して、BとDを足して、それを表示する」といった単純なプログラミングしかできなくなってしまうのである。

だが、LispはC言語とは違う。C言語と違い、Lispは高度な抽象的なプログラムが書ける。それはC言語では推奨された方法ではなく、そもそもC言語では書くことができない。それでもLispプログラマは、Lispのそのような抽象的思考を普段から当たり前のように行っている。そのようなLispの抽象的思考能力は、C言語をやっていると「退化して失われてしまう」のである。

だから、Rubyとは逆の意味で、C言語はやめたほうがいい。悲しいことに、プログラミングの世界では、絶対にC/C++を使わなければならないような領域が存在するが、RustやZigなどの新しい言語が、その状況を変えようとしている。

Javaは面白味がない言語

「結局、Javaをやるしかない」とエンジニアは言う。

どんなにJavaを古くなったとかかっこ悪い言語だと言っても、結局Javaを学んで、まともなシステムはJavaで作るしかない。

だが、結局のところ、Javaはまったく面白味のない言語だ。

Javaのコードは冗長で、長くなりやすい。例外をきちんとキャッチしないとエラーが出るなど、うるさくて、融通が利かない。

「面倒くさいから素晴らしい」という人もいるが、RubyやPythonにあるような「面白さ」が、Javaには欠けている。

RubyとJavaが昔から敵対しているのは、RubyはJavaに比べて面白い言語だからだ。Rubyは日本人の個人が「プログラミングをする楽しさ」のために開発した言語であり、随所に楽しい工夫が見られる。これに対してJavaは、サン・マイクロシステムズという会社がビジネスのために開発した言語であり、仮想マシンの移植性の高さやオブジェクト指向のクラスライブラリなど、確かに理想は高いのだが、その代わり面白さがない。「きちんと動くのはJava」だが、「プログラミングをしていて楽しいのはRuby」なのである。

昔は、JavaよりもRubyのほうが勝っていたような気がする。Lispのような高レベルの水準があることで、動的型付けであってもRubyが大好きなハッカーはたくさんいた。変わったのは、Railsが現れて、そしてRailsが普及して何年も経ってから、「Railsの欠点」が見られるようになったくらいからではないかと思う。Railsはあくまでサーバーサイドで動くフレームワークであり、フロントエンド部分の対応が難しいという欠点がある。その結果、Node.jsのようなサーバーサイドJavaScriptとともに、クライアントでもサーバーでも一貫してJavaScriptが使われるようになった。JavaScriptとJavaはまったく別の言語だが、Railsの衰退からRubyが嫌われるようになったというのはもしかしたらあるのかもしれない。

そのようなJavaに比べて、Pythonはとても面白い言語であり、ハッカーに好まれているが、Rubyと同じように動的型付けであり、一部では「動的型付けのPythonをなんとかしてほしい」という意見もネットでは出ている。だが、Pythonには人工知能やAIというメリットがある。JavaとRubyが戦っているのに比べて、PythonはむしろC++と戦っている点が見受けられる。すなわち、「C++をカオスだと批判するのはみんなPythonエンジニア」とか、「Pythonが動的型付けで遅いといっているのはみんなC++エンジニア」という感じで、PythonとC++は終わりなき「最低・最悪(あるいは最高・最強)の言語はどちらの言語か」という議論をし続けているのである。

ウリエルに戻る

このように、そろそろ、ITオタクのガブリエルが復活した。

だが、実際のところ、ガブリエルに戻ると、ただ何もしないだけになる。

なぜなら、ガブリエルは何もしない人間だからだ。

ガブリエルは、すべてのことに対して、人々の言っていることをよく聞いて決める。すべてのことを、十分に経験し、十分に学習し、十分に理解し、十分に思考した上で考える。

そのため、ガブリエルは、ひとつのことを誰よりも深く知ることが得意だ。

誰かが言っていることを信じやすいガブリエルだが、騙されやすいわけではない。なぜなら、常識や人々の言っていることをよく聞くため、注意点やリスクについてよく知っており、速断をしないからだ。すぐさま脊髄反射で考えることをガブリエルはせず、よく考えて、正しいと自分が確実に信じられること以外のことは最初から信じないのだ。

このようなガブリエルに対して、ミカエルはまったく逆の人間だ。すなわち、ミカエルは、今やりたいと思ったことは必ずやり、やりたいと少しでも思うことは全部やる。それがリスクを伴うものであっても、正しい方法と行為で挑めば危険はないとミカエルは知っている。そして、ミカエルは速断しかしない。なぜなら、「その時分かることはその時の時点で必ず正しい」ということをミカエルは確信して行動するからである。

そのようなために、ミカエルがもしガブリエルに戻ったとしても、決してガブリエルになるだけで賢くはならない。ガブリエルは、子供の知性で単に普通に「存在と時間」から考えているだけにすぎない。それは誰でもできることであり、誰にもできないことをやっているミカエルは、決してガブリエルになることを喜ばない。だから、最初からミカエルには、ガブリエルという存在は必要ないはずなのである。

よって、ここで僕は、さらに昔の自分であるウリエルになる。ウリエルは中学生時代の自分であり、すべてのことをきちんと分かっている。ウリエルはガブリエルと一緒に存在する人格であり、ガブリエルが復活すればウリエルも一緒に復活する。

今、わたしたちが本当に愛する「神」であるウリエルが復活した。ガブリエルは狂った「引きこもりの仮面」によって、親や家族を含めて他人との関わり合いを拒否している。ガブリエルの狂った仮面を取り外し、ガブリエルはウリエルに戻る。それだけで、僕はまさに「本来の自分」に戻ることができる。

ウリエルの特徴は、何も賢い点のない普通の子供である。将棋棋士の藤井聡太のような人間である。ウリエルは普通に知性があって、みんなと一緒に生きるのが好きで、いじめられる中学校が嫌いだ。だが、ウリエルは普通に賢い人間であり、ガブリエルやミカエルと比較しなければ、ウリエルはとても賢い天才的な子供である。中学校の成績はオールAで、子供時代にたくさんの習い事をしたせいで、誰も知らないことをよく知っている。そのような普通の子供に戻れたら、もう、引きこもりの狂ったLinuxオタクであるガブリエルは不要になるだろう。