ギター練習とプログラムコードの手癖

うっかりして ギター練習を再開しました | Moonmile Solutions Blog にプログラムコードの手癖の話を入れるのを忘れていたので追記。

楽器の「コード」とプログラミングの「コード」に引っ掛ける訳ですが、意外と通じるものがあります。というか、通じるようにやってます。

ギターの手癖

Julian Lage の講義の映像を見ると「こんな風に上がり下がりして、ギターらしく弾くところに留まってしまいますよね」という科白があります。オレオレブルースを引いてブルーススケールに慣れてくると、上がり下がりだけで満足してしまうことが多いです。先のストアアプリのギターソロ練習も、ヘビメタのそれらしいスケール(それはそれでギターリストの個性なんだけど)の早弾き方法がたくさん載っています。が、実際やってみると(そんなに早弾きできるわけではないし、きちんとできたらそれでそれで面白いのだろうけど)それらしくはなるけど、それ以上になりません。

人間の指の反応がどれくらいのスピードに耐えられるのか分かりませんが(32拍で区切ると、1/32だから 30msec ぐらいで弾くことになります)、まあ16拍(50msec程度)でオルタネイトすることもあるでしょう。というか、そもそも16拍すべてを打つ必要はなくて、11拍目に打てば、16拍を感じることができるという技もありますよね(4:8:11:16で打つと、12拍からずれた1拍分を16分として感じられるというあれです)。

そのあたりも含めて、ブルースのリズムに乗って弾けば「ブルース風」になるし、jazz スケールで引けば「jazz っぽく」聞こえます。フラメンコもカントリーもそれらしいリズムとスケールがあって、だからこそ「フラメンコ」や「カントリー」に分類されているという逆の意味もあります。フリージャズとか音楽理論とか、理論方面は別として、感覚的に「そう聞こえる」ということです。

試してみると、グレンミラーのリズムで弾くと、ブルーススケールでも「グレンミラー」のように聴こえます。また、アタックNo.1の最初の「くるしくたって…」の部分をブルースに入れると「アタックNo.1ブルース」が出来上がります。なんだかよくわからないけど、自分でやってて面白いのです。

「ガンダム」と「魔女っ子メグちゃん」と「アタックNo.1」の音を拾っていくと、作曲した頃の渡辺岳夫を感じることができます。「ああ、ここはギターの運指上、ハンマリングの音がなるよね」ってな具合で、ギターで作曲するときの癖が随所にでてきます。たぶん、ピアノの場合とは違った癖があって、逆にピアノの作曲でもそれ相応の癖がでると思うんですよね。それは、指の動きの「制限」であったり、作曲家の癖であったり、同時にソロ演奏するときの手癖であったりします。

くそまじめにメジャースケール、マイナースケールと練習するのもよいのですが(私の場合は、きちんとスケール練習していないので、スケールのほうをちょっとやらないとダメなんですけど)、自分の「こうなって、こういう音が鳴って、そして運指がこうなって」という繰り返しをしていくと、なんとなく自分の好きな指の動きが作れます。まあ、それで何が弾けるというわけでもないけど、10分ぐらいはソロ演奏やっていても「自分を」楽しませる程度には弾けるようになります。

プログラムコードの手癖

同じことはプログラムのコードにも言えます。コーディングする人の「性格」ではなくて、「手癖」のようなものですね。「性格」≒「手癖」は似た感じではあるのですが、「良い性格」「悪い性格」というのではなくて、その人を形作っている「手癖」(良いも悪いもない)というものです(まあ、性格に良いも悪いもない、という意味での「性格」ならば、それでも ok です)。

コードの手癖というのは、先のブルースケールやジャズスケールやカントリーのようなもので、その人の通奏低音みたいなものです。最初に C 言語を習った人は C 言語風にプログラムを書くし、Java だったら Java 風に書きます。C# だったら、 C# 風にって具合ですね。あと、Perl とか Ruby とか PHP とか色々あります。

ひとつのプログラム言語を一生使うことは稀なので、最初に習ったプログラム言語からそのほかの言語を覚えます。プログラム言語にも潮流があるのですが、プログラム言語を習う側にも潮流があるので、それが交差します。Java で C 言語風に書いたり、C# で Java 風に書いたりします。それぞれが、それぞれの潮流≒歴史を持っているのと、プログラム言語自体の歴史があるし、同時にこうありたいという個人の願望と、プログラム言語自体の願望があって、「いろいろな書き方」ができてきます。また、いろいろな制限を持ち込まれますよね。LINQ 禁止とかのアレです。

まあ、禁止事項は別として、一定の品質を保ったプログラムコードであっても、いろいろな書き方ができます。そういう時、新規の場合は「好みですよね」で済ますのですが、とあるコードに加筆するようになった場合(いわゆる改造とか改修案件とかいうものです)、もともとあるコード作成者の「手癖」をうまく延長しないと、そこだけ違った色合いになります。まあ、ガコっと欠けてしまったときには、速乾パテでも塗らないといけないわけで、時と場合によるんですが、できるだけ元コードの「手癖」をまねると、コードがなじみます。感覚的に言えば、元コードにうまくなじむので、なんとなく品質も高くなるし、再び同じ場所のコードを修正しようとしたときに、コードが修正しやすくなります。手癖が同じですからね。

コード規約とか、社内標準とか、補完機能を使って「強制的に揃える」のがよいのか、通奏低音としての「手癖」にあわせるのがよいのか、これも時と場合によるんでしょうが、どちらの使い分けがあってもいいですよね。

そういえば、ソフトウェア開発をオーケストレーションとして扱おうと思ったことがあるけど、それれぞれの演奏者は「プロ」の技を競うのだから、コーディングの協調性(ここでは「悪い意味での協調性」)を求められる時に困るし、いわゆるバックバンド的なスタイルでコーディングを求められることもあるのだから、ソフトウェア開発のオーケストレーションも一手段にすぎないのだな、と思い直したりしてます。

カテゴリー: 開発 パーマリンク