圏論
私は圏論を勉強して挫折した。そこでこの挫折に対する言い訳をここで書いてみたいと思う。そもそも圏論を語る前にブルバギのことを語ろう。ブルバギはある数学者集団の集まりの称号である。その活動をおおざっぱに言ってしまえばこうだ。数学のあらゆる学問を全て集合の理論をベースに置き換えて、あらゆる数学的事象を全て集合の言葉で汲み取ろうとした壮大なプロジェクトであった。それはある意味成功し、ある意味失敗した。しかしながら数学基礎論などの発展にも大いに寄与し成果をもたらしたことは確かだ。圏論はこのブルバギに代わって、数学的事象を圏論の立場から捉え直そうという理論なのだ。だから圏論をいくら勉強しても何も意味がない。圏論を幾何学やら代数学やらに当てはめて初めて真価を発揮するのである。その最たるものが、グロダンディーグの代数幾何学におけるスキーム論だろう。今は幾何は代数を持って語られるようになった。そしてその構造的な枠組は圏論という結晶を作り上げた。圏論は数学の基本的な考え方の構造を記述する新しい言語なのだ。一旦圏論で語られたものは圏論間で同値性が言える。そうなれば巧みに圏論同士は行き来することができ、問題は違う圏論の中で解決を見ることになる。そこが圏論の面白いところであり、可能性が秘められているところなのだ。圏論は数学言葉の構造である。構造であるがゆえに極力意味を持たない。ここが圏論を勉強をする上での障壁となっているのはやむを得ないことなのかもしれない。
私は圏論を勉強して挫折した。そこでこの挫折に対する言い訳をここで書いてみたいと思う。そもそも圏論を語る前にブルバギのことを語ろう。ブルバギはある数学者集団の集まりの称号である。その活動をおおざっぱに言ってしまえばこうだ。数学のあらゆる学問を全て集合の理論をベースに置き換えて、あらゆる数学的事象を全て集合の言葉で汲み取ろうとした壮大なプロジェクトであった。それはある意味成功し、ある意味失敗した。しかしながら数学基礎論などの発展にも大いに寄与し成果をもたらしたことは確かだ。圏論はこのブルバギに代わって、数学的事象を圏論の立場から捉え直そうという理論なのだ。だから圏論をいくら勉強しても何も意味がない。圏論を幾何学やら代数学やらに当てはめて初めて真価を発揮するのである。その最たるものが、グロダンディーグの代数幾何学におけるスキーム論だろう。今は幾何は代数を持って語られるようになった。そしてその構造的な枠組は圏論という結晶を作り上げた。圏論は数学の基本的な考え方の構造を記述する新しい言語なのだ。一旦圏論で語られたものは圏論間で同値性が言える。そうなれば巧みに圏論同士は行き来することができ、問題は違う圏論の中で解決を見ることになる。そこが圏論の面白いところであり、可能性が秘められているところなのだ。圏論は数学言葉の構造である。構造であるがゆえに極力意味を持たない。ここが圏論を勉強をする上での障壁となっているのはやむを得ないことなのかもしれない。
プログラミング言語一考
私は某企業に入社してから、C++コンパイラの開発に従事してクラスライブラリの開発もやった。それから随分と長い間、コンパイラ型言語一般を見てきた。C++言語はコンパイラ型言語の中ではもっとも複雑な言語であり、欠点も多い、国際規格が決まっているとはいえ、決して現在において十分な移植性があるとは言えない。方言も多い。やっかいな言語であるが、Cと同じくマシンべったりな言語である。未だにシステム言語として、Cと並べて君臨している。その基礎はやはりアセンブル言語にある。コンパイラ型言語は極度に抽象的でありながらも、何とか生成されるアセンブルコードを追うことができる点がメリットである。つまりコンパイラが信用できなくともアセンブルコードを追えば、自分のプログラムがどのように振る舞うのか追跡できる。
しかしJavaが登場したとき、それがいささか難しくなった。メモリ管理をシステム任せにせず、言語の中に内包したJavaシステムでは、ある種ミステリアスな部分が増えた。JITコードは何とか追跡できるが、メモリの追跡となると遥かに難しくなる。しかしOpenJavaの登場でこれまでベールに包まれた内部情報が大分分かってきたが、やはりガベージコレクションなる大仕掛けまでしてメモリ管理をしては、いささか行き過ぎの感がある。
そんなこともあってネットの時代にあってはスクリプト言語の方が相性がよくなり、何と言っても軽い。結構シンプルである。Perl、Ruby、PHP、Python、Javaスクリプトが流行っている。書いて即実行できる点も魅力だ。必要なライブラリは簡素な形で提供されており、まさにネット時代の寵児である。ネット透過性ということもあり、移植性は抜群。あまり処理系内部の動作を知らなくても、書けばネットで動くようになってしまった。そういう意味では、これまでコンピュータ寄りだったプログラミング思考回路は、より人間の脳思考を表現するにふさわしくなったと言えるのかもしれない。
そして今注目のHaskellは完全に数学的な理論に裏打ちされたプログラミング言語である。バックボーンには圏論が理論の裏打ちをしている。ここで数学的な思考回路が直接プログラムに直結する事態にまでなった。まあ研究者受けをするのは間違えない。彼らがもっとも欲していたのは、このような言語だったのだから。
しかし私から見るとHaskellは綺麗過ぎて、泥くささのない言語のように思える。それよりも土着的な言語の方にまだ愛着がある。プログラミング言語はもちろん用途によって使い分ける必要があるが、かようにしてプログラミング言語はマシンから離れ、より人間の数学的な思考回路に則してプログラムできるようになりつつ進化を遂げている。
プログラミング言語にもかような歴史と変遷があるのである。
私は某企業に入社してから、C++コンパイラの開発に従事してクラスライブラリの開発もやった。それから随分と長い間、コンパイラ型言語一般を見てきた。C++言語はコンパイラ型言語の中ではもっとも複雑な言語であり、欠点も多い、国際規格が決まっているとはいえ、決して現在において十分な移植性があるとは言えない。方言も多い。やっかいな言語であるが、Cと同じくマシンべったりな言語である。未だにシステム言語として、Cと並べて君臨している。その基礎はやはりアセンブル言語にある。コンパイラ型言語は極度に抽象的でありながらも、何とか生成されるアセンブルコードを追うことができる点がメリットである。つまりコンパイラが信用できなくともアセンブルコードを追えば、自分のプログラムがどのように振る舞うのか追跡できる。
しかしJavaが登場したとき、それがいささか難しくなった。メモリ管理をシステム任せにせず、言語の中に内包したJavaシステムでは、ある種ミステリアスな部分が増えた。JITコードは何とか追跡できるが、メモリの追跡となると遥かに難しくなる。しかしOpenJavaの登場でこれまでベールに包まれた内部情報が大分分かってきたが、やはりガベージコレクションなる大仕掛けまでしてメモリ管理をしては、いささか行き過ぎの感がある。
そんなこともあってネットの時代にあってはスクリプト言語の方が相性がよくなり、何と言っても軽い。結構シンプルである。Perl、Ruby、PHP、Python、Javaスクリプトが流行っている。書いて即実行できる点も魅力だ。必要なライブラリは簡素な形で提供されており、まさにネット時代の寵児である。ネット透過性ということもあり、移植性は抜群。あまり処理系内部の動作を知らなくても、書けばネットで動くようになってしまった。そういう意味では、これまでコンピュータ寄りだったプログラミング思考回路は、より人間の脳思考を表現するにふさわしくなったと言えるのかもしれない。
そして今注目のHaskellは完全に数学的な理論に裏打ちされたプログラミング言語である。バックボーンには圏論が理論の裏打ちをしている。ここで数学的な思考回路が直接プログラムに直結する事態にまでなった。まあ研究者受けをするのは間違えない。彼らがもっとも欲していたのは、このような言語だったのだから。
しかし私から見るとHaskellは綺麗過ぎて、泥くささのない言語のように思える。それよりも土着的な言語の方にまだ愛着がある。プログラミング言語はもちろん用途によって使い分ける必要があるが、かようにしてプログラミング言語はマシンから離れ、より人間の数学的な思考回路に則してプログラムできるようになりつつ進化を遂げている。
プログラミング言語にもかような歴史と変遷があるのである。