アーカイブ

2009 年 4 月 19 日 のアーカイブ

ソフトウェアはアート

2009 年 4 月 19 日 コメントはありません

Ruby言語をつくった、まつもとゆきひろ氏がソフトウェアについて講演した。

ソフトウェアは工業製品ではない

「ソフトウェア工場はうまくいかないんですね。なぜなら部品の組み立てに相当するものが、アップロードとかDVDに焼くといった工程ぐらいしか存在せず、効率化しようないからです」。

コード(ソフトウェア)を書くというのは、組み立てのことではなく、製造業でいう「設計」に相当するという。

「クルマを作るときに、まず形や強度の設計をしますよね。それこそがソフトウェア作りです。ソフトウェア作りは、最初から最後まで工業製品でいう設計に当たるんです」。

設計である以上、それは人間的要素が強い職人芸であり一品物になりがちだという。名車がある一方、平凡な、あるいは駄作のクルマもある。同様にソフトウェアにも、人を感動させる名作もあれば、そうでもない作品もあるという。

まつもと氏は、美しいコードというものがあるという。それはアートで、「プログラマはアーティストだ」と言い切る。しかし一方、こうした発言は誤解 を招きやすいともいう。ソフトウェア作りが個々人の人間的要素が色濃く反映される職人芸であって、プログラマがアーティストであるならば、好きにやらせ ろ、勝手にやらせておけ、という話になりがちだからだ。こうした見方をまつもと氏は誤解だという。

「アーティストでは仕事にならないと思うかもしれません。作者として作品に納得が行かないから納品しない、などという人がいては仕事になりません よね。しかし、これは誤解です。世の中には“アートな仕事”をしている人がたくさんいます。例えばコピーライターは、納期の制限がある中でクリエイティブ な仕事をしている。なぜソフトウェア業界にそれができないのでしょうか?」


私が就職するときに企業訪問でIT関連のある会社を訪問した。

その会社はコンピューターのハードから基本ソフトウェアとなるOSから何でも作っている大手の会社であった。その会社では、ソフトウェアを作っている部署を「ソフトウェア工場」と呼んでいた。

すると、人はソフトをつくる機械ということであろうか。そのときは残念な思いがした。

ソフトウェアをつくるときは、パターンに則ってプログラムをつくるときと、独自のアートにもとづいた考えて組み立てていく2種類があるのだろうか。

前者は、人間の考えた仕様やアルゴリズムというものを、コンピューターが実行できる言葉に置き換えていくことであろうか。発想を一度別の言葉に置き換えて、翻訳していくという作業になる。プログラムを作成するというのは、よく設計したものをコンピューター言語で表現するということに使われる。

後者は、考えたことを直接コンピューター言語で書くことで表現する。実際に動かしてみて不具合を見つけながら修正し、動いたところでまた考える。この場合はプログラムと思考が並行して行われるので、どのコンピューター言語を使うかということが重要となる。

PerlやRuby、Pythonといったスクリプト言語では、記述が非常にストレートで端的になる。JavaやC++といった言語では、 「public static void mainなど、コンピュータに伝える約束事が多くて、やりたいことが頭の中から逃げてしまう。簡潔さは力なのです」(まつもと氏)。これは書くときだけで なく、読むときにも同様だ。

アルゴリズムを解説する本や教科書には、“実行可能疑似言語”と呼ばれる何言語でもないコードが示されることが多い。「それはPascalもどき とか、Algolもどきで書いてある。もどきといっても、アルゴリズムをちゃんと記述できている。だったら、それを理解できる言語を作ればいいじゃん、と いうことで、ある意味、それがRubyの目標です。人間が表現したいことをストレートに記述できる言語と、コンピュータ向けの言語では(生産性に)5倍、 10倍の差が付くのは珍しくない。もちろん、1つ1つの約束事には理由があって無意味とは言いませんが、いつもいつも書かされるのはシンドイのです」

まつもと氏は直接表現できる言語を作りたいために、Rubyを考案したそうです。

道具のしての言語であり、自分の考えていることを表現する言語。

それで表現することは、思考を紡いで出てくることなのでアートです。音楽家が楽譜を使うように、画家が絵の具を使うように、表現することは多少異なりますが、アートです。

楽器を演奏することも絵を描くこともできないのですが、表現したいのです。

本当は誰しも自分の語る言葉というよりも、自分の思っていることをそのままコンピューターで実行したいと思う。だがコンピューターと人間の間には大きなギャップがある。しかし少しずつだがそれは近づいてきている。

Excelのようなシートはその一つだし、Rubyという言語もその一つだろう。

ただ、人間の考えていることは曖昧で論理的ではなく、考えていることがそのまま実行してしまったら、それは危険なことかもしれない。車を運転している最中に、おなかすいたなと思ったら、車がドライブスルーに入ってしまうのはちょっとやばい。

人が人とコミュニケーションをとるときに、いったん紙に書いたり話をまとめたりして伝えないと間違いがおこる。人とコンピューターの間も距離を計りながら、そのときどきでコンピューターのできることと間違いが起きにくい最適な距離にいるのかもしれない。

こういうアートな仕事をしたいね。

カテゴリー: コンピューター タグ: ,