何某日和

「カメラ」のち「ハンダゴテ」ところにより「プログラミング」 ── そんな私“かめきち”のウェブサイト

導入(概要・背景・目標)

目次

概要 ─ 何を研究するのか

研究主題

 まずは本研究の主題(テーマ)を以下の通りご紹介します。

ソースコードは食べられる ── スパゲッティを題材としたソフトウェアプログラム可食化に関する研究

簡単な紹介(関係者向け)

 主題を一見したところで具体的内容までは想像し難いと思いますので、この節で簡単な研究紹介を行います。 (情報工学系の知識をお持ちであると仮定した紹介文です。そうでない場合は、次の「背景」をご覧下さい。)

 ソフトウェアプログラムの品質を計測する「ソフトウェアメトリクス」ですが、そのツールは既存のものだけでも非常に多くの種類が挙げられます。 またその指標も多様で、それぞれのメトリクスツールで、特色ある計測を行うことができるようです。しかし、その計測結果の提示方法についてはどうでしょう、 ほとんどのものは数値として提示するか、良くてもグラフで提示するまで。その結果が良いのか悪いのかも直感的にはわかりづらいのが現状ではないでしょうか。

 それならばと、ソフトウェアメトリクスの計測結果に工夫を凝らすものが登場しました。本稿の先行研究として挙げる「Software Systems as Cities」もその代表例でしょう。 数値やグラフといった抽象的表現に留めるのではなく、都市(建造物)という具体的存在に落とし込むことで、より直感に訴えるような情報提示を目指すものです。
 それを更に発展させる形で、本研究では「都市」の代わりに「スパゲッティ」を用います。良いプログラムを入力すれば良いスパゲッティが出力され、悪いプログラムが入力されれば悪いスパゲッティが出力されるのです。 画面上の仮想的三次元空間に収まらず、本当の実世界にプログラムを写像しよう、そしてソフトウェアプログラムを食べられるようにしよう、という趣旨の下、研究に取り組んでいます。

背景 ─ 研究の経緯

 本研究の生い立ちを記載し、研究に対する動機をここで明らかにします。

ソフトウェアプログラムとその良し悪し

 もはやコンピュータシステムの存在が欠かせなくなった現代の情報化社会は、パソコンやその周辺機器などの「ハードウェア」、通信の要「ネットワークインフラ」、 更にそれら機器の上で動作する「ソフトウェア」などによって構成されています。
 この「ソフトウェア」は概念的な存在であり、実体があるわけではないのですが、敢えて誤解を恐れず、その中身を少し具体的に述べることにします。 「ソフトウェア」とは、プログラミング言語で表現される「ソフトウェアプログラム(仕事手順書)」によって構成されるものです。 アレをやって、その次にコレをやって、その後にソレをやって、終わり!...という具合に、ある仕事を完成させるために必要な作業手順を「ソフトウェアプログラム」として書き出し、 それをどうにかして「ソフトウェア」に仕上げるのだ、と捉えてください。

 さて、ここで登場した「ソフトウェアプログラム」を別のものに喩えると「文学小説」に相当するでしょう。 小説では、登場人物たちが織りなすストーリーを巧みに表現してゆきますが、ソフトウェアプログラムでは、コンピュータが為すべき仕事の手順を巧みに表現してゆきます。 こうして似通った性質を示す両者ですが、その作品の良し悪しについてもまた同様の傾向を持ち合わせているのです。

 良い小説というものは、伝わる緊張感で手に汗を握ったり、思わず感情移入して涙を流したりなど、上手い表現によって読者をその世界へといざなってくれるものです。 逆に悪い小説は、使われている言葉が総じて稚拙であったり、話の変遷が不自然だったりして、冗長さや違和感が気になってしまい、その世界に没入することもままなりません。 ソフトウェアプログラムも同じで、良いものであれば、一見すればその内容(仕事手順)が把握できるものですが、悪いものであれば、不適切な語彙や不自然な遷移を起因として、読み手の混乱をも招きかねません。

良し悪しを計測したい ── メトリクスツール

 何でもそうですが、主観的情報だけで他者と議論することは、前提となる認識が一致しない可能性があるため、不毛な議論になりかねません。 この問題を、客観的情報(共通認識に基づく情報)を用いることで解決しようとするものが、メトリクス(ものさし)です。

 前節で述べたような「プログラムの良し悪し」も、人間が直感的・主観的に好きだの嫌いだのと判断しているようでは、役に立つ情報にはなりません。 そこで、決められた指標に従って数値を算出し、プログラムの性質を客観的な情報として提示するためのツールが拵えられました。それが「ソフトウェアメトリクスツール」です。 メトリクスとは「計測」の意味を有する言葉で、メトリクスツールは「計測ためのツール」まさに「ものさし」のことを指します。 ソフトウェアプログラムを様々な「ものさし」で計測すれば、そのプログラムの特徴や性質を明らかにすることができ、その客観的な計測結果に基づいて他者と議論を行うことが可能となるのです。

より具体的な存在に写像する ── 都市からスパゲッティへ

 さて、メトリクスツールが計測したその結果は、数値やグラフなどで表現することが一般的です。 しかし、例えばプログラムの美しさを数値で表現されたところで、その数値の意味するところ(ニュアンス)が本当に伝わってくるでしょうか。 今ひとつ実感が湧かないのではないでしょうか。

 ここで一つ面白い研究をご紹介します。ソフトウェアを都市(ビル群)に見立てて可視化する研究[1]で、CodeCityというメトリクスツールも開発されています。 ソフトウェアプログラムにおける一定の部品(クラス)を一つのビルに見立てて、三次元グラフィクスとして表現するのです。 ビルの高さはメソッド(手続き)の数に、ビルの面積はフィールド(変数)の数に、ビルの色はLOC(Lines Of Code:行数)に対応付けて、メトリクスによる計測結果を提示しています。 数値やグラフのみで示すのではなく、三次元空間の建造物でソフトウェアを可視化するため、より実在感が伴いますし、パッと見て直感的にソフトウェアの規模や構造を見通すことができるのです。

 さて、ここで私は以下のように思ったのでした。

ソフトウェア可視化の対象がどうして「ビル」なのだろう。もっと他の写像対象は無いものか。

ソフトウェアを都市として可視化するというアプローチには衝撃を受け、面白くも興味深くも感じましたし、 両者ともに「複雑な構造物」という意味で類似しているため、ソフトウェアから都市に写像する所以も理解できます。 が、何か直感的ではないというか、身近ではないような気がしたのです。(田舎暮らしのせいやもしれません。) もっと身近な対象に写像したほうが面白いのではないだろうかと思い、考えを巡らせてみたのです。

都市からスパゲッティへの思考遷移

 まず「ビル」から「道路」を連想したのですが、同じ「建造物」で連想しても大して面白みは変わらないと感じ、思考の飛躍を試み「食べ物」へ。 そして「道路」を「繋がり」として捉えた後、ネバネバと繋がっている「納豆」を連想しました。 ただ、納豆にはクセがあって好みが分かれやすいため、もう少し親しみやすいものはないだろうかと考えたところ「スパゲッティ」に辿り着いたのでした。 既に「スパゲッティコード」や「スパゲッティプログラム」という言葉がある通り、プログラムとスパゲッティには密接な関係が見いだせそうだったこともあり、 写像先を「スパゲッティ」と定めて本格的な研究を始めました。(この思考遷移について[2]) 「良いプログラム」を「良い数値」というよくわからないものに写像するのではなく、「良いプログラム」を「良いスパゲッティ」に写像するのです。悪いものもまた同様に。

従来のソフトウェアメトリクスツールに関する模式図 本研究での開発を予定している新しいメトリクスツールに関する模式図

 最初は、あくまでコンピュータ上で表現することしか頭に無く、「さて、どうやってスパゲッティの三次元グラフィクスを描くかな...」などと考えていたのですが、 よくよく考えてみれば、スパゲッティは見るものではなく食べるもの。ディスプレイ上の仮想的三次元空間にスパゲッティを描くのではなく、現実の三次元空間に本物のスパゲッティを出力すれば良いではありませんか! そしてこの発想が、本研究のテーマとして掲げる「可食化」というアプローチになりました。


[1] Software Systems as Cities : A Controlled Experiment【論文】

[2] 都市から道路へ遷移したのは、ビルのすぐ近くにあるためです。道路は建造物ですが、この建造物から食べ物に遷移したのは気分によるものです。 (ふと思いつくほどに身近な存在が「食べ物」なのです。)食べ物から納豆に落とし込んだのは、その日の買い物で納豆を購入したため。 納豆からスパゲッティに遷移したのは特に理由の無い思いつきです。個人的にはラーメンのほうが好きなので、ラーメンにすれば良かったなどと思ったりもします。

目標 ─ 何を目指すのか

 この節では、「本研究が何を目指すのか」「誰のために何を提供できるのか」といった、研究への意志[3]について言及します。 「スパゲッティプログラム」という言葉の使い方の是非について全世界に問い、また、プログラムの実在感向上によりソフトウェア工学に貢献します。

目標一覧

  1. 新しいメトリクスツールによるソフトウェアプログラムへの存在感付与
  2. 可食化アプローチに関する可能性の追求
  3. 「スパゲッティプログラム」という言葉の用法に関する提言

1. 新しいメトリクスツールによるソフトウェアプログラムへの実在感付与

 中間発表(1)で述べた通り、本研究には以下のような目標があります。

「プログラム」という実体のない抽象的存在を、「スパゲッティ」という具体的存在として表現する事で、プログラムの実在感を向上させること。 また、その実在感の向上によって、プログラミング操作に対する敷居を下げる(プログラミング行為に余裕を生む)こと。 さらに、その余裕により、動作本位の低品質な開発ではなく、正しい設計に従った高品質な開発に意識を移せるようになること。 つまり、世界に高品位なソフトウェア製品を提供できるようになること。

この目標を実現するために本研究では、ソフトウェアプログラムをスパゲッティ(厳密にはそのレシピ)に変換するツール(新しいメトリクスツール)を開発します。 このツールは、ソフトウェアシステム開発の実装工程において、実在感向上による品質意識向上という点で役に立つものとなるでしょう。 またプログラミング教育においても同様に、学習者の「プログラムの実在感」を向上させることで、 プログラミングの修学能力(理解力・想像力・応用力)の向上にも繋げたいと考えています。 いずれは充分な検討を踏まえた上で、オープンソースソフトウェアとして公開する予定です。

2. 可食化アプローチに関する可能性の追求

 本研究では、先行研究があまり見受けられない「可食化」というアプローチを取り扱います。 抽象的存在に実在感を持たせるという試みは、例えばビジュアルプログラミングのような形では実現されていますが、それはまだ仮想空間の域を脱しておらず、充分な実在感があるとは言えません。 可食化は、ディスプレイ上の仮想空間を超えた現実空間への写像だからこそ成せるものであり、その実在感は比にならないほど向上するはずです。
 本研究では、実際に開発したツールを用いて実験及びアンケート調査などを行い、可食化が有効に働いているか否かを検証します。 それにより、情報工学分野のみならず、他分野における可食化アプローチを支援するための文献ともなり得ましょう。

3. 「スパゲッティプログラム」という言葉の用法に関する提言

 これもまた中間発表(1)で述べたことですが、本研究では次のようなスタンスを取ろうと考えています。

世界中のイタリアンシェフを敵に回すような表現であり、言語道断である。プログラムと同様にスパゲッティにも良し悪しはあるのだ。

 現在、世界中で用いられている「スパゲッティプログラム」あるいは「スパゲッティコード」という言葉は、概して悪い意味で用いられています。 しかし、スパゲッティのその性質や文化を追えばわかるように、その世界もまたピンからキリまで非常に幅広く、表情豊かな食材なのです。 「もつれているもの」として一概に悪い意味で用いられる「スパゲッティプログラム」という言葉は、なんとも理不尽ではないでしょうか。 以上のことを踏まえ、悪い意味でのみ用いるには相応しくないという趣旨を本研究の活動を通して主張したいと考えています。 ただし、本研究を進めるにあたって必要になる主軸ではありますが、研究の主題ではありません。


[3] ルイス・カーンの「構築への意志」から

補足

このページに以前掲載していた文章を残しておきます。


 プログラムの構成部分が複雑に絡みあった状態のことを「スパゲッティプログラム(スパゲッティコード)」などと表現することがありますが、 これは巧みな比喩表現であり、プログラムの性質を上手く表現している良い例です。 しかし、「実際のプログラム」を「実際のスパゲッティ」として表現したものを、これまでに見たことがあるでしょうか。

 今回は特に、この点(プログラムをスパゲッティとして表現すること)に着目して研究を行います。 「見た目から得られる美味しさのオーラ(=読みやすさ?)」を可視化によって、 「縺れ【もつれ】具合・絡み具合(=複雑さ?)」を可触化によって、 さらに「実際に食べてみた時の絶妙なハーモニー(=エレガントさ???)」を可食化によって表現できないかと考えたのです。
 スパゲッティという一例を取ってみても様々な性質・側面がありますが、それはまたプログラムについても同様。これら多様な性質・側面を互いに関連付け・対応付けするのです。 そうすることで、これまで概念的認識に留まっていた「プログラム」が、あたかも目の前にあるかのような“実在感”を持ち合わせることになり得ましょう。

「プログラミング」とは、コンピュータが織り成す物理的演算処理を隠蔽した抽象的な概念であり、またその行為は「抽象的概念の操作」そのものです。 そのため、プログラミングに長けようとすると必然的に「抽象的概念」への理解とその行解を求められることになります。 しかしながら人間は、抽象よりも具象の扱いを得意とするもの。そう簡単にプログラミングという概念を掴み切ることは難しいはずです。

 本研究の成果は、そうした「プログラミングへのハードル」を低くすることに繋がるでしょう。 つまり「人間が苦手とする抽象的概念の操作」をより具体的なものに落とし込むことで、認知・操作しやすいものに転換するのです。 その題材が、普段の生活に身近な存在である「スパゲッティ」であることは、こうした理由からも適していると言えるのではないでしょうか。