答えは一つじゃない

プログラミング教育でよく言われる「プログラミングは答えが一つじゃない」というのがあります.言いたい気持ちはわかるんですが,そんな荒っぽい話じゃないです.第一,音楽は答えが一つじゃないとか,スポーツは答えが一つじゃないとかわざわざ言わないですよね.世の中のプログラミングの理解が音楽のレベルに程遠いってことですね.

プログラミング言語の設計者からすると,答えが一つじゃないというのはとても迷う問題です.

何かコンピュータにやらせたいことがあった場合,何通りもの書き方がある言語と,一通りしかない言語があります.僕が理想としているプログラミング言語は,一通りしか書けないものです.何通りも書き方があるってことは(そしてどの書き方も結果が全く同じだと)それは書き方に冗長性があるということです.僕はプログラミングを極力簡単にしたいと思っているので,冗長性があるということはまだ無駄な書き方をしていると解釈します.なので,理想は一通りしか書き方がないというものです.

逆に,いろんな書き方ができる方がプログラムを書きやすいと主張しているプログラミング言語もあります.それはそれで一理ある意見です.

書き方が一通りなのか何通りなのかと,その言語が持っている表現力を混同してはいけません.

リコーダーのように素朴な楽器では,たとえばファの音をだすには何通りかの指使いがあります.替え指といって,トレモロとか曲のフレーズによって動かしやすい指を選んで演奏したりできます.穴を半分押さえるという技をつかうともっといろんな種類の指づかいができるでしょうが,演奏者の音感が良くなければ,簡単に音痴な演奏になります.

一方で,ピアノではファの音を出すにはファの鍵盤を押す以外に方法がありません.ミとソの鍵盤を同時に押すとファが出るとか,ミをほんの少しだけ速く押したら音程が少し下がる,という楽器を作ることはできるでしょうが,そんなことをしたらピアノの魅力を失ってしまいます.

ピアノは操作に対する音程の制御という部分を捨てたおかげで,もっと上の音楽の表現力を持つことができました.リコーダーだと10人くらいいないとオーケストラにならないのに,ピアノだとたった一人でオーケストラができますからね.

ビスケットは表現力が高いように見えて,実は一通りしか方法がない言語です.魚を横に動かすためには,メガネが一つで,メガネのなかに横にずらして魚を入れます.微妙に横の向きを調整することができますが,「この動き」を作るためには「このメガネの置き方」の一通りしかありません.いろんな「この動き」ができるだけです.

それに対して,スクラッチはいろんな書き方ができる言語です.絵を横に動かすには,ずっとの中に入れてもいいし,メッセージを送り続けて,それを受信したら動くようにしてもいいし.絵を相対的に動かすのではなく,変数で座標を管理して,その座標の位置に絶対的に動かしてもいいです.

ビスケットはそういう絵を動かすというレベルの表現に対する冗長性を捨てました.絵を動かす程度でどの方法を使うか迷う必要がないから,もっと先のどんなゲームのストーリにするかまで考えを考える余裕ができます.現に,ビスケットでは1時間くらいで簡単なゲームはつくれてしまいます.

一方で,ピアノの黒鍵と白鍵の区別の発明のようなものもまだないですし,鍵盤の間隔も丁度良い指のサイズとはかけ離れているのでしょう.そういう工夫の積み重ねが求められています.

それからメガネだけでは捨てすぎた部分が確かにあります.スクラッチでは作れるけどビスケットでは作れないプログラムがあります.リコーダーで1/4音階は出せますが,ピアノでは出せません.ピアノで捨てた1/4音階は音楽にとって重要じゃないという流れにしたからピアノは成功したわけです.

今のビスケットは1/4音階どころか,ドとソとラの鍵盤しかないピアノです.まずは白鍵全部だせて,黒鍵も出せて,だけど1/4音は捨てる.そういうどこまで広げてどこを捨てるのか,その切り口がメジャーになれるのか,そういうことなんだと思います.

うまい切り口がみつかれば,たった一人でオーケストラを演奏できるようにプログラムを書けるようになるでしょう.

シェアする

  • このエントリーをはてなブックマークに追加

フォローする