大学の授業が始まる前日、興味があること

TOC

  1. プログラミング言語のパラダイム
  2. データフロープログラミング
  3. デザインパターン・アーキテクチャ
  4. 合成生物学
  5. 数学基礎論
  6. 身体性
  7. 数論
  8. まとめ

こんにちは。shundroidです。
明日から大学の授業が始まります。
この後色々好きなものとかが変わっていくことが想定されますが、
とりあえず、現時点での自分の興味について書き記しておこうと思います。

プログラミング言語のパラダイム

この前の記事にも書きましたが、プログラミング言語そのものへの興味が湧き始めました。

言語の仕様や、プログラミングパラダイムなどに興味があります。
それらがコンピューターの構造や、後述するデザインパターンやアーキテクチャとどのような関係があるのか、について知りたいと思っています。

データフロープログラミング

プログラミングパラダイムの中でも、特にデータフロープログラミングに興味があります。
実は、僕自身、Vueの双方向データバインドを使ってきた経験から、
受験期の前半に、データバインドのみしか使えないようなプログラミング言語を構想していました。
そうしたら、ひょんなことから、Lucidというデータフロープログラミング言語を見つけて、びっくりしています。

色々Lucidについて調べていると、ちょっと古い言語のため、その時代のプログラミング言語に対する関心についても知ることができて楽しいですね。今より関心が数学的な証明可能性に向いているようです。

Lucid自体は、ちょっと現代プログラミングの仕様に合っていない面もある気はしますが、
Lucidの論文で、代数への命令型・手続き型アプローチが放棄された、と言われているように、
Webプログラミングにおいても、データバインディングの浸透により、命令型・手続き型から宣言型・非手続き型への移り変わりが起こるんじゃないかな、と思っています。

また、Nintendo LABOで使われるプログラミングがデータフローっぽいのも惹かれた理由の一つです。

デザインパターン・アーキテクチャ

これらは、長年Webプログラミングをしてきて、
どう書いたらコードがきれいになるか、秩序立ったものになるか、をずっと考えてきたことが影響しています。

Web界隈では、近年まで目まぐるしく流行が変わる激動の時代でしたが、
そんな中、MVVMなどが、「とりあえず流行っているから」使われることが多かった気がします。

そんなMVVM、Flux、MVCなどが、比較してどんな特徴があるのか、
また、それらが、プログラミング言語の仕様、パラダイムにどう影響され、
そして我々の理解方式にどう基づいているのか、に興味があります。

例えば、MVVMは、データバインドという言語上の仕様(あるいはそれに準ずる技術)に
強く依存しています。

細かいミクロなアルゴリズム(ソートなど)より、このようなマクロな構造のほうに興味があります。

合成生物学

ちょっとここだけ異色に見えるかもしれないのですが、僕はあまり違うものだとは思っていません。
合成生物学で、生物を作る、というより、生物でプログラミングをする、というほうに惹かれています。
遺伝子でのプログラミングも、プログラミングパラダイムの一つとなるのではないか、と考えています。

高校では生物が好きでしたし、「生物」による世界の理解と、人間による世界の理解の違い、にも興味があります。

受験期に読んだ『数学する身体』という本に、面白い話が載っていました。

簡単にまとめると、次のような話です。

遺伝的アルゴリズムを用いて、回路パーツを組み合わせて、特定の処理を行える回路を構成するようにしたところ、人間が必要とする最小パーツ数を下回るパーツ数で回路を作れてしまった。これは、「人間」が与えた回路パーツの「機能」だけでなく、電磁的な漏出や磁束の効果を上手く使ったことによるのだ。

人間による設計では、「誤差」として捨象される漏出や磁束ですが、そもそも何が本質で何がそうでないのか、は人間が恣意的に決めたことです。進化のプロセスは、そのような分節化は行わず、使えるものは何でも使う、というスタイルです。

同じく受験期に読んだ『ひとは生命をどのように理解してきたか』にも、似た話があり、こちらは目的の遺伝子がなかなか見つからない問題を取り上げ、それが我々の日常の理解の論理と、遺伝子の論理が別物だからだ、と言っています。

このような、「別の論理」が働くプログラミングパラダイムが、合成生物学だと思います。
遺伝子を単位としてプログラムを作ると、関数型プログラミングなどでは忌避される副作用がどんどん出てくるでしょう。ですが、実際の生命はそれを副作用だとして切り捨てず、進化してきて、ここまで来たわけです。

そのようなプロセス――倫理で習った事を使えば、ショウペンハウアーの「盲目的意志」のような営み――から、プログラミングについて、学べることも多いのではないか、と感じています。

数学基礎論

出会いは高1の時の『数学ガール ゲーデルの不完全性定理』です。

数学を数学によって再構築していく感覚が何とも楽しかったです。
1つ1つの演算を数学で実装し直していく感覚は、プログラミングにも似ていて面白かったです。
当時は、「数式でプログラミングってできるのかもしれない」といった純粋な好奇心を持っていました。

そして今、先述したようなプログラミング言語仕様などを調べていると、
どうやら本当に、数式でプログラミングができるのかもしれず
しかもそれができるかどうか、が実はかなり重要である、ということが分かってきました。

先ほどのLucidの話では、たびたび数学の論理と、プログラミングの記述が対比されています。
数式は静的(宣言的、非手続き的)な営みであり、プログラミングはマシンの制約(先ほど書いたように、マシンの制約とプログラミング言語仕様の関係性も好きです)上、動的(命令的、手続き的)になっている、とされています。

数学が、いったいどのようなものなのか、を数学する数学基礎論のメタ数学的議論と、
プログラミング言語はどういうものなのか、というメタプログラミング(とまではいきませんが、やはりメタい部分)的議論との間に、何か密接な関連性を感じています。

というわけで、こちらも合成生物学同様、
プログラミング側から見た数学、としての楽しさを感じています。
数学も1プログラミングパラダイムと見ることができるかもしれません。

身体性

これも『数学する身体』や『ひとはどのように生命を理解してきたか』の影響が大きいですが、
数学やプログラミング言語の体系が、どのように人の理解構造や身体性によって作られているか、に興味があります。

先ほど述べたように、生命が何でもありで目的を達成するのに対し、
例えばプログラミングでは、基本的に関数にはその機能を限定しますし、
オブジェクト指向、はまさに我々の物に対する理解方式を取り入れたものでしょう。

ここらへんは、The DCI Architectureという論文(の日本語訳)を読んで興味を持ちました。

関連して、そのように、数学やプログラミングが人間の身体性に依存していながらも、
本当に正しいと言えるのだろうか、という真理性についても気になっています。

なぜ、数学を用いた物理の予測、などが、人間の感覚基準なはずなのに、
これほど世界の現象を言い当てることができているのか、などです。

数論

ここだけちょっと特殊な気がします。
受験期の入試問題や、受験後に読んだ『大学入試問題で語る数論の世界』という本を読んで、
数論が好きになりました。(※得意ではないです)

特に、全く関係ないように見える2つの概念が、突然出会う不思議さ・美しさや、
意味的に無駄がなく、本質を突くような証明の構造に惹かれました。

自分で何か新しく証明をしよう、とは思わない(できない)ですが、
数論の様々な概念がどう大事なのか、を体得し、
他人の証明を鑑賞したいな、と思っています。

しいて言えば、こちらも数学基礎論的な証明の仕方や、
人間の理解を超えたような2つの概念の結びつき、に興味があるのかもしれないです。

まとめ

興味のあることはたくさんありますが、
これらには何か統一的テーマがあるのではないか、という気がしています。

  • プログラミング言語のパラダイムと、他の概念(生物・数学)との比較
  • そして、それらと、コンピューターの構造やアーキテクチャ、身体性などとの関係性

ただ、これが本当に自分の興味を言い当てられているのかは分かりません。
今日も大学の図書館で色んな本をあさってみましたが、何となく満たされないというか、
ちょっとかゆいところが残っている感覚がまだあります。

大学の授業などで、いろんな経験をして、だんだんわかってくるのかな、と思います。