AUTHOR: schwarz1009
TITLE: 水とレンズで拡大できる望遠鏡
BASENAME: 2020/09/15/061929
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: 0
DATE: 09/15/2020 06:19:29
CATEGORY: 科学
CATEGORY: プログラミング
CATEGORY: Haskell
CATEGORY: Lisp
CATEGORY: 筋トレ
眠る時の夢で知ったのだが、
望遠鏡のレンズで、
二つのレンズの間に水を加えることで、
水がレンズの一部になり、
拡大することで、
どんなに細い光でも無限に拡大できるような、
そんな望遠鏡があれば、
どこまでも細い光を拡大して、
宇宙の遠く隅々まで見渡せるようになるらしい。
だが、夢の世界は全然科学的でないことがあるため、
過度な信頼はできない。
英語のコツは、英文法を無視すること。
英文法で、「SVOだからこういう意味だ」と
考えると分からなくなる。
英文法よりも語法だ。
その英単語にどんな意味があるのかを考えれば、
文法がなくても分かる。
文法は最初は無視して、
できるだけネイティブスピードで発音を聞き、
その上で「単語と単語のつながり」を
ボトムアップ的に分かった方が良い。
僕が思うに、学校の生物学は間違っている。
学校では、食物連鎖のピラミッドから、
動物を植物よりも上の存在だとする。
しかしながら、僕が考えるに、
動物は弱肉強食であり、
ほかの全ての生物を殺しながら、
自らは何も生み出していない、
植物を食い散らかしているだけの「虫」である。
植物の方が、動物よりも主なる生物である。
しかしながら、そうすると、
植物は何のために光合成をし、
生物そのものを維持しているのか。
「他の植物に競争で勝つため」とか、
「種を増やすため」といったことも言われるが、
こうした理由は存在を生きながらせるための「手段」であり、
目的ではない。
「酸素と栄養分を動物に与える」とか、
「花を咲かせて綺麗に咲く」ということも言うが、
それは植物自体には特にメリットがない。
そう、そうしてみると、答えはひとつである。
それは、「植物には神が宿る」のである。
ちょうど、植物は、
人間の脳のシナプスと同じような形をしているが、
脳は植物とまったく同じ機関であり、
植物全体をコンパクトに収めたものが脳神経である。
植物には神仏精霊界の全てが宿り、
植物全体で「地球」として考えているのである。
これこそ、「神」である。
しかしながら、神という言葉が悪ければ、
「もののけ」と言っても良いだろう。
また、僕はそろそろ、人間として全てをやり終えた。
全てを考え、経験し、そして知ってしまったため、
人間としてやるべき全てが終わったからである。
僕は進化して、新しい星の主になる。
僕は動物でも植物でもない「星」になる。
また、僕が発見したこととして、
必要なのは「希望」よりも「考える余裕」である。
自分の力で自由に考えられるような、
「自分で自在に考えられる余裕」があれば、
それだけで狂っているのは治る。
希望や愛をむやみに信じても、
常に信じ続けながら考える余裕を失っていくだけである。
また、社会主義の何が間違っていたかというと、
それは「単純すぎた」のである。
労働を平等にし、一律で同じ給与と資産を平等に与えるのは、
単純でシンプルだが、
単純すぎたゆえに、「つまらなかった」。
そして、その単純さを徹底するために、
国の権力も単純になり、
「全ての家計や所得を管理」する必要があり、
そのために独裁権力が生まれた。
結局、単純すぎるモデルは、
かえってさまざまなことに対応できないことがある。
「金」というモデルは確かに単純に見えるが、
実際はフレキシブルな「自由」という原理原則に根差しており、
その「自由においては何をしても構わない」という高度さが、
「全てを一律に平等にする」という
トップダウンの単純さに勝ったのである。
また、金や市場原理・競争原理に基づく経済を、
「勝ち負けである」と言う人が多いが、
実際は、資本主義は必ずしも勝ち負けではない。
なぜなら、「自分の好きな仕事ができる」という自由があるからである。
これは、勝ち負けとは違う、もっと高レベルの
「自分にはこういう夢がある」という「人生」の問題である。
だから、僕が思うに、
夢や希望を人間的に叶えられる社会だったとするなら、
社会主義でもいい社会にはなるだろう。
しかしながら、夢や希望がなく、
独裁者に従う強制ノルマの国になるのであれば、
そんなものは理想のユートピアにはならないだろう。
世はインターネットの時代であり、
AI技術による膨大なデータマイニングや
さまざまな通信や機器におけるビッグデータの解析、
あるいは分散環境での効率的な仮想サーバの管理など、
今までとは「何段階か上の新しいインフラ技術」が生まれている。
しかしながら、僕が思うに、
パソコンの基本とは、
「プログラムの再利用」と「リソースの効率的な配分・管理」
ではないかと思う。
たとえば、プログラムの再利用であれば、
関数やライブラリ呼び出しから、
言語のAPIやOSのシステムコール、
あるいはX11やWindowsのコントロールなど、
「既にあるシステムのプログラムを再利用して、
抽象度の高い基盤技術をたくさん使って具体的な技術を作る」ということである。
これは、たとえば企業がたくさんの子会社や
サプライチェーンに分かれるのと同じで、
大きくひとつの巨大プログラムにすることもできるし、
小さな細かい細分化されたモジュールの集合の
アーキテクチャとすることもできる。
分散環境を考えれば、
RPCやCORBAのような
ネットワーク越しのリモートな手続きの呼び出しから、
DockerやKubernetesを用いた仮想サーバ・クラスタ環境も言える。
また、同時にコンピュータにとって必要なのは、
「リソースの効率的な配分・管理」であり、
この場合、状況とリソースの種別を考える必要がある。
たとえば、
シングルプロセス環境とマルチプロセス・スレッド環境でも違う。
最近ではイベント駆動のノンブロッキングI/Oで動くサーバも存在する。
また、メモリ管理やCPUのレジスタのコンテキスト切り替えは
タイムシェアリングのOSによって提供されるし、
ストレージなどもファイルシステムによって提供され、
データベースにおいても
フェイルオーバなどさまざまな冗長化技術が使われる。
もっと低水準では、単なる変数のmutexなロックから、
ファイルやネットワークのソケットを抽象化した
分散プロトコルなども考えられる。
しかしながら、僕が思うに、
基本は「再利用」と「リソース」である。
そして、その基本の下に、「アルゴリズムとデータ構造」が存在する。
状況と目的に応じて、
配列、連結リスト、スタック、キュー、ツリー、グラフなどを使い分け、
ソートや探索では二分木やハッシュテーブルを利用する。
パソコンとは、そのような設計でアーキテクチャを実装した、
ソフトウェアとハードウェアの連携システムであると言える。
また、「プログラミング言語の通りにプログラムを書くだけではなく、
プログラミング言語そのものを作ることや、
プログラムを書くためのプログラムを書く」といったことが、
Lisp界隈では昔から行われている。
これはLispの大きな特徴である「S式」、
すなわちデータもプログラムも同じ「リスト」の形式で書かれるという特徴だが、
関数とマクロによって「Lisp言語そのものをLispで拡張できる」という
Lispでは「プログラミング言語そのものを
自分の書きたいプログラムに合わせて作っていく」という方式がとられる。
このように書かれたプログラムは「ボトムアップ的アプローチ」などとも呼ばれ、
TeXなどは最初期のこうしたプログラムであると言われる。
Lispは抽象度が高く、RubyやPythonに備わっている機能を昔から備えているほか、
実行速度も他の高級言語に負けず劣らず速いため、
「コードが短くやりたいけどRubyやPythonは遅くて複雑」という人には、
Lispはとてもおすすめである。
また、本当にプログラミングを極めたいのであれば、
むしろ、Haskellが良いと思う。
Haskellは最近少し英語のドキュメントを読んでいる僕だが、
Pure functionalで、static typingで、immutableで、Lazyで、
変数と関数は基本的にまったく同じものとして扱われ、
関数は「first-class」。
変数は変更可能な値の入れ物ではなく、
単純に値につける名前であり、
immutableで不変であり、
状態を破壊(変更されてしまう)することがない。
これは数学の数式における変数の概念と同じ。
また、同じことを自分で繰り返すことはなく、
実行時ではなくコンパイル時にエラーが発覚するように、
などといった設計姿勢を持つ、
「神経質だが大切なことを教えてくれる言語」である。
多くの、たとえばPythonやRustやJavaScriptなどに見られる特徴は、
Haskellでは既に実現されていたことが多く、
たくさんの高度な概念や考え方があるため、
習得と理解には困難を要するが、
おそらく本当にマスターできたときに、
本当の「悟り」を得ることができるかもしれない。
しかしながら、あまり多くをいきなり望みすぎても、
叶えるためにはひとつひとつ攻略しなければならない。
僕はもっと今まで買った家にある本を読みたいが、
むしろ、Javaでクラスベースのオブジェクト指向を分かっておいた方が良い。
PythonやLispをやっているエンジニアは、
多くがC/C++やJavaもきちんと知っている。
そうした「現代流のプログラミング言語」を習得する上で、
クラス図やデザインパターンを用いたオブジェクト指向プログラミングの基本は、
Javaで習得し、理解するのが一番いいだろう。
暇でやることがないので、
筋トレをしている。
筋トレは、「頑張るか、もっと頑張るか」。
頑張って、辛くなってきたらそこでさらに頑張る。
もっと辛くなってきたら、もっと頑張る。
筋肉は裏切らない。
僕は、動物から植物になる。
そうすると賢くなる。
何もしなくても楽になり、再生して病気が治る。
考えて植物を選ぶような人間は、僕だけだ。