プログラムとは (2)

 例えば宮大工という日本の伝統的な大工さんがいます。彼らの仕事はかつてはお寺や神社、しいては皇族の屋敷などを手がけた名職人ですが、彼らの仕事というのはわかりやすいようでわかりにくい。といのは宮大工の職人達は現代の巨大なプロジェクトやゼネコンなどの巨大な建築物とは違って何から何まで職人が一通りこなしていたのです。それは木の選択、切り出し、運搬、加工、またその加工に使用する刃物類のメンテナンスからその道具そのものを製作するという鉄鋼の技術まで彼らの手中の中だったわけです。近代になってからは大工さんもそこそこ分業という形式を取るようになってきましたが、それでも尚宮大工は現代の細分化された分業とは大いに違う形式で建築物を製作しています。
 そういう意味ではプログラマーはまさに現代的であり、宮大工などの全く反対の立場で仕事をしている人が多いんじゃないかと思います。つまり宮大工のようなプログラマーを通称「フツスクラッチ」とよんだりします。フルスクラッチとは最初から最後までファイルにタイプし挙句の果てには一行づつ上から書きつづけ最終行で終わるという書き方をするそうです。実際にプログラムに携わっている方々ならその難しさ...いや、不可能さが理解できると思います。プログラムは基本的にネスト(入れ子)になっているので、実際は真ん中から書き始めたり、あるいは、むかし書いたものをコピペで貼り付けたり、長すぎたら部分的にユーザー関数にして他のファイルにまとめたりといろんな行を行ったり来たりしながら書いてゆきます。勿論途中途中でデバックをして動作を確かめながら最終的に完成へとたどり着きます。最初から最後まで頭の中にすべての設計図を入れ込んでスラスラとタイピングできるということは殆ど不可能です。しかしフルスクラッチの人間は世の中にいるそうです。筆者は見たことがありませんが...。
 フルスクラッチという話でいうとあの巨匠、ミケランジェロもそうだったようです。彼の残した巨大な壁画は今でも修復を重ねて残されていますが、絵を描いたことのある方がよくご存知の通り、また絵を習いにいった方がよく講師の先生におしえられるように「全体的に」絵を描くことをすすめられます。ある人物を描くときに頭の先から順番に描き始めてつま先で終わるなんていう描き方をできる人間は非常に少ない。しかしミケランジェロが描くような巨大な壁画では全体的に描くことはほぼ不可能です。実に部分部分で仕上げてゆかなくてはなりません。また、それはフレスコ画という工法上、漆喰が湿っている間に絵を仕上げなくてはなりません。ですから、漆喰を塗って絵を描き、その部分が乾いて定着したころにはすでに絵を変更することはできなくなっています。ミケランジェロは橋から描き始め反対側の端で書き終えるという正にフルスクラッチの芸術家でした。
 しかし、プログラムを作る上でそんなことをする必要は全くありません。僕の感覚では7割以上がデバックの作業であるし、製作も殆どがコピー&ペーストで行い値や細かな設定をちょこちょこと直してゆくというのが実際の書き方でしょう。これらの実際的な書き方...つまりフルスクラッチではない書き方というものがどういうものかというと、自分で書いたコードなんて殆どない...ということと同義です。全く完全なオリジナルのプログラムはありえません。それらはすべて誰か他人のコードであり、また典型的な書き方であり、世の中のどこにでもあるありきたりな書き方なのです。これは我々の日常会話と詩文に似ているかもしれません。才能のあるプログラマーは詩文のようにできるだけ短くできるだけ簡潔に事物の真実を書き上げます。一般人はまどろっこしい言い方で何となく...我々が普段使っている言葉でもってできるだけわかりやすいように説明しようとします。大半のプログラマーがまどろっこしいコードを書くのは、まどろっこしいコードをその隣のプログラマーも読みやすいのでお互いに意思疎通ができるわけです。詩文のように確かに正確に機能しているのだけど、コードの意味がわからないというのではちょっと困ってしまう場合もあります。崇高な詩文のようなコードを書く人はそれと同等の才能をもった人間としかコードを書き上げるという共同作業ができないと思います。
 しかし、プログラムの世界ではこれらのディスコミュニケーションができるだけ起こらないように工夫されています。それが非常に現代的な細分化と分業です。

 プログラムの細分化と分業はどうして可能かというと、そのプログラムの構造そのものに由来しています。それは入力・作業・出力という三点セットの中では実はその中核になる「作業」は誰も知る必要がないのです。製作した人間だけが知っていればよい話でその他の人は知らなくても全く問題がない。というのもある関数が入力・作業・出力行った場合には、その出力は次の関数の入力になるからです。次の関数を作る人は入力される(つまり前の関数で出力される)値がどんなものであるかと、その関数の作業によって何が出力されるかを気にかけるだけで充分なのです。これをパラメーター(引数)とリターン(返り値)と一般的に言ったりします。入力というパラメーターと作業後に出力されるリターンをここの作業部分で繰り返すため分業が可能なのです。
 私自身も局所的な部分関数を作成してその他はむかし書いたコードをただ単に組み合わせているという時が殆どです。
 これはある一つの様式でもあるわけですが、かつて椹木野衣さんが「ショミレーショニズム」でカットアップという概念で表現したようにすでの80年代辺りからいわゆる「オリジナル」という概念が崩壊しはじめていたわけです。かつてのAll in one的な、あるいは総合的なオリジナルを構築するというのが不可能な時代にさしかかっていたわけです。しかしその時代を過渡期にしてオリジナルの崇高さといわゆるカットアップという新しい概念がせめぎあっていました。画家はオリジナル...誰とも似ていない作品を作るのに四苦八苦し、カットアップ的な様式はさもすれば盗用と何一つ違わないともまだまだ言われていた時代です。しかしそのころから音楽の世界でもDJとよばれる「盗用」のアーティストが生まれ始めていました。この頃とほぼ同時にプログラムの世界でもオープンソースがやっと市民権を得て大衆化しはじめました。そして、オープンソースは音楽が芸術の世界と同様に「盗用」をはじめました。その盗用は先に述べた「ユーザー関数=サブルーチン」という構造です。一度書かれたコードは何度でも使うことができて、組み合わせることによって非常に有能なシステムを効率的に生産します。まさに松田聖子というアイドルがピストン西沢にかかるとアイロニカルで現代的な音楽になってしまうのと同様、ある全体が部分化し、その部分を使って全体を構築し、構築された全体はまた部分となるわけです。そのような様式が定着化するとそれはもうすでに「盗用」ではなく盗用というカットアップを用いたオリジナルの様式美になったわけです。プログラムもまさにそうであり、我々は殆ど盗用によって何かを生み出します。YoutubeはFFMpegというパッケージで作られ、有名サイトも各種CMSで作られています。またそのCMSもすべてがオリジナルというわけではありません。プログラムの作り方は実に自体の変化と同様に進化しているわけです。
 結果、プログラムはフルスクラッチで書くよりもむしろDJのようにプログラムの組み合わせで進化し生産されているのです。






プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer