美しいコードとは?

「ソフトウェアは工業製品ではない」、Rubyのまつもと氏が講演

2009/04/10

 ソフトウェアは工業製品ではない――。Rubyの生みの親としてしられるまつもとゆきひろ氏は2009年4月9日、InfoQ主催のイベント「QCon Tokyo 2009」の基調講演で、ソフトウェアと何であり、何でないのか、それはどういう性質のものであるのかを雄弁に語った。

コードとは設計である

 「ビューティフルコード」と題した基調講演を行ったまつもと氏は、2007年に共著者の1人として出版した同名の書籍に書いたエッセイに込めた思いを、次のように語る。

 「世界に冠たる日本の製造業のノウハウを適用することで生産性を上げることができるに違いないという発想がありますが、ソフトウェアは工業製品ではない。そうした誤解を正していきたい」。

matz01.jpg Rubyの作成者でネットワーク応用通信研究所フェロー、楽天技術研究所フェロー、Rubyアソシエーション理事長のまつもとゆきひろ氏

 ソフトウェア産業界では、よくエンジニアが何十万人足りないということが言われる。しかし、まつもと氏は、これは工業生産と同じ方法論を当てはめることから来る誤解だという。ソフトウェアは大量生産するものでもなければ、部品の組み立てのような工程もないからだ。

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

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

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

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

プログラマはアーティスト、という意味の誤解

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

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

コードは実用品であり、読み物でもある

 アートだと言ってもプログラムは飾るのが目的ではない。「実用に供してなんぼ。日本では用の美というらしいですが、どのぐらい目的に合致しつつ美しいかが重要」(まつもと氏)という。この意味では、プログラムは美術館に飾るようなアートではない。

 コードは読み物でもあるという。

 「ソフトウェアは書くものであって、読むことの重要性は、あまり意識していなかった人が多いのではないか。しかし、ソフトウェア開発においてキーボードを叩いている時間は短いのです。むしろ考える時間、読んでいる時間が長い」。

 読むというのは自分が書いたコードのバグを取るために読む行為でもある一方、先人が書いたコードから学ぶために読むことも重要だという。こうした観点では、今ほど「読み物」に溢れた恵まれた時代はないとまつもと氏は強調する。

 「教科書のような教材には基本的なことしか書かれていないんですよね。OSの教科書ならスケジューリング、タイムシェアリングのことは書いてあるでしょう。でも、リソースが足りなくなったときに、どういう戦略がいいかという実用的なことは、どこにも書いてない。ところがビジネスで使えるレベルのOSが手元にあれば、こうした例外的な知識もすべて学べるのです」

 「LinuxでもFreeBSDでも読めます。今は非常に恵まれた時代で、オープンソースのありがたいところです。FSF(Free Software Foundation)やBSD系の人たちが自由なライセンスで提供してくれたからです。もし、リチャード・ストールマンがおらず、OSSムーブメントもなく、商業的なソフトウェアしかなかったら、自由に読むことが限定されていたでしょう。OSの生の知識が手に入るのは一部の限定された人たち、という状況になっていたのではないかと思うんですよね」

コードは人を感動させる

 まつもと氏は「コードは人をたびたび感動させる」という。そうしたコードにあるのは、例えば“パワーの美”だという。

 ソフトウェアの世界ではデータ量に対して必要な計算量を「O(1)、O(logn)、O(n)、O(n・logn)、O(n^2)」と、O記法というオーダーで表す。データ量が増えたときに、計算量は一定(O(1))であるのか、データ量に比例して増えるのか(O(n))、データ量の2乗に比例して増えてしまうのか(O(n^2))では、まったく意味が異なる。それを決定するのはアルゴリズムだ。

 「適切なアルゴリズムを選んだり、見つけたりすることで、小手先の最適化でがんばるのとは桁違い、いや桁・桁違いといっていいぐらいに効率化できる。そういうパワーを見せつけてくれるようなプログラムを、私は美しいと思う」。

 アルゴリズムには不可能を可能にする力もあるという。

 Ruby 1.9では、それまでのRuby 1.8系以前と異なり、文字列オブジェクトが多言語対応している。これはほかの主要プログラミング言語が内部コードとしてUnicodeを採用し、各種エンコーディングとの相互変換を行っているのとは処理モデルが異なる。どうしてRubyだけ違っているのか。

 「もともとRubyは作者が日本人ということでUS-ASCIIとシフトJIS、EUCだけに対応していました。ところが、あるとき吉田さんという人が大きなパッチをメーリングリストに送ってきて、こうするとすでにある仕組みでUTF-8にも対応できますよ、というんです。にわかに信じられなかったんですが、パッチを当てたら確かに動いた」

 その後、この修正をベースにして、誰もできると思っていなかったCSI方式と呼ばれる現在のRubyの方式が可能となった。これは日本のプログラマが長年文字コードの扱いで苦労してきた経験があったからという。

ソフトウェアの内面の美、外面の美

 まつもと氏は、ちょうど人間と同じように、ソフトウェアにも内面の美と外面の美があるのではないかと指摘する。

 内面の美は、機械に対する深い理解と知識に基づいたコードに宿る。それは、例えばアルゴリズムのパワーであり、未来の生産性のためにきちんとモジュール構成になっていることだという。

 一方、外面の美というのは、人間(プログラマ)がどう感じるか、その理解に基づいたコードに宿る。まつもと氏は、それは時代によって変化するとしながら、人間にとっての簡潔さを強調する。

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

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

 人間のやりたいことを簡潔に記述できるようにするために、プログラミング言語の開発者として、水面下では懸命にがんばっているという。「水鳥のように優雅に。でも水面下では懸命に。苦労を見せびらかすのは粋じゃない」(まつもと氏)。

matz02.jpg ソフトウェアには内面の美と外面の美があるという(資料中、両方が外面となっているのは誤植で「機械」のほうは内面の美)

「単純さ」の定義は単純じゃない

 記述の簡潔さ、シンプルさは力であり美しいというまつもと氏だが、シンプルさは誤解されやすい概念だという。

 「Rubyはシンプルじゃないと指摘されたり、ときには怒られもします。文法は大きいし、メソッドも多い。でも、ソフトウェアは複雑なものです。ソフトウェアが記述する世界が複雑なので、これは避けがたい現実」

 「単なる単純さはゴールではないのです。人間の書くソフトウェアが単純になることがゴール。(言語設計や実装を行う)誰かが複雑さを引き受けると、(それを使うプログラマである)人間がちょっとしか複雑なことをしなくて済む。プログラミング言語が単純だと、逆に人間ががんばらないといけなくなる。人間にフォーカスするということです」

 人間にフォーカスするため、まつもと氏は言語設計を「唯一の正解がなく、1つには決まらない。とても非理系的なこと」だと話す。

内面の美にも、もっと目を

 Rubyに限らず、ソースコードそのものに宿る内面の美に対する関心が低いのではないか。まつもと氏は言う。

 「会社というのは都合のいいように、プログラマには歯車であってほしいと考えます。コードが美しいかどうか、アートかどうかなど関心を持っていません」

 「内面の美は外から見えず、コードに内在しています。そこにもっと関心をもってもらいたいと思います。ソースコードはアートで、作品なのです。工業製品として扱われるのは心外です。プログラマのみなさんは、そういう気概をもって仕事をしているでしょうか。アーティストは歯車ではない。右から左へ流れ作業をするのではく、創造的、自発的に仕事をするのです」。

 プログラムを作ることの“楽しさ”や、アーティストとしてのこだわり、そうしたものが生産性や品質に及ぼす影響を強調してやまない、まつもと氏。最近は、開発環境も情報も豊富にある恵まれた時代なのに、プログラマと呼ばれる人たちが「妙に暗い」(まつもと氏)ことを憂えてもいるという。

 まつもと氏は40歳を超えた今、周囲の同世代が「最近コードを書いていない」という中で「あれだけ好きだったのだから1日1度は必ずコードを触る」ことを欠かさないという。「80歳になっても毎日プログラムを書いていたい」と講演を締めくくった。

関連リンク

(@IT 西村賢)

情報をお寄せください:

Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

- PR -

注目のテーマ

ソリューションFLASH

「ITmedia マーケティング」新着記事

Xに迫る新興SNS「Threads」と「Bluesky」 勢いがあるのはどっち?
Metaは最近のBluesky人気をけん制するためか、立て続けに機能アップデートを実施している...

もしかして検索順位に関係する? SEO担当者なら知っておきたい「ドメイン」の話
この記事では、SEOの観点から自社Webサイトに適したドメインの選び方を考えます。適切な...

B2Bマーケターの「イマ」――KPI・KGIはどう設定? 他部門への関与度は?
メディックスがITmedia マーケティングと共同で開催したウェビナー「2024年最新調査から...