ある世界の人々にとってはプログラムなんてものは意味不明な暗号のように見えるかもしれませんが、プログラムをやっている人間にとってはプラモデルのようなものでして決して難解なものではない。あるいは、プログラマーにとって直感的に操作ができるというGUIというものが逆に使いづらかったりするものであり、むしろその使い方に難解さを覚えたりするものです。しかしプログラムというものに触れたことのない方々に少しばかりお話をしたいと思います。
書店の奥に密かに隠れているオライリー出版社のプログラム本がありす。Amanzon.comでも同様に無数のプログラム本が並んでいます。しかしプログラムという言語そのものはおよそ抽象的な意味であって特に何か特別な目的に使えるものではありません。しかし想像してみるにプログラムとは巨大で複雑な計算機であると言えると思います。市販の安価な計算機は通常の加減乗除算が限られた桁数だけ可能です。概ね日常的なお金の計算などに利用したりする範囲内では充分な機能であって数兆円の計算をする人はいない。そんなわけで桁数に制限があっても特に不便ではありません。この計算機は実はかなりいろいろな種類の計算機があるのをご存じでしょうか?電気の仕事をしている人はオーム(抵抗)の計算ができるようになっていたり測量や建築関係の人々はルートの計算ができるようになっていたりするものを使っています。これらは加減乗除の計算に加えてやや複雑な計算が可能です。数学者や物理学者はこれらの機能ではちょっともの足りません。数列などのシグマや積分のインテグラルなどいろいろな計算ができた方が便利だと思う。
プログラムは世の中の簡単な計算から複雑奇っ怪な計算までいろいろできる計算機のシステムです。ここで疑問なのは「計算」とはいかなるものなのか?ということです。
我々がいわゆる情報処理をする際に行う共通のプロセスは、「入力」=>「処理」=>「出力」のみです。例えば目に何らかの波長の違う光が入ります。網膜はその光を受信して脳に情報を送ります。脳はそれを処理して視覚として我々の頭の中に情景を出力します。この過程のおもしろいところは3つのプロセスのどれが欠けても情報処理ができないということです。入力なき処理はできず、処理なき出力はできない。そして入力とは何らかの出力と重複しています。先の例でいうと長波の違う光の束は太陽が何らかの処理をして出力したものに他なりません。よって出力なき入力もありません。このサイクルの一つが止まるとその後のすべてが止まるわけです。世の中の情報処理がそうであるようにプログラムもそんな風にできているし、あるいは逆に世の中の自然の情報処理方法をプログラムが模倣しているわけです。
ある機能がこの3つのプロセスを経て簡単な情報処理をするとします。当然出力されるものがあるわけですが、この出力は次の機能の入力としてインプットすることができる。この機能もまた出力をするわけですが、当然また別の機能でもって処理をすることになる。最終的にどこに行き着くのかというと人間に行き着きます。最終的には人間の何らかの感覚器官に入力され我々自身の脳がそれを処理し判断し何らかの出力をします。その出力はまたプログラムに取り入れられるかもしれませんし、人間同士のコミュニケーションになるかもしれない。しかしもし仮にプログラムの機能が出力したものの最終地点がプログラム自身だとしたらどうなるでしょうか?実際今現在はこのことは不可能です。もし実現するとしたらターミネーターやブレードランナーのような世界になるということを意味します。そして現実の流れとしてはターミネーターやブレードランナーの世界に進んでいます。これがプログラムのおおよその機能です。古くさい言葉を使うとロボットということになります。
具体的なイメージとしてプログラムという機能は、人間の手によって作られ人間によって入力され人間が書いたプログラムが処理し出力は最終的に人間のものとなります。哲学的に考えればまだまだヒューマニズムの中でプログラムは活躍していることになります。そしてこの範囲内でさえもおよそ人間の計算能力では数百年もかかるような計算を数分で行うことすらできてしまうわけです。
大まじめに考えればプログラムは科学にとって、またそこから発展する技術にとって、あるいは文化にとってかなり影響力の大きいものです。しかしプログラムが主役になることはありません。ファイナルファンタジーがすばらしいのはプログラムの機能によるものですし、またプログラムの機能を支える様々なメディアというバックボーンがありますが、それ自体のすばらしさはそのストーリーであり視覚的効果でありまたその流通経路でありエンターテイメント性にあります。プログラムが本当にすばらしい言語であってもファイナルファンタジーがすばらしいとは限りません。しかしファイナルファンタジーはすばらしいプログラム言語で作られたかもしれません。ですからプログラムは常に裏方の方であくせく働いているだけで出力されたモノそのものに価値があります。勿論先に述べたようにプログラム自身が価値ある出力をした後にその価値を見いだすは人間に他ならないということです。これがプログラムというものです。
具体的にプログラムにはどのようなものがあるのかというと、第一に政府機関や大企業などが持つスパーコンピューターにもプログラムが詰め込まれています。逆にあなたのノートパソコンにも小さなプログラムがきちんと機能しています。概念的には両者とも等価なプログラムであるけど、上記のプログラムの説明に則せば等価であるにしても性能やその情報処理そのものの限界という意味では同じものには見えません。機能は同じでも性能の差はある。
第二にプログラムそのものの理論の組み方の特徴・個性があります。これらを上手に表現するためにプログラムは「プログラム言語」といいます。我々の言語が日本語であってアメリカでは英語が言語であるようにプログラムにも個性的な言語が存在します。また我々の言語と同様に近い言葉と遠い言葉もある。英語とドイツ語、オランダ語などはかなり近い親戚同士の言葉です。ギリシャ語とロシア語も親戚であり、韓国語と日本語もかなり近い。しかしエスキモーの言葉とアフリカのケープタウン付近で暮らしている黒人集落の言葉はおよそ違っている。例えばエスキモーの言葉には我々が「白」と訳す言葉が7種類以上あるといわれています。これは雪の中で暮らす民族にとっては一口に白と言っても様々な状態を表す白があるが、雪の降らないケープタウンでは白という色に関してそれほど複雑である必要はないわけです。プログラムも同様にあるプログラム言語ではやたらと変数の宣言やその入力される値の型にうるさかったり、また違うプログラムでは全体の流れにそって文脈で判断してくれたりするというように様々な言語があります。またこれらは言語ですから計算機そのものとコミュニケーションをする言葉でもあり、また言葉が詩や歌を詠むことができるようにプログラム言語もまるで詩のように簡潔に(理論を)書くこともできます。ディケンズやジョン・アービングのようにやたらと長いまどろっこしい長文を書くこともできます。
第三にプログラムはある種の目的論的な部分がある。先の「特徴あるプログラム言語」が何に使われるか?あるいは何に向けて使われるか?という問題です。遠く離れた銀河の星に数ミリ単位の精度で宇宙船を着陸させたいという場合には我々のパソコンに予め仕込まれているようなプログラムで計算することはできません。(計算する補助はできます。)また円周率を数億桁まで計算するにはスーパーコンピューターが必要です。しかし、Webデザインや数千行程度のデータベースの操作は我々のパソコンで充分に操作と処理が可能です。プログラムが何に使われるか?という場合には、プログラムとその周辺、環境、状況が絡まってくることになる。またこの部分に関してはプログラムのプログラム(Program for Program)という考え方もその目的論的なプログラムの様相の一つです。プログラムは単に完成品としてそこにあり、処理をする機能を持っているというのではなく、小さなマシンで小さなスペックで高速の処理能力と最大の情報蓄積を試みるようなプログラムの仕様を開発するということもプログラムです。
そう考えるとプログラマーにも様々な人々がいて、あなたの目の前にいるプログラマーは建築図面を3Dにおこす為のプログラムを書いているかもしれないし、数万人の顧客リストを管理しているかもしれないし、またNASAで宇宙船に仕込むある機能のプログラムを書いているかもしれない。しかし、共通に我々は「入力」し、「処理」し、「出力」しているわけです。
書店の奥に密かに隠れているオライリー出版社のプログラム本がありす。Amanzon.comでも同様に無数のプログラム本が並んでいます。しかしプログラムという言語そのものはおよそ抽象的な意味であって特に何か特別な目的に使えるものではありません。しかし想像してみるにプログラムとは巨大で複雑な計算機であると言えると思います。市販の安価な計算機は通常の加減乗除算が限られた桁数だけ可能です。概ね日常的なお金の計算などに利用したりする範囲内では充分な機能であって数兆円の計算をする人はいない。そんなわけで桁数に制限があっても特に不便ではありません。この計算機は実はかなりいろいろな種類の計算機があるのをご存じでしょうか?電気の仕事をしている人はオーム(抵抗)の計算ができるようになっていたり測量や建築関係の人々はルートの計算ができるようになっていたりするものを使っています。これらは加減乗除の計算に加えてやや複雑な計算が可能です。数学者や物理学者はこれらの機能ではちょっともの足りません。数列などのシグマや積分のインテグラルなどいろいろな計算ができた方が便利だと思う。
プログラムは世の中の簡単な計算から複雑奇っ怪な計算までいろいろできる計算機のシステムです。ここで疑問なのは「計算」とはいかなるものなのか?ということです。
我々がいわゆる情報処理をする際に行う共通のプロセスは、「入力」=>「処理」=>「出力」のみです。例えば目に何らかの波長の違う光が入ります。網膜はその光を受信して脳に情報を送ります。脳はそれを処理して視覚として我々の頭の中に情景を出力します。この過程のおもしろいところは3つのプロセスのどれが欠けても情報処理ができないということです。入力なき処理はできず、処理なき出力はできない。そして入力とは何らかの出力と重複しています。先の例でいうと長波の違う光の束は太陽が何らかの処理をして出力したものに他なりません。よって出力なき入力もありません。このサイクルの一つが止まるとその後のすべてが止まるわけです。世の中の情報処理がそうであるようにプログラムもそんな風にできているし、あるいは逆に世の中の自然の情報処理方法をプログラムが模倣しているわけです。
ある機能がこの3つのプロセスを経て簡単な情報処理をするとします。当然出力されるものがあるわけですが、この出力は次の機能の入力としてインプットすることができる。この機能もまた出力をするわけですが、当然また別の機能でもって処理をすることになる。最終的にどこに行き着くのかというと人間に行き着きます。最終的には人間の何らかの感覚器官に入力され我々自身の脳がそれを処理し判断し何らかの出力をします。その出力はまたプログラムに取り入れられるかもしれませんし、人間同士のコミュニケーションになるかもしれない。しかしもし仮にプログラムの機能が出力したものの最終地点がプログラム自身だとしたらどうなるでしょうか?実際今現在はこのことは不可能です。もし実現するとしたらターミネーターやブレードランナーのような世界になるということを意味します。そして現実の流れとしてはターミネーターやブレードランナーの世界に進んでいます。これがプログラムのおおよその機能です。古くさい言葉を使うとロボットということになります。
具体的なイメージとしてプログラムという機能は、人間の手によって作られ人間によって入力され人間が書いたプログラムが処理し出力は最終的に人間のものとなります。哲学的に考えればまだまだヒューマニズムの中でプログラムは活躍していることになります。そしてこの範囲内でさえもおよそ人間の計算能力では数百年もかかるような計算を数分で行うことすらできてしまうわけです。
大まじめに考えればプログラムは科学にとって、またそこから発展する技術にとって、あるいは文化にとってかなり影響力の大きいものです。しかしプログラムが主役になることはありません。ファイナルファンタジーがすばらしいのはプログラムの機能によるものですし、またプログラムの機能を支える様々なメディアというバックボーンがありますが、それ自体のすばらしさはそのストーリーであり視覚的効果でありまたその流通経路でありエンターテイメント性にあります。プログラムが本当にすばらしい言語であってもファイナルファンタジーがすばらしいとは限りません。しかしファイナルファンタジーはすばらしいプログラム言語で作られたかもしれません。ですからプログラムは常に裏方の方であくせく働いているだけで出力されたモノそのものに価値があります。勿論先に述べたようにプログラム自身が価値ある出力をした後にその価値を見いだすは人間に他ならないということです。これがプログラムというものです。
具体的にプログラムにはどのようなものがあるのかというと、第一に政府機関や大企業などが持つスパーコンピューターにもプログラムが詰め込まれています。逆にあなたのノートパソコンにも小さなプログラムがきちんと機能しています。概念的には両者とも等価なプログラムであるけど、上記のプログラムの説明に則せば等価であるにしても性能やその情報処理そのものの限界という意味では同じものには見えません。機能は同じでも性能の差はある。
第二にプログラムそのものの理論の組み方の特徴・個性があります。これらを上手に表現するためにプログラムは「プログラム言語」といいます。我々の言語が日本語であってアメリカでは英語が言語であるようにプログラムにも個性的な言語が存在します。また我々の言語と同様に近い言葉と遠い言葉もある。英語とドイツ語、オランダ語などはかなり近い親戚同士の言葉です。ギリシャ語とロシア語も親戚であり、韓国語と日本語もかなり近い。しかしエスキモーの言葉とアフリカのケープタウン付近で暮らしている黒人集落の言葉はおよそ違っている。例えばエスキモーの言葉には我々が「白」と訳す言葉が7種類以上あるといわれています。これは雪の中で暮らす民族にとっては一口に白と言っても様々な状態を表す白があるが、雪の降らないケープタウンでは白という色に関してそれほど複雑である必要はないわけです。プログラムも同様にあるプログラム言語ではやたらと変数の宣言やその入力される値の型にうるさかったり、また違うプログラムでは全体の流れにそって文脈で判断してくれたりするというように様々な言語があります。またこれらは言語ですから計算機そのものとコミュニケーションをする言葉でもあり、また言葉が詩や歌を詠むことができるようにプログラム言語もまるで詩のように簡潔に(理論を)書くこともできます。ディケンズやジョン・アービングのようにやたらと長いまどろっこしい長文を書くこともできます。
第三にプログラムはある種の目的論的な部分がある。先の「特徴あるプログラム言語」が何に使われるか?あるいは何に向けて使われるか?という問題です。遠く離れた銀河の星に数ミリ単位の精度で宇宙船を着陸させたいという場合には我々のパソコンに予め仕込まれているようなプログラムで計算することはできません。(計算する補助はできます。)また円周率を数億桁まで計算するにはスーパーコンピューターが必要です。しかし、Webデザインや数千行程度のデータベースの操作は我々のパソコンで充分に操作と処理が可能です。プログラムが何に使われるか?という場合には、プログラムとその周辺、環境、状況が絡まってくることになる。またこの部分に関してはプログラムのプログラム(Program for Program)という考え方もその目的論的なプログラムの様相の一つです。プログラムは単に完成品としてそこにあり、処理をする機能を持っているというのではなく、小さなマシンで小さなスペックで高速の処理能力と最大の情報蓄積を試みるようなプログラムの仕様を開発するということもプログラムです。
そう考えるとプログラマーにも様々な人々がいて、あなたの目の前にいるプログラマーは建築図面を3Dにおこす為のプログラムを書いているかもしれないし、数万人の顧客リストを管理しているかもしれないし、またNASAで宇宙船に仕込むある機能のプログラムを書いているかもしれない。しかし、共通に我々は「入力」し、「処理」し、「出力」しているわけです。



