作曲とプログラミングのアナロジー


仕事でプログラミング、趣味で作曲をする者として、両者には非常に共通点があることをちょっとお話してみようと思います。
二つとも、ある種の創作物であり、ある一定のルールで記述される、ということは、まず納得していただけることかと思います。
しかも、面白いことに、両者ともそれを知らない人にとってはものすごく難しいものだと思われているというのも同じ。例えば、プログラムをしたことのない人は、とても難しくて、いろいろなことを覚えなければ出来ないと考えているでしょう。でも、実際の現場ではそれほど経験のない人がどんどん投入され、結局なんだかんだ言って、プログラム開発を行なっています。
最終的に問題なのは、仕上がったものの品質、であるのは両方とも同じ事でしょう。

では、類似している点をいくつか挙げながら考えてみましょう。
●日常会話に使う言語に比べれば、はるかに憶えることは少ない。
作曲もプログラミングも特殊な記号で記述するという意味で、ある特殊な言語だということが可能だと思います。
例えば、プログラミングで最も利用されているC言語では、関数の宣言や括弧、記号の使いかた、if や switch などの予約語、を憶えれば最低限のプログラムは書けます。作曲も、音符、休符の種類、拍子の種類、あとその他のちょっとした記号を憶えれば、楽譜を書くことはできるはずです。
例えば、日本語で意志疎通をしようと思ったら、相当数の単語を知らなければできないはずです。そういう意味では、最初に憶えなければいけないことは両方とも案外少ないと、私は思っています。

そうはいっても、やっぱり敷居が高い、と思う人はいることでしょう。
それはつまり
●作成のための方法論、技術論がたくさんある
ということのためでしょう。
プログラミングなら、構造化プログラミング、オブジェクト指向プログラミング、といったような開発手法が良く知られています。また、オブジェクト指向関連からは、UMLやデザインパターンなどの新しい技術もどんどん生まれています。この技術は、これを知らなければ書けないというものではなく、このような場合にどのようにしたらよいか、を体系的にまとめたものです。
作曲の世界の場合、和声学、対位法、管弦楽法などのあくまで技術的なレベルでの学問があります。これらも、必ずこのとおりにしなければいけない、というものではなく作曲の際のテクニックをまとめてあるだけです。
つまり、下手な作曲やプログラミングなら誰でもすぐに書けるけど、質の高い物を作ろうとすると知っておきたい技術は多い、といったところでしょうか。
しかも、これらの技術はどれも完全なものでなく、時代によってトレンドとなる手法はどんどん変わっていくのも同じ。

プログラムはエディタで書いただけでは動きません(昔はやったBasicや、Javaのようなインタプリタならすぐ動くけど)。プログラムをコンパイル(コンピュータが理解できるように翻訳する)して実行ファイルを作らなければいけません。実行ファイルを作ったら、それをコンピュータ上で実行させることが出来ます。
作曲された曲も楽譜だけでは音がなりません。まず、演奏者に楽譜を渡したあと、演奏者が練習をしなければいけません。練習を終えて、晴れて演奏者は聴衆に演奏を聞かせられるわけです。と考えると、
●作曲者にとっての演奏者、プログラマーにとってのコンピュータ(CPU)は類似
の関係というふうに言えるかもしれません。もっと抽象的に言えば、自分の想起したイメージは第三者によってしか実現できないということでしょうか。演奏者にも、上手い人、下手な人はいるでしょう。CPUも速いもの、遅いもの、バグがあるものなどやっぱりあるわけです。プログラマーが最新のCPUで実行させたいように、作曲者もまた最高の演奏者で演奏してくれれば嬉しいはずです。

しかし、かたや芸術、かたや工業製品(とはいえ、芸術的なプログラミング、極めて技術的な作曲というのはあるけれど)。違うところはもちろんあります。
例えば、現在のプログラムはあまりに大規模になったため、複数のメンバーで一つの製品を作ります。このため、無機的な記号の集まりだったプログラムが、互いのコミュニケーションのため標準化され、そのプログラムの出来栄えに均質さが要求されるようになってきました。結果的に、職人芸的で芸術的なプログラマーが減っているような気もします。
しかし、実は作曲も同じかもしれません。
売れている曲と同じような曲を、売る人も聞く人も欲します。結果、大量の均質な音楽が巷に溢れることに....
しかしどんな時代になっても、そういった創作物には、誰も真似ることの出来ないオリジナリティや、芸術性があることを私は信じているのですが。


inserted by FC2 system